高性能计算(HPC)领域的客户持续快速扩展,生成式AI、大语言模型(LLM)、计算机视觉等应用推动了对GPU资源需求的显著增长。在此背景下,GPU效率正日益成为基础设施优化的关键重点。在大规模GPU集群环境中,即便是微小的效率损耗,也可能累积演变为严重的集群性能瓶颈。
优化 GPU 使用率有助于:
- 显著降低运营成本。
- 支持更多工作负载访问 GPU 资源。
- 提升开发者的使用体验与任务处理效率。
在这篇博客中,我们介绍了一种在大型集群中减少闲置 GPU 浪费的方法。这项工作有望显著降低数百万的基础设施成本,同时提升开发者的整体工作效率和资源利用效率。从行业视角来看,资源浪费往往意味着 GPU 未能充分发挥其计算潜力,这通常是由于集群管理不够高效,或在优化过程和问题排查中存在疏漏所致。
了解 GPU 资源浪费
GPU 资源浪费可分为多个类别,每一类都需要针对性的解决方案。其中一种常见情况是作业占用了 GPU 资源,却未能执行任何有意义的任务,实际上处于空闲状态。下表概述了各类废弃物问题。
| GPU 资源浪费问题 | 解决方案 | 观测到的频率 |
| 故障导致硬件不可用 | Fleet Health Efficient 计划对硬件进行监控、跟踪并推动修复 | 低 |
| GPU 运行状态良好但未被充分利用 | 主要聚焦于提升调度器效率 | 低 |
| 作业占用 GPU 但未能高效利用计算资源 | 推进应用优化工作 | 高 |
| 作业占用 GPU 但未能利用 | 减少闲置垃圾计划 | 中等 |
在运行支持高度多样化工作负载的研究型集群过程中,我们遇到了导致 GPU 闲置的各种预期之内与意外之外的原因。准确区分这些因素颇具挑战性,但对保障研究人员的工作效率至关重要。我们已识别出若干反复出现的 GPU 闲置模式,主要包括:
- CPU 数据处理任务: 在未使用 GPU 的情况下于 GPU 节点上运行。
- 配置不当的任务: 因独占节点设置导致 GPU 资源过度分配。
- 卡顿任务: 看似处于活动状态,实则已暂停。
- 基础设施开销: 由容器下载或数据获取引发的延迟。
- 无人参与的交互式会话: 残留作业持续占用系统资源。
减少 GPU 资源浪费的方法
为了大规模减少闲置 GPU 的浪费,应重点关注实际集群行为,而非依赖理论上的利用率目标。一旦发现潜在模式,便可采用一组集中的运维技术有效提升效率,而无需对架构进行彻底改造。
在该分析中,我们重点考虑了四种技术:
- 数据收集与分析:通过收集资源利用率和作业执行情况,识别导致 GPU 资源浪费的关键因素。
- 指标构建:设计专用的 GPU 空闲浪费指标,用于建立基准并持续评估优化成效。
- 客户协作:与受空闲资源影响较大的用户及团队密切合作,定位并解决效率瓶颈。
- 方案扩展:开发自助式工具与自动化流程,推动优化措施在整体 GPU 集群中规模化落地。
构建 GPU 利用率指标工作流
为构建 GPU 利用率指标的工作流,我们将来自 NVIDIA 数据中心 GPU 管理器(DCGM) 的实时遥测数据与 Slurm 作业的元数据进行关联,从而生成反映工作负载实际 GPU 资源消耗情况的统一视图。尽管 Slurm 提供的数据粒度为五分钟,但其时间分辨率仍足以与更高频率的 DCGM 数据有效结合。
这一过程中的关键推动因素之一,是NVIDIA DCGM Exporter的HPC作业映射功能,该功能可将GPU活动关联至精确的作业上下文,从而为衡量闲置时间、识别资源浪费的来源,以及将效率低下的问题追溯到特定工作流程奠定了基础。
管道建立后,下一步是检查由驱动分析提供的 DCGM 信号,并明确如何识别 GPU 的空闲行为。后续章节将概述用于判断作业是否导致 GPU 空闲时间的各项指标及应用标准。
充分利用 DCGM
DCGM 是 NVIDIA 针对数据中心 GPU 推出的管理和监控框架,提供一系列功能强大的工具与 API,支持大规模地监控、控制和优化 GPU 资源。
DCGM 的核心功能在于提供各类指标和遥测数据,这些数据被组织为称为“字段”的结构。每个字段都具有唯一的标识符和字段编号,共同涵盖从 GPU 温度、时钟频率到利用率和功耗等各类信息。完整的可用字段列表可参考官方文档。
以下是这些指标通常涵盖的内容:
- GPU 利用率指标:用于衡量 GPU 的使用状况,涵盖核心计算负载、内存使用量、I/O 吞吐量和功耗等方面,有助于判断 GPU 是否处于高效运行状态或空闲状态。
- GPU 性能指标:反映 GPU 的运行效率,包括时钟频率、散热情况和节流事件等,可用于评估整体性能并识别潜在瓶颈。
对于 GPU 浪费指标, DCGM_FI_DEV_GPU_UTIL 字段目前作为衡量 GPU 活动的主要依据。后续的分析迭代计划转向使用 DCGM_FI_PROF_GR_ENGINE_ACTIVE,以更准确地反映 GPU 引擎的利用率。
是什么将作业分类为空闲?
AI 和机器学习(ML)工作负载中,GPU 往往存在未被充分利用的时段,这可能是由于基础设施效率不足,也可能是工作负载自身运行特性的结果。实践中常见多种此类情况:
- 容器下载:当多个主机同时拉取容器时,作业启动可能出现延迟,特别是在负载较高或镜像仓库响应较慢的情况下。
- 数据加载与初始化: 训练任务在开始 GPU 计算前,可能需要等待从存储系统中加载数据,从而造成等待时间。
- 检查点读写操作:在执行检查点的读取或写入过程中,GPU 利用率通常会下降。
- 模型特定行为:某些类型的模型由于架构设计原因,本身难以充分占用 GPU 资源。
为充分考虑上述情况,我们设定了长期不活动的判定阈值。采用较为保守的定义:当检测到 GPU 连续一小时未进行有效活动时,即认定该工作负载处于空闲状态。
用于分析 GPU 集群性能的服务与工具
在确定 GPU 浪费指标后,工作重点将转向数据的可用性建设。我们的目标不仅是揭示资源闲置现象,更要帮助研究人员和平台团队快速定位效率低下的根本原因。为此,我们构建了多层可视化界面与操作工具,将底层遥测数据转化为清晰的洞察信号,并实现自动化干预。
GPU 浪费指标通过两个主要接口进行展示。
- 用户门户: NVIDIA 内部门户,供机器学习研究人员查看集群、用户及任务层级的 GPU 使用情况,便于识别资源空闲模式。
- OneLogger:统一的监控层,将任务执行阶段与 GPU 遥测数据关联,帮助用户更清晰地定位效率低下的环节。
这些工具共同提升了GPU资源浪费的可见性与可操作性。
工具:空闲 GPU 作业收割机
我们开发了一项服务,用于识别并清理不再使用 GPU 的作业,使集群具备自我清理的能力。由于集群运行的工作负载种类繁多,且缺乏统一的抽象层,用户可根据其作业预期的空闲特征,灵活调整回收机制的参数。这一设计有助于系统有效区分可预期的暂时空闲与真正的资源浪费。
总的来说,该服务:
- 通过 DCGM 指标监控 GPU 利用率,
- 识别长时间处于非活动状态的标记作业,
- 终止这些作业并回收闲置的 GPU 资源。
- 记录并报告已释放的资源容量及用户配置信息,以支持后续优化与改进。
这种方法确保了预期和非预期的空闲模式在整个车队中均能得到一致的处理。
工具:作业 linter
我们开发了一个作业配置检测工具,用于识别工作负载中的错误配置。例如,当作业请求独占节点上的所有 GPU 资源,却只使用其中一部分,导致其余设备闲置时,该工具能够及时发现此类问题。未来版本的检测工具将进一步扩展,以覆盖更广泛的配置错误模式。
工具:已停用的作业
集群中具有时间限制的作业常导致用户提交一系列后续任务,这些任务会占用已预留的资源并在队列中持续等待,即使实际已不再需要。此外,若用户作业中出现任何回归问题,由于需重复大量重试,故障排查和恢复过程将变得更加复杂。这些已失效的提交不仅消耗调度资源,还会产生不必要的资源开销。为此,相关工具被设计用于自动识别并取消此类冗余作业,从而减少资源浪费,提升整体调度效率。
经验教训和后续步骤
效率低下的小问题若不及时处理,往往会迅速演变为大规模的隐患。一旦确立了恰当的衡量指标,仅通过提升可见性,就能促使团队自发地采取更负责任的行为并持续改进。然而,仅有指标是不够的,研究人员还需要具体可行的指导,以切实提升工作负载的效率。要实现车队层面的整体优化,这些实践必须得到广泛推广和采纳。此外,监控工具必须深度集成到日常的工作流程中才能发挥实效——实践表明,在作业提交环节以及实验跟踪界面中直接提供资源利用率的洞察,尤为关键。
通过这些优化措施,GPU 资源浪费从约 5.5% 降低至约 1%。这一显著改进不仅带来了可观的成本节约,也提升了 GPU 在处理高优先级任务时的可用性。成果表明,一旦识别并解决运营中的效率瓶颈,便可将大量资源重新释放回资源池,供其他任务使用。
测量过程还发现了导致空闲行为的诸多基础设施短板。为持续减少浪费,将推进多项优化措施,包括加快容器加载速度、实现数据缓存、支持长时间运行的作业以及增强调试工具功能。
立即启动对 DCGM 指标 的监测与监控。这些信号能够揭示 GPU 运行周期中的资源浪费问题,为构建简洁、实用的优化工具提供基础,助力研究人员高效改进工作流程,持续提升 GPU 利用率。
Mohammed Fawzy、Mohammed Elshall、Bugra Gedik、Michael Hale、Kaiken Shi、Vishal Patil 和 Ashita Kulkarni 均为本博客所介绍的研究工作作出了贡献。