跳到正文
Hacker News· KanishkIndia·· 9 天前AI 评分38

Spectra 推出即插即用优化器 SpectraAdamW,LLM 训练显存占用降低 50%

Show HN: Spectra – A drop-in optimizer that cuts LLM training VRAM by 50%

AI 导读

Spectra Labs 发布 SpectraAdamW,一款可将 LLM 微调优化器状态显存降低 50% 的即插即用优化器,通过因子化方差近似与频域动量压缩实现。

正文 · AI 翻译

作者: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