在AI Runtime上将Qwen训练时间缩短6倍

在AI Runtime上将Qwen训练时间缩短6倍

💡 原文英文,约1400词,阅读约需6分钟。
📝

内容提要

本文介绍优化大模型微调性能的方法。作者以Qwen 27B为例,指出GPU利用率98%仍具误导性,需用torch trace深入分析。通过融合内核(如Flash Linear Attention、causal-conv1d)减少算子数量,并将批次改为1D打包张量消除填充,训练时间从7小时44分降至1小时17分,提速6倍。

🔎

延伸解读

GPU利用率98%为何仍误导?

文章指出,GPU利用率只反映GPU活跃时间占比,不反映计算效率。即使达到98%,模型可能仍在执行大量低效小算子。作者通过torch trace分析发现,Qwen 27B训练中批量矩阵乘法等算子调用超过3万次,导致大量内存搬运和调度开销。因此,优化前需用profiler定位真实瓶颈,而非依赖单一利用率指标。

融合内核:减少算子数量的关键

针对非标准门控delta网络层,作者使用causal-conv1d和flash-linear-attention两个融合内核,将多个小算子合并,减少HBM与片上内存间的数据传输。安装后,端到端训练时间从7小时44分降至2小时5分,提速3.7倍,GPU算子总数减少15倍。注意:训练需前向和反向内核,部分内核仅支持推理,需确认可用性。

1D打包张量:消除填充的代价

默认2D矩形批次会将短序列填充至8192 token,浪费显存和计算。改用1D打包张量并传入正确的position_ids,可确保每个样本内注意力不跨样本。此改动将训练时间从2小时5分进一步降至1小时17分,节省36%。但输入管道更复杂,易引入错误影响模型质量,需权衡收益与风险。

优化路径的启示与局限

文章展示的6倍提速来自系统化性能分析、融合内核和批次打包,而非单一技巧。但需注意:这些优化针对Qwen 27B和特定数据集,其他模型或数据可能效果不同;融合内核依赖torch和CUDA版本,缺失时transformers会静默回退到低效实现;打包张量需谨慎处理注意力掩码,否则可能损害模型质量。

❓

Q&A

为什么GPU利用率98%仍不能说明训练性能好?

GPU利用率只统计GPU处于活动状态的时间百分比,并不反映GPU在活动时是否被高效利用。因此即使显示98%,模型可能仍在执行大量低效操作,实际性能有较大优化空间。

如何深入分析大模型训练中的性能瓶颈?

可以使用torch trace机制,在训练循环中捕获CPU和GPU上的操作耗时及调用次数,从而识别出耗时最多的操作和潜在的低效点。

融合内核(fused kernels)为什么能加速训练?

融合内核将多个小GPU内核合并为一个,减少GPU高带宽内存与片上内存之间的数据传输,并实现更高效的GPU核心调度,从而提升性能。

在Qwen模型训练中,具体使用了哪些融合内核?

针对Qwen的非标准门控delta网络层,使用了causal-conv1d和flash-linear-attention两个融合内核,它们将每层的多个操作融合,显著减少了算子数量。

如何通过批次打包减少填充并加速训练?

将批次从2D矩形张量改为1D打包张量,并传入正确的example position_ids,使模型能应用正确的注意力掩码,确保每个样本内的token只关注自身。这消除了填充浪费,训练时间从2小时5分降至1小时17分。

优化后Qwen 27B微调的训练时间从多少降到多少?

训练时间从7小时44分钟降至1小时17分钟,实现了6倍的加速。

🏷️

标签

➡️

继续阅读