进阶 unsloth.ai 2026-10-07 22:27:00 · 6 阅读

第30章 使用 Unsloth 微调 Gemma 3:提升速度与显存效率

unsloth Download ☰ 下载 博客微调并运行 Gemma 32025年3月14日 • 作者:Daniel 与 Michael Gemma 3 是 Google 最新的 SOTA 多模态(文本 + 图像)模型,提供 1B、4B、12B 和 27B 四种规格,最近还新增了 270M 版本。Unsloth 现已支持 Gemma 3,它拥有 128K 上下文窗口,并支持多语言。

8月14日更新:Gemma 全新 270M 模型——快来运行和微调吧!
3月19日更新:点击这里阅读我们针对 Gemma 3 的训练修复 使用我们的 Colab notebook 免费微调 Gemma 3,也可以查看我们的 Gemma 3 (1B) GRPO notebook。 在 48GB GPU 上,相比使用 Flash Attention 2 的环境,Unsloth 能让 Gemma 3 的微调速度提升 1.6 倍、显存占用减少 60%、上下文长度延长 6 倍。 我们已将 Gemma 3 的所有版本上传到 Hugging Face,包括 2-8 bit GGUF、动态 4-bit 和 16-bit 版本。同时修复了之前 GGUF 不支持视觉功能的问题。 阅读我们的指南:如何正确运行 Gemma 3。 Unsloth 现在几乎支持一切*:全量微调、8-bit、预训练、所有 Transformer 架构的模型(Mixtral、MOE、Cohere 等),以及任意训练算法(比如配合 VLM 的 GRPO)。多 GPU 支持也将在几周内上线——订阅我们的 newsletter 即可第一时间获知发布消息!

非常感谢 Gemma 团队与我们合作,并在他们的 Gemma 3 官方博客中推荐了 Unsloth。

通过以下命令安装最新的稳定版 Unsloth:pip install --upgrade --force-reinstall --no-cache-dir unsloth unsloth_zoo✨Gemma 3 训练修复 在微调或运行 Gemma 3 之前,我们发现使用 float16 混合精度时,梯度和激活值会出现无穷大(infinity)。这个问题出现在只有 float16 tensor core 的 GPU 上,比如 T4、RTX 20 系列和 V100。

Unsloth 的解决方案分三步: 将所有中间激活值保持为 bfloat16 格式——也可以用 float32,但显存/内存占用会翻倍(通过 Unsloth 的异步梯度检查点实现)。 所有矩阵乘法都在 float16 下用 tensor core 完成,但手动进行上转型/下转型,而不依赖 PyTorch 的混合精度 autocast。 将其他不涉及矩阵乘法的操作(如 layernorm)上转型为 float32。 阅读我们的指南:如何正确运行 Gemma 3。 这意味着 Unsloth 是唯一能在 float16 机器上正常运行 Gemma 3 的框架!这也意味着配备免费 Tesla T4 GPU 的 Colab Notebook 同样可以正常使用!

Gemma 3 (27B) 的微调在 Unsloth 支持下仅需不到 22GB 显存!它的速度提升了 1.6 倍,且默认采用 Unsloth 动态 4 位量化,以确保更高的精度。你甚至可以直接使用 Gemma 3 配合 Unsloth 的 GRPO 来训练自己的推理模型。

想试试用 Unsloth 微调 Gemma 3 (4B) 吗?请在此处访问我们免费的 Google Colab Notebook。要查看我们所有的笔记本和模型上传,请访问我们的文档。

我们还与 Hugging Face 合作推出了一门 R1 推理课程!✨ Gemma 3 的特性 - 无限激活值 首先,在微调或运行 Gemma 3 之前,我们发现在使用 float16 混合精度时,梯度和激活值会不幸变成无穷大。这种情况发生在 T4 GPU、RTX 20x 系列以及 V100 GPU 上,因为它们只拥有 float16 张量核心。

下图展示:从 1B 到 27B 的 Gemma 3 均超过了 float16 的最大值 65504 对于较新的 GPU,如 RTX 30x 及以上、A100、H100 等,这些 GPU 配备了 bfloat16 张量核心,因此不会出现这个问题!那是为什么呢? Float16 只能表示最大为 65504 的数字,而 bfloat16 可以表示高达 $10^{38}$ 的巨大数字!请注意,这两种数字格式都仅使用 16 位!这是因为 float16 分配了更多的位来更好地表示小数,而 bfloat16 则不擅长表示分数。

那为什么不用 float32 而要用 float16 呢?让我们直接用 float32 吧!但不幸的是,GPU 中的 float32 矩阵乘法速度非常慢——有时慢 4 到 10 倍!所以行不通。 性能基准测试 模型 VRAM 🦥Unsloth 速度 🦥 VRAM 减少 🦥 更长上下文 🤗Hugging Face+FA2 Gemma-3-12B 24GB 1.7x >60% 6x 更长 1x 我们在 Alpaca 数据集上进行了测试,批次大小为 2,梯度累积步数为 4,秩为 32,并对所有线性层(q, k, v, o, gate, up, down)应用了 QLoRA。 🦥 全面支持 + 更新 已初步支持全量微调和 8 位微调——分别设置 full_finetuning = True 和 load_in_8bit = True。未来这两项将进一步优化!提醒一下,这将需要更强大的 GPU!

全新的 Unsloth Auto Model 支持——现在几乎所有模型都受支持!Unsloth 现在开箱即用,无需自定义实现即可支持视觉和文本模型(且均经过优化)。这使得微调体验更快、更少出错,并更加稳定/流畅。

我们也支持:Qwen 的 QwQ-32B、Mistral 的 Mixtral、IBM 的 3.2 Granite、Microsoft 的 Phi-4-mini、Cohere 的 c4ai-command-a、AllenAI 的 OLMo-2,以及市面上其他所有 Transformer 架构的模型!我们已为这些模型上传了动态 4-bit 和 GGUF 版本。

Unsloth 中的多项优化进一步降低了 10% 的 VRAM 使用量,并为 4-bit 量化提供了超过 10% 的加速(叠加在原本 2 倍速度和 70% 内存降低的基础上)。8-bit 和全参数微调也能从中受益。

通过 pip install unsloth 安装的 Windows 支持现在应该已经可用!它利用了 ‘pip install triton-windows’,为 Triton 提供了一条可通过 pip 安装的路径。

转换为 llama.cpp GGUF 格式的 16-bit 和 8-bit 模型现在不再需要编译!这解决了许多常见问题,意味着无需安装 GCC、Microsoft Visual Studio 等工具。

视觉微调:仅对受支持的视觉模型在补全/回复部分进行训练!Pixtral 和 Llava 的微调问题现已修复!实际上几乎所有视觉模型开箱即支持!视觉模型现在会自动调整图像大小,从而防止 OOM,并允许截断序列长度。

Unsloth 中的 GRPO 现在也允许非 Unsloth 上传的模型以 4-bit 格式运行——大幅降低 VRAM 使用量!(例如使用你自己微调的 Llama)

新的训练日志和信息——训练参数数量、总批次大小

已全面修复所有模型的梯度累积 Bug!🔮 Gemma 3 分析以下是我们对 Gemma 3 架构进行的深入分析:
1. 1B 纯文本模型,4、12、27B 为视觉+文本模型。训练数据为 14T tokens
2. 上下文长度从 32K 进一步扩展至 128K
3. 移除了 attention softcapping,替换为 QK norm
4. 5 个滑动窗口 + 1 个全局 attention
5. 滑动窗口 attention 大小为 1024
6. RL - BOND, WARM, WARP详细分析1. 与 Gemma 2 的架构差异:
增加了更多滑动窗口以降低 KV cache 负载!研究发现 5:1 的比例效果良好,消融实验显示 7:1 也可行!SWA 设为 1024 - 消融实验显示 1024 到 2048 均表现良好。

2. 训练与后训练
Gemma-3 使用 TPUs,并基于 JAX 采用类似 Zero-3 的算法。27B 模型在 14 万亿 tokens 上训练。12B = 12T,4B = 4T,1B = 2T tokens。所有模型在 RL / 后训练阶段均使用了蒸馏技术。从较大的指令模型中每个 token 采样 256 个 logits(不确定具体是哪一个——可能是闭源模型?)。使用了 BOND、WARM 和 WARP 等 RL 算法。

3. Chat 模板现在强制添加 BOS token!使用 user 和 model。词表大小 262K。SentencePiece tokenizer 支持数字拆分、保留空白和字节回退。

4. 长上下文与视觉编码器:
先以 32K 上下文训练,再扩展到 128K 上下文,使用了 8 倍 RoPE Scaling。视觉编码器采用 Pan & Scan 算法,固定分辨率为 896 * 896,推理时通过 windowing 支持其他尺寸。🦥 Dynamic BnB 4-bit 量化我们为 Gemma 3 发布了 Unsloth Dynamic 4-bit 量化版本,相比标准 4-bit 有显著的精度提升——尤其是视觉模型,差异最为明显。正如我们之前在 Qwen2-VL 实验中所展示的,dynamic 量化只增加约 10% 的显存占用,却能换来大幅的精度提升。

一个很好的基准例子是我们为 Phi-4 制作的 dynamic 4-bit 量化,提交到了 Hugging Face 的 OpenLLM Leaderboard。它的得分几乎和 16-bit 版本持平,甚至超过了标准 BnB 4-bit 和微软官方的 16-bit 模型,在 MMLU 上表现尤为突出。

另外,请看下文 Gemma 3 (27B) 与 Unsloth Dynamic 量化的激活值和权重的误差分析图:💕 感谢!特别感谢 Google 团队的支持,也感谢大家使用并分享 Unsloth,我们非常感激。🙏

一如既往,欢迎加入我们的 Reddit 页面和 Discord 服务器寻求帮助,或单纯来表达支持!也可以在 Twitter 上关注我们,并订阅我们的 newsletter。感谢阅读!Daniel & Michael Han 🦥
2025年3月14日立即免费微调 Gemma 3!免费开始使用

加入我们的 Discord

评论 (0)