Hacker News· woctordho·· 8 天前AI 评分66
Show HN:基于 GGUF 的 LoRA 训练,40G 显存跑 Qwen3.8-Flash-Next
Show HN: LoRA over GGUF – Train Qwen3.8-Flash-Next in 40G VRAM
AI 导读
作者发布 transformers5-qwen3.5-recipe 仓库,用 GGUF 作为低显存 LoRA 训练的基础模型格式,在无 CPU offload 的情况下于 40 GiB 显存训练 Qwen3.8-Flash-Next(125B-A6B + 51B engram)。
正文 · AI 翻译
开放权重 AI 就像开源软件。用户不仅运行权重,还会修改权重。为本地硬件开发训练框架很重要。
GGUF 将取代 bitsandbytes,成为低显存 LoRA 训练的基础模型格式。我尝试过训练,没有使用 CPU offload:
- Qwen3.6-35B-A3B 在 16 GiB 显存中(这意味着在 64 GiB 中训练 Qwen3.5-122B-A10B、在 192 GiB 中训练 Qwen3.5-397B-A17B 都绰绰有余)
- DeepSeek-V4-Flash(284B-A13B)在 90 GiB 显存中
- Qwen3.8-Flash-Next(125B-A6B + 51B engram)在 40 GiB 显存中
目前此仓库中的所有 kernel 和参数都是为 Strix Halo 调优的。要支持其他 GPU 还需要更多工作。
训练涉及的内容:
- 使用 transformers 5 和 PEFT 的常规训练循环
- 带 GGUF 量化器的 Transformers,见 https://github.com/woct0rdho/transformers/tree/gguf 。我在 huggingface/transformers#40070 中跟踪此事。如果最终无法合并到 transformers 中,我会在此仓库中以一些 monkey patch 的形式重新实现它
- 调优的 GEMM,见 ROCm/rocm-libraries#9385
- 类似 llama.cpp 的 MMQ 和分组 MMQ,见 https://github.com/woct0rdho/torch-ggml-ops
- 类似 Unsloth 的快速 LoRA 反向公式,用于线性层和 MoE 层
- 带调优配置的 AITER gmm/ptgmm Triton kernel,用于非量化 MoE LoRA
- 类似 OpenAI triton-kernels 的 MoE 路由
- 来自 Liger Kernel 的 RMSNorm
- 类似 Liger Kernel 的分块交叉熵损失,可与 MMQ 配合使用
- 禁用自回归解码缓存和负载均衡损失以节省显存
- 非重入式梯度检查点
- bitsandbytes AdamW 8-bit 优化器
Qwen3.5 专属:
- 仅占用 13.3 GiB 的 APEX-I-Mini 量化,见 https://huggingface.co/mudler/Qwen3.6-35B-A3B-APEX-GGUF/blob/main/Qwen3.6-35B-A3B-APEX-I-Mini.gguf
- 带调优配置和 bugfix ROCm/aiter#3551 的 AITER FlashAttention Triton kernel
- 带 MMQ、FLA、causal-conv1d 和自定义 Triton kernel(包括反向)的 GatedDeltaNet
DeepSeek 专属:
- 仅占用 81 GiB 的 IQ2_XXS 量化,见 https://huggingface.co/antirez/deepseek-v4-gguf/blob/main/DeepSeek-V4-Flash-IQ2XXS-w2Q2K-AProjQ8-SExpQ8-OutQ8-chat-v2-imatrix.gguf
- 带 Triton kernel(包括反向)的滑动注意力、CSA、HCA、mHC
Qwen4-Exp 专属:
- 仅占用 35 GiB 显存 + 27 GiB engram 的 GSQ-RCO Q2_0 量化,见 https://huggingface.co/ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF/tree/main/Q2_0
- 带 Triton kernel(包括反向)的 QSA
- 带预取的磁盘 PLE
其他说明:
- Unsloth 梯度检查点提供快速的异步 CPU-GPU 拷贝。如果你真的做 CPU offload,就需要它。但在具有统一内存的 Strix Halo 上,你应该只使用常规的梯度检查点
- 在 Strix Halo 上加载大模型时,你需要 pread,见 safetensors/safetensors#728
- 在 transformers 中使用 GGUF 量化器时,你需要对 GGUF 反量化函数使用 torch.compile 以节省显存
- 在 llama.cpp 中用 LoRA 推理模型时,目前 llama.cpp 没有快速的 LoRA kernel。我做了一个,见 https://github.com/woct0rdho/llama.cpp/commit/36e9f19a3058cbdc86e824293c0c69ca02ad03ea
来源:Hacker News · github.com