HomebrewML/HeavyBall
Efficient optimizers
它解决的问题
HeavyBall 为 PyTorch 提供了一个高性能、可组合的优化器库。它通过使用编译后的构建块融合进 Triton 内核,减少了内存流量并提高了执行速度,从而解决了标准优化器实现效率低下的问题。它还简化了高级优化技术(如二阶方法和状态压缩)的集成,这些技术通常难以实现或组合。
工作原理
该库由 100 多个编译函数构建而成,这些函数被组装成转换链。通过使用 torch.compile(fullgraph=True),这些函数会融合为最小内核,显著减少了对内存的读取和写入次数。例如,标准的 Adam 更新可以从 14 次读取和 9 次写入减少到 4 次读取和 3 次写入。
它支持多种优化器类型,包括一阶(AdamW、SGD)、正交(Muon)、基于 Shampoo(SOAP)和 Kronecker 分解(PSGD)。它还提供了一个“SplitOpt”,用于将不同的优化器应用于不同的参数组。对于分布式训练,在使用 FSDP 时,它会自动处理二阶方法的重新分区。
适用人群
需要在 PyTorch 生态系统中获得更快优化器步骤、更低优化器状态内存开销,或希望使用各种高级二阶和正交优化算法的机器学习工程师和研究人员。
亮点
- 丰富的优化器套件:包括与 API 兼容的 AdamW、SGD 和 RMSprop 替代品,以及 Muon、SOAP、LATHER 和 ADOPT。
- 可组合特性:用于 MARS 方差缩减、谨慎更新和 PaLM 风格 beta2 调度的可链式标志。
- ECC 状态压缩:减少优化器状态内存使用(例如 bf16 + int8 校正),在不牺牲精度的情况下节省空间。
- 高性能:通过
torch.compile将操作融合进 Triton 内核,显著缩短步骤延迟。 - 分布式支持:原生兼容 DDP 和 FSDP,包括针对复杂二阶方法的自动重新分区。
相关
- 项目
- 项目
- 项目
- 项目
- 项目