我们用 FFT 替换了 AdamW 的优化器状态,显存占用直接减半——有人在尝试非量化方法吗?
摘要
一个团队声称通过用 FFT 将 AdamW 的梯度状态变换到频域,丢弃低能量频率而非使用量化,把优化器状态的显存占用减半。代价是每步额外的计算量,但 OOM 风险几乎为零。他们正在分享自己的 Colab 环境和基线权重,并询问其他人是否也在探索非量化的显存削减方法。
大家好,
和大多数人一样,我们一直在和消费级 GPU 上微调 8B 和 70B 模型时不断出现的 OOM 错误作斗争。AdamW 优化器状态始终是最大的瓶颈。我们不想依赖激进的 8-bit 量化,因为已经观察到收敛性出现退化,于是我们做了一个实验:在频域中处理优化器状态。
方法论:我们不是存储完整的梯度,而是使用 FFT 对其进行变换。这样可以将高能量信号从噪声中分离出来。我们动态丢弃影响力低的频率成分,并对状态进行压缩。当我们反变换回去时,它保持了方向上的完整性,但显存占用大约减少了 50%。
代价在于:运行 FFT 操作会带来额外的计算开销。每一步会稍微慢一些,但相应的回报是完全避免了 OOM 崩溃,并且可以在标准硬件上大幅提高 batch size。
目前,我们正在向任何想挑我们数学毛病或者尝试攻击它的人开放我们内部的 Colab 环境和基线权重。我们非常好奇,这里还有没有其他人也在探索频域方法,或者其他用于显存削减的非量化方案?
相似文章
SkewAdam:一种分层优化器,将MoE状态内存减少97%(可在40GB GPU上容纳6.7B MoE模型)[R]
SkewAdam是一种分层优化器,可将MoE状态内存使用量减少97%,从而使得6.7B MoE模型能够适配单个40GB GPU。
我为大规模 GPU 工作负载开发了一个 PyTorch 优化器——希望获得反馈[P]
一位开发者分享了 ApexW,这是一款实验性的 PyTorch 优化器,采用紧凑的优化器状态和基于 Triton 的执行路径,声称在大张量工作负载下,优化器步骤的执行速度约为原来的 1.5 倍,优化器状态内存占用减半——同时也坦言,在包含大量小张量的模型上会出现性能下降,且端到端性能提升微乎其微。
@QuixiAI: 教训总结:始终使用BF16 KV缓存。我之前用的是turboquant。是的,VRAM消耗很糟糕——所以另一个技巧是…
作者分享了使用BF16 KV缓存而非turboquant进行AI模型优化的技术经验,并在SlimServe中为Qwen模型实现了CPU卸载以管理VRAM消耗。
Gefen:优化的随机优化器
Gefen是一种内存高效的优化器,通过自动共享二阶矩估计并使用学习到的码本量化一阶矩,将AdamW的内存占用减少约8倍,同时保持与AdamW相当的性能。
autotrust/GEV-26B-Decide-NVFP4
autotrust/GEV-26B-Decide-NVFP4 是 GEV-26B-Decide 的 NVFP4 4 位量化版本,仅对 3,840 个路由专家 MLP 进行量化,将权重从 49.5 GB 压缩至 18 GB(GPU 显存减少 66%)。其基准测试结果与 bf16 模型的差异处于运行间噪声范围内,并支持在 Blackwell GPU 上通过 vLLM 进行原生 W4A4 推理。