随着人工智能天气和气候预测模型迅速得到采用,由某中心提供的Earth-2平台提供了一系列库和工具,可利用GPU优化的软件栈来加速解决方案。降尺度(Downscaling)是一项精炼粗分辨率(25公里尺度)天气数据的任务,它使国家气象服务机构能够以足够精细的空间分辨率,为农业、能源、交通和防灾提供高分辨率预测,以支持可操作的决策和规划。
传统的动力降尺度方法成本极其高昂,尤其是在高分辨率、大范围空间域上运行大型集合时。CorrDiff是一个生成式AI降尺度模型,它绕过了传统数值方法的计算瓶颈,实现了最先进的结果,并采用基于块(patch)的多重扩散方法,可扩展到大陆和全球范围。与传统的数值方法相比,这种基于AI的解决方案在显著降低计算成本的同时,实现了效率和可扩展性的大幅提升。
CorrDiff已在全球范围内应用于多种场景,证明了其在需要精细尺度天气信息的各领域的多功能性和影响力:
本文展示了为CorrDiff训练和推理进行的性能优化和增强,这些优化已集成到Earth-2软件栈中的两个工具:某中心的PhysicsNeMo和某中心的Earth2Studio。这些优化实现了超过50倍的训练和推理基线加速,从而能够:
CorrDiff:训练和推理
图1说明了用于生成式降尺度的CorrDiff训练和采样工作流程。在扩散训练期间,使用预训练的回归模型生成条件均值,作为训练扩散模型的输入。关于CorrDiff的背景和详细信息,请参阅CorrDiff论文、PhysicsNeMo文档和源代码。
为何优化CorrDiff?
扩散模型是资源密集型的,因为它们依赖于迭代采样,每个去噪步骤都涉及多次神经网络计算。这使得推理耗时且成本高昂。训练也更加昂贵,因为去噪器必须在所有噪声水平上进行训练。优化其性能需要:
CorrDiff使用EDM架构,其中几个计算昂贵的操作,例如组归一化、激活函数和卷积,可以使用高级软件包和内核融合进行优化。
CorrDiff还使用两阶段流水线(回归和校正),通过缓存回归输出并在多个扩散步骤中分摊成本,从而最小化冗余计算。
加速后的CorrDiff
在下图中,我们总结了实现训练和推理成本超过50倍加速的各种优化。图2和图3总结了每项连续优化相对于基线实现的累积加速因子。每项优化的详细信息在后续章节中提供。
图2. CONUS尺度训练中,基于块的CorrDiff训练每个块的加速。每个块约20万像素(448×448)。绿色条形图绘制了相对于fp32基线性能的加速比(左y轴),灰色实线绘制了每个块元素的采样运行时间(对数刻度,右y轴)。
图3. CONUS尺度推理中,基于块的CorrDiff每个样本的加速。样本约200万像素(1056×1792)。绿色条形图绘制了相对于fp32基线性能的加速比(左y轴),灰色实线绘制了每个批次元素的采样运行时间(对数刻度,右y轴)。
优化的CorrDiff:如何实现
在NVIDIA H100 GPU上使用FP32精度、批大小=1、块大小=1的CorrDiff基线性能(绝对时间)如下:
虽然有效,但这个基线受到昂贵的回归模型前向传递和低效的数据转置的限制。
图4. 训练性能剖析:NVIDIA Nsight Systems剖析图,显示了基线基于块的CorrDiff训练各阶段的运行时间分布,回归前向传播主导了总迭代时间。
关键CorrDiff训练优化
为了实现CorrDiff训练的实质性加速,最终在NVIDIA B200上达到53.86倍、在H100上达到25.51倍的加速比,我们引入了以下一系列性能优化:
torch.compile来融合剩余的元素级操作(例如加法、乘法、sqrt、exp)。这改善了调度,减少了全局内存访问,并削减了Python开销,实现了相对于基线的25.51倍加速。图5:优化后的基于块的CorrDiff训练剖析图
训练吞吐量
我们在表1中比较了在NVIDIA Hopper架构上的基线CorrDiff与在Hopper和Blackwell架构上优化版本的训练吞吐量。优化实现在两种架构上都实现了效率提升,其中Blackwell显示出最显著的增益。
GPU | 版本 | 精度 | 回归 (ms/块) | 扩散 (ms/块) | 总运行时间 (ms/块) | 吞吐量 (块/秒) |
|---|---|---|---|---|---|---|
H100 | 基线 | FP32 | 1204.0 | 374.0 | 1578.0 | 0.63 |
H100 | 优化版本 | BF16 | 10.60 | 951.25 | 961.85 | 16.2 |
B200 | 优化版本 | BF16 | 4.73 | 424.56 | 429.29 | 34.1 |
表1. CorrDiff训练吞吐量比较
"光速"(Speed-of-Light)分析
为了评估优化后的CorrDiff工作流距离硬件性能上限有多近,我们在H100和B200 GPU上进行了"光速"(SOL)分析。这通过评估GPU资源的使用效率,提供了可达到性能的上限估计。
估算SOL的步骤:
在此框架下,优化后的CorrDiff工作流在H100上达到了估计SOL的63%,在B200上达到了67%。这表明GPU利用率很高,同时仍为未来的内核级改进留有空间。
为了进一步评估效率,我们如图5和图6所示可视化内核性能。每个点代表一个内核,根据NVIDIA Tensor Core利用率(x轴)和组合的DRAM读/写带宽利用率(y轴)绘制。点的大小反映了其在总运行时间中的占比,突出了性能关键操作。
位于顶部或右侧边缘附近的内核通常优化良好,因为它们充分利用了计算或内存资源。相比之下,位于左下象限的内核两者都未充分利用,代表了进一步优化的最佳机会。这种可视化提供了运行时分布的清晰图像,有助于确定GPU效率可以改进的地方。
图6:在B200上的基线FP32基于块CorrDiff内核利用率分布
图6显示了基线CorrDiff实现的内核在Tensor Core利用率和DRAM带宽利用率方面的分布。在使用FP32精度的未优化工作流中,>95%的时间花费在低利用率内核上,其中DRAM利用率(读取+写入)和张量核心利用率均低于60%。大多数运行时间主导的内核聚集在原点附近,显示出非常低的DRAM和Tensor Core利用率。只有少数内核位于靠近上边界或右边界的区域,那里的内核变得明显是内存受限或计算受限。未优化的美国CorrDiff工作流在B200上仅达到SOL的1.23%。
图7:在B200上的优化后BF16基于块CorrDiff内核利用率分布
图7显示了优化后实现的内核在Tensor Core利用率和DRAM带宽利用率方面的分布。在使用AMP-BF16训练的优化工作流中,更高比例的内核位于左上或右下边缘附近,表明具有良好的性能和GPU利用率。优化后的CorrDiff现在在B200上达到了SOL的67%。尽管优化工作流整体有所改进,但一些内核仍有进一步加速的潜力。
CorrDiff推理优化
许多训练优化也可应用于推理。我们提出了几项针对推理的优化,以最大化性能。
torch.compile()加速剩余的折叠/展开步骤,完全消除了im2col瓶颈,从而实现了7.86倍的加速。本文描述的几项优化也适用于一般的扩散模型,有些则是基于块的方法所特有的。因此,这些优化可以移植到PhysicsNeMo中的其他模型,并用于开发天气降尺度之外的解决方案。
开始使用
fp_optimizations: amp-bf16
use_apex_gn: True
torch_compile: True
profile_mode: Falseuse_fp16: True
use_apex_gn: True
use_torch_compile: True
profile_mode: False
io_syncronous: True将profile_mode设置为False以获得优化性能,因为NVTX注释会为torch.compile工作流引入图中断。
要利用最新的Apex GroupNorm内核,可以在PhysicsNeMo容器Dockerfile中构建Apex GroupNorm,或者在加载PhysicsNeMo容器后在本地构建:
CFLAGS="-g0" NVCC_APPEND_FLAGS="--threads 8" \
pip install \
--no-build-isolation \
--no-cache-dir \
--disable-pip-version-check \
--config-settings "--build-option=--group_norm" .了解更多关于PhysicsNeMo中优化的CorrDiff训练的信息,并在Earth2Studio中运行优化的工作流。
视频1. 可视化在CONUS上基于块的CorrDiff降尺度,并实现55倍加速
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。