Spectra 推出即插即用优化器 SpectraAdamW,LLM 训练显存占用降低 50%
Show HN: Spectra – A drop-in optimizer that cuts LLM training VRAM by 50%
Spectra Labs 发布 SpectraAdamW,一款可将 LLM 微调优化器状态显存降低 50% 的即插即用优化器,通过因子化方差近似与频域动量压缩实现。
作者:Spectra Labs Research
状态:封闭测试(提供 Python 概念验证)
摘要
在消费级硬件上微调大型语言模型(LLM)时,主要的显存瓶颈并非模型权重,而是优化器状态。标准 AdamW 需要存储两个庞大的状态张量(动量和方差),其显存开销为模型参数量的 2 倍。非结构化稀疏(幅度剪枝)和激进的 8 位量化往往会导致收敛稳定性严重下降。
我们提出 SpectraAdamW,一种混合优化器,利用因子化方差近似和频域动量压缩,将优化器状态开销精确降低 50%(约 1 倍参数量),同时保持全精度收敛行为。
方法
1. 因子化方差近似(FVA)
标准 AdamW 以全精度跟踪梯度的二阶矩(未中心化方差)。SpectraAdamW 将这一二阶矩分解为二维权重矩阵(例如线性层)的行均值和列均值。 通过仅存储 $O(N \times 1)$ 和 $O(1 \times M)$ 张量,而非完整的 $O(N \times M)$ 矩阵,我们有效消除了方差状态的内存占用。
为防止通常与激进方差压缩相关的吉布斯振铃伪影,因子化方差在梯度更新前通过标量乘法严格重建,确保分母严格为正且有界。
2. 频域动量压缩(原生后端)
虽然方差被因子化,但一阶矩(动量)仍保留大量方向信息。在我们的专有 C++ 后端中,动量通过快速傅里叶变换(FFT)将梯度变换到频域进行压缩。这将高能量信号与噪声分离,使我们能够动态屏蔽低影响频率并压缩状态,而不会丢失结构化的梯度完整性。
经验性显存基准测试
在模拟的 8192 维 Transformer 层更新中(批量大小 128):
- AdamW 状态显存:256.00 MB
- SpectraAdamW 状态显存:128.16 MB
- 降低幅度:50.0%
损失曲线表明,在第 40 步时与 AdamW 收敛完美对齐,避免了激进量化方法中出现的收敛延迟惩罚。
用法(Python 概念验证)
我们目前正在分发 PyTorch 最小可行产品(MVP),以验证因子化方差数学和显存降低效果。该优化器可作为 torch.optim.AdamW 的一行即插即用替代品:
from spectra_optim import SpectraAdamW # Example: Fine-tuning an 8B model model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B") # Standard AdamW State VRAM: ~32GB # SpectraAdamW State VRAM: ~16GB optimizer = SpectraAdamW(model.parameters(), lr=1e-4, weight_decay=0.01) loss.backward() optimizer.step()
测试版访问
完全优化的 C++ CUDA 后端目前处于封闭开发阶段。如果您正在受限硬件上进行研究,并希望在我们的私有 Google Colab 环境中验证 Python 概念验证,请在 Reddit 上通过 r/SpectraLabs 联系 Spectra Labs 团队。
来源:Hacker News · github.com