GPU工作负载分析与系统优化实践
1. GPU工作负载分析从硬件计数器到系统优化在当今高性能计算HPC领域GPU加速集群和超级计算机已成为不可或缺的计算资源。随着GPU硬件性能的不断提升其暴露的硬件计数器也日益丰富为深入理解GPU工作负载特性提供了前所未有的机会。然而这些宝贵的数据资源在实际应用中却往往未被充分利用导致用户在性能诊断和优化决策时缺乏有效依据。Perlmutter超级计算机作为NERSC国家能源研究科学计算中心的旗舰系统配备了3072个CPU节点和1792个GPU节点。每个GPU节点包含4个NVIDIA A100 GPU其中1536个节点使用40GB HBM显存版本256个节点使用80GB版本。这些GPU通过第三代NVLink互连每对GPU间四条链路每个方向每链路25GB/s带宽构成了强大的计算能力。关键提示现代GPU提供的硬件计数器涵盖了从计算核心活动、显存使用到互连流量等全方位指标但大多数用户仅关注基础的GPU利用率GPU_UTIL而忽视了其他更有价值的性能数据。2. 系统级遥测数据采集与处理2.1 数据采集框架Perlmutter采用轻量级分布式指标服务LDMS进行系统级监控数据采集。LDMS通过插件机制支持不同系统组件的监控包括数据中心GPU管理器DCGM插件采集GPU硬件计数器Slurm作业调度系统提供作业元数据起止时间、分配的节点列表等数据采样频率固定为每10秒一次确保既能捕获短期波动又不会对系统性能造成显著影响。研究中使用的数据集覆盖了2025年3月1日至4月1日期间的全部75,703个GPU作业。2.2 核心硬件计数器解析表1列出了本研究中使用的关键DCGM计数器及其含义计数器简称全称描述GPU_UTILDCGM_FI_DEV_GPU_UTILGPU执行至少一个内核的时间占比SM_ACTVDCGM_FI_PROF_SM_ACTIVE多处理器中至少有一个warp活跃的时间占比FP16_ACTVDCGM_FI_PROF_PIPE_FP16_ACTIVEFP16半精度计算管道活跃周期占比FP32_ACTVDCGM_FI_PROF_PIPE_FP32_ACTIVEFP32单精度计算管道活跃周期占比FP64_ACTVDCGM_FI_PROF_PIPE_FP64_ACTIVEFP64双精度计算管道活跃周期占比TNSR_ACTVDCGM_FI_PROF_PIPE_TENSOR_ACTIVETensor核心活跃周期占比DRAM_ACTVDCGM_FI_PROF_DRAM_ACTIVE设备内存数据传输活跃周期占比HBM_USEDDCGM_FI_DEV_FB_USED高带宽内存使用量MBNVLINK_TX/RXDCGM_FI_PROF_NVLINK_TX/RX_BYTESNVLink传输/接收数据速率字节/秒PCIE_TX/RXDCGM_FI_PROF_PCIE_TX/RX_BYTESPCIe传输/接收数据速率字节/秒TOTAL_ENGDCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTIONGPU总能耗mJGPU_TEMPDCGM_FI_DEV_GPU_TEMPGPU当前温度℃2.3 数据预处理流程原始数据需要经过严格的清洗和预处理才能用于分析数据对齐将LDMS采集的GPU样本与Slurm作业元数据通过时间戳和节点ID匹配异常值过滤移除GPU利用率超过100%的异常样本占比0.0001%排除持续时间小于3分钟的作业剔除GPU平均利用率低于1%的作业作业分类根据用户账户和节点类型区分生产作业与系统维护作业实践经验数据预处理中最关键的挑战是正确解释不同计数器的语义。例如有些计数器报告的是活动时间占比如GPU_UTIL有些则是累积值如TOTAL_ENG需要采用不同的聚合方法。3. 工作负载特性深度解析3.1 作业规模与资源使用模式分析Perlmutter上的作业分布发现几个显著特征作业规模分布85%的作业64,183个仅使用单个节点4个GPU大规模作业≥512 GPU仅占极小比例但消耗大量资源运行时间特征单节点作业平均运行时间约55分钟多节点作业平均运行时间约2小时系统策略限制最长运行时间不超过48小时GPU利用率中等规模作业33-512 GPU利用率最高47-48%超大规模作业≥512 GPU利用率下降明显中位数约20%单节点作业利用率低于多节点作业38% vs 45%图不同规模作业的GPU利用率分布箱线图显示中位数、四分位数及离群值3.2 浮点运算管道使用情况通过分析FP16/FP32/FP64/Tensor管道的活动情况可以深入了解工作负载的计算特性FP64主导44%的作业仅使用FP64管道平均GPU利用率为36%Tensor核心使用TensorFP64组合占18%作业平均利用率达50%TensorFP32组合占4%作业平均利用率46%纯Tensor作业占6%但平均利用率仅20%FP16罕见仅178个作业使用FP16管道技术洞察Tensor核心通常与矩阵运算相关其高利用率表明这些作业可能涉及深度学习训练或大规模线性代数计算。而纯Tensor作业的低利用率可能源于间歇性的Tensor核心使用。3.3 高带宽内存HBM使用分析显存容量是GPU作业的关键约束资源。特别针对80GB GPU作业的分析发现使用效率55%的作业峰值HBM使用不超过50%即40GB高利用率作业仅20%的作业达到80%以上HBM使用率资源优化空间系统可通过历史数据提示用户更合理选择GPU类型# HBM使用率分析示例代码 def analyze_hbm_usage(jobs): hbm_usage [] for job in jobs: if job.requested_mem 80GB: peak_usage max(job.hbm_samples) / 80 # 转换为百分比 hbm_usage.append(peak_usage) plt.hist(hbm_usage, bins20) plt.xlabel(Peak HBM Usage (% of 80GB)) plt.ylabel(Number of Jobs) plt.show()4. 基于屋顶线模型的工作负载分类4.1 计算密集型与内存密集型作业定义屋顶线模型是区分计算密集型与内存密集型作业的有效工具。其核心参数算术强度AI每字节内存访问对应的浮点运算数FLOP/Byte平衡点峰值计算吞吐与内存带宽的比值对于每个采样时刻我们计算实际算术强度AI (FP_ACTV × Peak_FLOPS) / (DRAM_ACTV × Peak_Mem_BW)当AI 平衡点时样本分类为计算密集型否则为内存密集型。4.2 分类结果与能耗分析基于FP64管道的分析显示作业类型分布内存密集型81%的作业计算密集型19%的作业能耗特性相同GPU小时下内存密集型作业能耗更高这与HBM访问的高能耗成本一致相比计算操作图计算密集型与内存密集型作业在相同GPU小时下的能耗比较4.3 时空负载均衡分析4.3.1 空间不均衡性定义时间窗口内的空间不均衡指标SI(j,w) 1 - (∑TC(g,w)) / (g_j × max(TC(g,w)))其中TC(g,w)GPU g在窗口w内的计数器总和g_j作业使用的GPU数量研究发现低利用率作业30%不均衡性最高峰值0.78中高利用率作业不均衡性显著降低4.3.2 时间不均衡性单个GPU的时间不均衡性定义为TI(j,g) 1 - (∑C(g,t)) / (t_j × max(C(g,t)))作业级指标取所有GPU的最大值。5. 系统优化建议与实践指南基于上述分析我们提出以下优化建议资源分配优化对HBM需求40GB的作业优先分配40GB GPU实现历史使用模式分析在作业提交时提供资源建议性能调优重点内存密集型作业应优先优化内存访问模式计算密集型作业可探索混合精度计算等技巧监控策略改进对大规模作业≥512 GPU增加监控频率以捕捉同步开销开发不均衡性预警机制帮助用户识别负载分配问题能耗管理对内存密集型作业实施更严格的功耗限制优化任务调度平衡计算与内存密集型作业的混合避坑指南在实际部署监控系统时需特别注意采样频率与系统开销的平衡。过高的采样频率如5秒可能导致显著的性能下降而过低如30秒则可能丢失关键的性能波动信息。Perlmutter采用的10秒间隔是一个经过验证的折中方案。6. 典型问题排查与解决6.1 低GPU利用率问题症状作业显示GPU_UTIL持续低于20%诊断步骤检查SM_ACTV与GPU_UTIL的关系若SM_ACTV高而GPU_UTIL低可能存在内存瓶颈若两者都低可能CPU端存在瓶颈分析DRAM_ACTV持续高值表明内存访问密集波动大可能指示不规则访问模式检查NVLink/PCIe活动高互连流量可能预示数据通信瓶颈解决方案对于内存瓶颈尝试增大计算粒度或优化内存布局对于CPU瓶颈检查主机线程配置或减少CPU-GPU交互6.2 多GPU负载不均衡问题症状SI指标持续高于0.5诊断步骤检查各GPU的FP管道活动模式差异分析HBM使用分布验证NVLink流量是否对称解决方案检查数据划分策略确保均匀分布验证集体通信操作的正确性考虑动态负载均衡方案7. 未来研究方向基于当前研究发现以下方向值得进一步探索精细化的能耗建模结合更多计数器建立更精确的能耗预测模型自适应监控策略根据作业特征动态调整采样频率和监控指标智能调度算法利用历史性能数据优化作业调度和资源分配混合精度分析深入研究FP16/Tensor核心的使用模式和优化潜力在实际应用中我们发现80GB GPU的HBM使用率数据特别具有启发性。许多用户倾向于过度申请显存资源以防万一而系统级的遥测数据可以帮助他们做出更明智的决策。这种数据驱动的资源分配方法有望显著提高超级计算机的整体吞吐量。