分享自:

深度学习任务GPU低利用率的实证研究

期刊:IEEE/ACM 46th International Conference on Software Engineering (ICSE '24)DOI:10.1145/3597503.3639232

深度学习中GPU利用率低下的实证研究报告

本文将对Yanjie Gao, Yichen He, Xinze Li, Bo Zhao, Haoxiang Lin, Yoyo Liang, Jing Zhong, Hongyu Zhang, Jingzhou Wang, Yonghua Zeng, Keli Gui, Jie Tong, Mao Yang等研究人员合作完成,并于2024年4月发表在《ICSE ‘24: Proceedings of the IEEE/ACM 46th International Conference on Software Engineering》上的研究论文《An Empirical Study on Low GPU Utilization of Deep Learning Jobs》进行学术报告。该论文首次针对工业界深度学习任务中的低GPU利用率问题展开了系统性的大规模实证研究。

第一, 研究主体与发表情况 本研究的作者团队主要来自Microsoft Research、Microsoft公司、北京大学、清华大学和重庆大学。其中,Haoxiang Lin为通讯作者。研究论文于2024年4月在软件工程领域的顶级会议——第46届IEEE/ACM国际软件工程会议(ICSE ‘24)上发表,并作为会议论文集的一部分公开。会议于2024年4月14日至20日在葡萄牙里斯本举行,论文已获得开源支持。

第二, 学术背景与研究目标 深度学习已成为众多智能软件应用的核心,企业开发者通常将深度学习任务提交到共享的多租户平台(如微软Azure机器学习、亚马逊SageMaker等)上进行模型训练和测试。这些平台配备了大量的图形处理器(GPU)以加速计算。然而,实践中发现,许多任务对所分配GPU的利用率极低,这不仅造成了宝贵的平台资源(GPU、CPU、内存、网络带宽、存储)的巨大浪费,也降低了开发效率。理解这一现象背后的原因并寻求解决方案,对于揭示深度学习领域的独特软件工程挑战、开发高质量且高性价比的软件解决方案至关重要。

尽管已有许多针对CPU利用率的研究,但由于CPU与GPU在核心数量、内存大小、调度方式和编程接口等方面的根本性差异,这些研究无法为提升GPU利用率提供充分支持。近期也有一些针对深度学习系统失败的实证研究,但它们主要关注程序缺陷或从集群调度视角看问题,缺乏对单个任务内部低GPU利用率根本原因的系统性探究。

因此,本研究的目标是:1)揭示工业界深度学习任务低GPU利用率问题的根本原因;2)针对这些原因提出可行的修复方案。研究范围限定在微软内部一个名为Platform-X的真实生产深度学习平台上的任务。

第三, 研究的详细工作流程 本研究是一项严谨的实证研究,其工作流程主要包括数据收集、问题识别、根因分类与修复方案提出、以及修复方案验证四个核心步骤。

1. 数据收集: 研究者首先抓取了Platform-X平台在2021年8月某十天内所有由产品和研究团队开发者提交的任务。经过筛选(排除运行中、失败、终止及仅用于测试的系统任务),他们保留了平均GPU利用率低于或等于50%的任务。这个50%的阈值是与Platform-X团队基于平台整体利用率和领域经验共同确定的。最终,他们从所有提交者、团队、集群和应用领域中随机抽取了400个任务作为研究对象。这些任务训练了BERT、Swin Transformer、NeRF、ResNet50、Inception-v3、图神经网络等多种代表性模型,涵盖自然语言处理、计算机视觉、生物信息学、搜索、广告、游戏等多个应用领域。对于每个选中的任务,研究者收集了任务元数据、执行日志、运行时指标、脚本和程序等相关信息。

2. 问题识别: 研究者对400个任务进行了手动、从零开始的深入分析。分析过程分为三个层次:首先,仔细检查用户编写的shell脚本和Python程序,理解任务目的和所使用的设备(GPU、CPU、网络等)。其次,将代码与运行时指标(如GPU/CPU/内存利用率)进行关联分析,通过日志消息推断特定代码片段的起止时间戳,以判断GPU是否在此期间被充分利用。最后,通过交叉比对代码和运行时数据,重新评估执行过程,判断是否存在提升GPU利用率的空间(如增大批次大小)或减少非GPU操作的机会(如异步化)。当遇到复杂情况时,研究者会直接联系任务提交者进行澄清。整个分析由两位作者独立完成,根因标注的评分者间信度(Cohen’s kappa)高达94.51%,显示了高度一致性。最终,他们共从400个任务中发现了706个由任务脚本和程序代码逻辑导致的低GPU利用率问题。

3. 根因分类与修复方案提出: 基于对问题的深入分析,参考先前研究和平台最佳实践,研究者识别出问题的共同根因,并将其归纳为15个具体类别,进而组织成4个高层维度。同时,为每个问题类别提出了对应的修复建议。此过程涉及小组讨论以解决分歧、最终确定分类并制定修复方案。

4. 修复方案验证: 研究者在Platform-X平台上对真实任务(如BERT、Swin Transformer等)进行了实验,以确认问题并验证所提出修复方案的有效性。他们主要验证了针对三个最常见问题类别(批次大小不当、模型检查点同步保存、主机-GPU数据传输低效)的修复方案,通过测量应用修复前后任务的GPU利用率、GPU内存峰值使用率和执行加速比来评估效果。

第四, 研究的主要结果 1. 问题分类与分布: 研究将706个问题归纳为4个维度和15个类别。具体分布如下: * 维度一:任务维度(34个,占4.82%):由不恰当的任务类型或配置引起。包括需要开发者频繁交互的“交互式任务”(15个)、请求GPU数量超过实际需求的“GPU超额订阅”(6个)、计算完成后未及时释放资源的“未释放任务”(9个)以及将非深度学习任务(如数据分析)提交到深度学习平台的“非DL任务”(4个)。 * 维度二:模型维度(319个,占45.18%):与深度学习模型本身及训练/评估过程相关。这是问题最多的维度之一。 * 批次大小不当(181个,占25.64%):是数量最多的问题类别。使用过小的批次大小会显著减少深度学习算子的GPU计算量。识别条件是在训练/评估阶段,平均GPU利用率和GPU内存峰值利用率均不高于50%。 * 模型检查点保存(116个,占16.43%):将模型检查点同步保存到分布式数据存储中非常耗时,尤其是对于大模型,会造成GPU长时间空闲。 * GPU内存不足(22个,占3.12%):GPU内存容量限制了进一步增加计算(如扩大批次大小)的可能性。识别条件是训练/评估阶段平均GPU利用率不高于50%,但GPU内存峰值利用率超过80%。 * 维度三:数据维度(325个,占46.03%):由各类数据操作引起,是问题数量最多的维度。 * 低效的主机-GPU数据传输(197个,占27.90%):是数量最多的问题类别,主要出现在PyTorch任务中,由于默认未启用内存钉扎(pin_memory)导致数据传输延迟增加。 * 数据交换(50个,占7.08%):在分布式训练中,GPU之间频繁交换梯度等数据,会中断计算。 * 数据预处理(28个,占3.97%):在CPU上进行耗时的数据预处理。 * 远程数据读取(18个,占2.55%):直接从分布式存储读取输入数据,网络延迟导致GPU等待。 * 外部数据使用(18个,占2.55%):从外部网站(如Hugging Face)获取数据,可靠性和速度不佳。 * 中间结果上传(14个,占1.98%):同步上传中间训练结果到远程存储,类似于模型检查点问题。 * 维度四:库维度(28个,占3.97%):与依赖库和深度学习框架相关。 * API误用(16个,占2.27%):例如错误设置CUDA_VISIBLE_DEVICES环境变量,或未正确使用多GPU并行API(如PyTorch的DataParallel)。 * 长时间库安装(12个,占1.70%):在任务初始化阶段花费大量时间(≥10分钟)安装依赖库,期间GPU空闲。

2. 修复方案验证结果: 研究者通过实验验证了三种关键修复方案的效果: * 增大批次大小:在BERT和Swin Transformer任务中,增大批次大小显著提升了模型训练阶段的GPU利用率(BERT从64.4%升至90.78%,Swin从57.79%升至85.05%),并带来了最高4.92倍和3.41倍的执行加速。 * 异步模型检查点保存:对于大模型或使用大批次时,将同步保存改为异步保存能有效提升GPU利用率和任务速度。 * 启用自动内存钉扎(Automatic Memory Pinning):在PyTorch的DataLoader中设置pin_memory=True,可以加快主机到GPU的数据传输速度。

综合应用上述三种修复后,BERT任务的最终加速比达到7.52倍,Swin Transformer任务达到3.95倍,效果显著。实验结果也表明,绝大多数(84.99%)的低GPU利用率问题只需少量代码/脚本修改即可修复,而剩余问题则需要平台、框架和工具链的改进。

第五, 研究结论与意义 本研究首次对工业界深度学习任务的低GPU利用率问题进行了全面的实证分析。主要结论是:低GPU利用率源于GPU计算不足(如批次大小过小)和非GPU任务的中断(如同步保存检查点)。数据操作(46.03%)和模型相关操作(45.18%)是问题的主要来源。

研究的科学价值在于:1)识别并系统化了一个在真实企业AI开发实践中普遍存在且影响重大的研究问题;2)通过大规模实证研究,首次详细揭示了该问题的根因图谱,为后续研究(如自动化诊断工具、性能预测模型)提供了坚实的基础和明确的方向;3)提出的分类框架和修复方案,深化了学术界和工业界对深度学习系统性能工程,特别是资源利用效率这一独特挑战的理解。

研究的应用价值体现在:1)为深度学习开发者提供了具体的、可操作的指南,帮助他们编写出更高效利用GPU资源的代码;2)为深度学习平台的设计者和维护者指出了关键的优化方向(如支持异构流水线、GPU共享、分布式数据缓存等),以提升整体资源利用率和成本效益。

第六, 研究亮点 1. 首创性与系统性:这是首个针对单个工业深度学习任务低GPU利用率问题的大规模、系统性实证研究,填补了该领域的研究空白。 2. 真实的工业场景与数据:研究基于微软内部生产平台(Platform-X)上400个真实的、多样化的任务数据,结论具有很高的现实代表性和说服力。 3. 深入的根因分析:研究不仅统计了问题现象,更重要的是通过细致的代码-日志-指标关联分析,深入挖掘并归类了15种根本原因,形成了清晰的问题分类体系。 4. 实用的修复方案与验证:针对每一类问题都提出了具体、可行的修复建议,并通过在真实任务上的实验验证了关键修复方案的有效性,使研究成果具备直接的工程指导意义。 5. 高度的可泛化性:尽管研究在微软内部进行,但由于Platform-X在硬件、软件栈和编程范式上与主流公有云平台高度相似,所发现的问题和结论具有普适性,这一点也得到了文中引用的谷歌等公司最佳实践指南的佐证。

第七, 其他有价值的内容 论文在讨论部分提出了基于研究结果的未来研究方向,极具启发性: * 工具支持方向:开发GPU利用率估计与预测工具,帮助开发者在任务提交前选择最优配置;开发代码顾问,通过静态程序分析提前发现潜在的低效代码模式。 * 平台改进方向:探索异构流水线,将任务拆分为CPU和GPU子任务并动态分配资源;利用NVIDIA多实例GPU(MIG)技术实现细粒度GPU共享;构建面向深度学习负载的分布式数据缓存系统。

这些方向不仅指出了解决现有问题的更高级途径,也拓宽了软件工程与系统领域在支持AI计算方面的研究视野。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com