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

第39章 使用 Unsloth 微调 gpt-oss

unsloth 下载 ☰ 下载 博客:使用 Unsloth 微调 gpt-oss 2025年8月8日 • 作者:Daniel 和 Michael 2025年8月8日•作者:Daniel 和 Michael OpenAI 发布的新开源模型 gpt-oss 在文本、推理、数学和代码方面均达到了 SOTA 性能。gpt-oss-120b 可与 o4-mini 媲美,gpt-oss-20b 则能与 o3-mini 相提并论,且两款模型的性能都超过了 o1 和 GPT-4o。

我们成功实现了 gpt-oss 在仅 14GB VRAM 下的训练,使其能在免费的 Colab 上运行。我们还对模型的 chat template 进行了一些修复,详情见下文。免费使用 Colab notebook 微调 gpt-oss-20bUnsloth 的 gpt-oss 微调速度提升 1.5 倍,VRAM 占用降低 70%,并支持长 10 倍的上下文。gpt-oss-20b 的 LoRA 训练只需 14GB VRAM,而 gpt-oss-120b 可在 65GB VRAM 上运行。我们已在 Hugging Face 上上传了 gpt-oss 的所有版本,包括动态 GGUF、4-bit 和 16-bit 版本,点击这里访问。前往我们的文档,阅读关于如何运行和微调 gpt-oss 的详细指南,点击这里。🦥 Unsloth 对 gpt-oss 的修复OpenAI 发布了一个名为 Harmony 的独立解析和分词库,可将对话分词为 OpenAI 推荐的格式。OpenAI 官方 cookbook 文章提供了更多关于如何使用 Harmony 库的详细信息。gpt-oss 模型卡片中的附录 1 也提供了一些见解。推理引擎通常使用 jinja chat template,但我们在直接使用 Harmony 后发现了一些问题。见下文,上方显示的是由 Harmony 正确渲染的格式,下方则是当前 jinja chat template 渲染的结果。

我们编写了一些函数,允许你无需 jinja chat template 即可直接使用 OpenAI 的 Harmony 库——你可以像下面那样使用普通对话:messages = [
{"role" : "user", "content" : "What is 1+1?"},
{"role" : "assistant", "content" : "2"},
{"role": "user", "content": "What's the temperature in San Francisco now? How about tomorrow? Today's date is 2024-09-30."},
{"role": "assistant", "content": "User asks: 'What is the weather in San Francisco?' We need to use get_current_temperature tool.", "thinking" : ""},
{"role": "assistant", "content": "", "tool_calls": [{"name": "get_current_temperature", "arguments": '{"location": "San Francisco, California, United States", "unit": "celsius"}'}]},
{"role": "tool", "name": "get_current_temperature", "content": '{"temperature": 19.9, "location": "San Francisco, California, United States", "unit": "celsius"}'},
]然后使用 Unsloth 提供的 encode_conversations_with_harmony 函数:from unsloth_zoo import encode_conversations_with_harmony
def encode_conversations_with_harmony(
messages,
reasoning_effort = "medium",
add_generation_prompt = True,
tool_calls = None,
developer_instructions = None,
model_identity = "You are ChatGPT, a large language model trained by OpenAI.",
)harmony 格式里有几个值得注意的参数:reasoning_effort = "medium":可以选 low、medium 或 high,用来控制 gpt-oss 的推理量。developer_instructions:类似于 system prompt,可以自行添加。model_identity:最好保持默认——虽然可以修改,但我们不确定自定义后的内容能否正常工作。我们发现当前的 jinja 聊天模板存在几个问题:函数和工具调用使用 tojson 渲染,如果是 dict 还没问题,但如果是字符串,引号等符号就会被加上反斜杠转义。jinja 模板在某些边界处有多余的换行。模型在调用工具时的思考内容应该用 analysis 标签,而不是 final 标签。我们的 GGUF 聊天模板、上传的所有版本都已修复!比如对比我们的格式和 Harmony 的格式,字符完全一致:✨ 用 Unsloth 微调 gpt-oss你可能已经注意到,我们在 7 月的最新更新中让所有模型的训练速度都更快,同时显存占用也更少。得益于最新的算法改进,所有模型(无论 mamba、TTS 还是其他类型)的显存消耗都降低了 10% 到 25%。此外,编译更快、报错更少,Unsloth 也因此更加稳定!💾 让 gpt-oss 高效微调成为可能:我们发现 gpt-oss 的 MXFP4 格式虽然高效,但并不支持训练。因此,我们为使用 MXFP4 的层实现了自定义训练函数,在保证不牺牲速度的前提下让它顺利运行。

我们直接采用 OpenAI 的 Triton Kernels 库来支持 MXFP4 推理。不过在微调或训练方面,当前的 MXFP4 kernel 尚不支持训练,因为反向传播尚未实现。我们正积极在 Triton 中开发此功能。前文提到的 W_TRANSPOSE 标志需要被实现,导数可以通过权重矩阵的转置来计算,因此我们必须实现转置操作。

因此,如果你想用 Unsloth 以外的其他库来训练 gpt-oss,需要在训练前将权重上转(upcast)到 bf16。但这会大幅增加 VRAM 占用和训练时间,显存消耗甚至高出 300%!除 Unsloth 外,训练 20B 模型至少需要 65GB VRAM,而 Unsloth 仅需 14GB(减少 80%)。

解释:这两款模型均为混合专家(Mixture of Experts, MoE)架构。较小的 20B 模型会从 32 个专家中选出 top 4,其“大哥”120B 模型则在 128 个专家中,每 token 激活 4 个。在训练及发布版本中,MoE 的权重采用 MXFP4 格式。此外,权重并非像常规那样存储为线性层(nn.Linear),而是作为参数(nn.Paramter)存储。这使得量化变得困难。尤其是对于 MoE 模型,MLP/Experts 部分占了 20B 总参数量的约 19B。因此,高效地量化这些权重并执行操作至关重要。

为了使用 BitsandBytes 进行量化,我们将上述的 Parameter 格式权重及架构转换为了 Linear 格式。

通过 Unsloth,gpt-oss-20b 的 fine-tune 仅占用不到 14GB VRAM! 性能基准测试
模型 VRAM 🦥 Unsloth 速度 🦥 VRAM 节省幅度 🦥 更长的上下文
gpt-oss-20b 14GB 1.5x >50% 5x 更长
gpt-oss-120b 65GB 1.5x >50% 5x 更长
Standard + FA2 OOM — — —
注:测试使用 Alpaca Dataset,batch size 为 2,梯度累积步数为 4,rank = 32,并对所有线性层(q, k, v, o, gate, up, down)应用了 QLoRA。 其他出色的模型支持 我们还与 Falcon(TII)和 LiquidAI 团队合作,支持了他们的最新模型,欢迎反馈使用体验!目前也已支持 GLM 4.5 模型。 * Falcon hybrid Mamba 架构:0.5B Conversational notebook * LiquidAI hybrid convolutional 架构:1.2B Alpaca notebook 更多 notebook 请查阅我们的文档页面。 感谢大家!💕 衷心感谢每一位使用和支持 Unsloth 的朋友,我们非常感激。🙏 *
* 一如既往地,欢迎加入我们的 Reddit 页面和 Discord 服务器,获取帮助或表达支持!你也可以在 Twitter 上关注我们,或订阅我们的 newsletter。 感谢阅读! Daniel & Michael Han 🦥
Aug 8, 2025 | [Fine-tune gpt-oss now!](#) | [Get started for free](#)
[Join Our Discord](#)

评论 (0)