我为大规模 GPU 工作负载开发了一个 PyTorch 优化器——希望获得反馈[P]
摘要
一位开发者分享了 ApexW,这是一款实验性的 PyTorch 优化器,采用紧凑的优化器状态和基于 Triton 的执行路径,声称在大张量工作负载下,优化器步骤的执行速度约为原来的 1.5 倍,优化器状态内存占用减半——同时也坦言,在包含大量小张量的模型上会出现性能下降,且端到端性能提升微乎其微。
嘿,我最近一直在开发一个叫 ApexW 的 PyTorch 优化器,想着把它分享到这里,听听比我更懂这方面的人的反馈。主要目标是减少优化器状态的内存占用,并看看在较大的 GPU 工作负载上能把优化器更新步骤加速多少。我一直在尝试紧凑的优化器状态和基于 Triton 的执行路径。在目前的测试中,对于包含少量大型张量的工作负载,Triton + 紧凑状态路径比 PyTorch 的融合版 AdamW 快约 1.5 倍,优化器状态的内存占用也大致减半。不过,结果并非全都理想。这些数据来自仅针对优化器的基准测试,而不是完整的模型训练。自动执行模式目前还无法稳定获得同样的加速,而且包含大量小张量的工作负载比 PyTorch 的融合优化器慢得多。所以,我绝不是在声称它能在所有工作负载中更好地替代 AdamW。我想在更贴近实际的模型和不同的 GPU 上进行测试,也希望有人能帮忙审视一下实现和基准测试。现实检验(取舍)我想在这里实事求是地说明——这是工程上的取舍,不是什么魔法:小张量上的 Python 循环开销:在测试包含大量微小张量的布局(many-small 测试)时,ApexW 的 Triton 内核受到 Python 内核启动延迟的严重影响。例如,当 1.28 亿个参数分散在大量小张量中时,PyTorch 原生实现每步耗时 16.1 毫秒,而 ApexW 紧凑版每步耗时 76.0 毫秒(加速比约为 0.21 倍)。如果你的模型由大量微小层组成,标准 PyTorch 明显更好。端到端影响:虽然优化器更新步骤本身的速度最高可达原来的 1.5 倍,但它只占完整训练步骤的一小部分(主要耗时在前向和反向传播上)。在我的端到端 MLP 测试中,由于 C++ 的深度集成,PyTorch 的整体运行速度仍然略快。你为什么应该关注它,又该在什么时候关注?如果你正在训练较大的深度学习模型(例如 Transformer 模型或进行大语言模型微调),并且经常遇到内存不足(OOM)的瓶颈,**,**将优化器状态的内存占用严格减半,就能让你在不升级硬件的情况下增大批量大小或扩大模型规模。GitHub:https://github.com/omen42515-prog/apexw/tree/main 如果你开发过 PyTorch 优化器、Triton 内核,或训练过较大的模型,我很想听听你的看法。尤其想知道,我的基准测试设置是否存在明显问题,或者是否遗漏了什么重要测试。
相似文章
我们用 FFT 替换了 AdamW 的优化器状态,显存占用直接减半——有人在尝试非量化方法吗?
一个团队声称通过用 FFT 将 AdamW 的梯度状态变换到频域,丢弃低能量频率而非使用量化,把优化器状态的显存占用减半。代价是每步额外的计算量,但 OOM 风险几乎为零。他们正在分享自己的 Colab 环境和基线权重,并询问其他人是否也在探索非量化的显存削减方法。
@leloykun:[进行中] 关于 Lean4-to-TileLang 张量程序超级优化器的博文:
一篇技术博文介绍了一种 Lean4-to-TileLang 张量程序超级优化器,能自动生成优化的 GPU/TPU 内核与超参数缩放规律,展示了相较 torch.compile 的性能提升。
Tauon:一种在 GPT-Mini 上超越 Muon 的新型优化器(更低损失,~8.5% 更快的步长时间)[P]
Tauon 是一种新型优化器,使用多项式和正交化技术,在小型 GPT-Mini 模型的初始基准测试中超越 Muon 和 AdamW,显示出更低的损失和更快的步长时间。
@burny_tech: 关于优化器魔法的更新
一篇新的NVIDIA论文提出,像Muon和SOAP这样的高阶优化器,可以作为大规模LLM预训练中AdamW的更高效替代方案。
在8GB GPU上实验用于PyTorch的自适应内存管理器——非常期待反馈
作者正在实验用于PyTorch的自适应内存管理器,以防止8GB GPU上的CUDA内存溢出错误,分享代码并寻求社区反馈。