gpt-oss:运行指南
运行并微调 OpenAI 新的开源模型!
OpenAI 发布了 'gpt-oss-120b' 以及 'gpt-oss-20b',这是两个采用 Apache 2.0 许可的 SOTA 开放语言模型。这两个 128k 上下文模型在推理、工具使用和 agentic 任务上都优于同规模的开源模型。现在你可以使用 Unsloth 在本地运行并微调它们!
使用……训练 RL, gpt-oss-120b 可与 o4-mini 和 gpt-oss-20b 可与 o3-mini 竞争。两者在函数调用和 CoT 推理方面都很出色,超越了 o1 和 GPT-4o。
为了获得最佳性能,请确保你的可用总内存(统一内存 + VRAM + 系统内存)大于你正在下载的量化模型文件大小。如果不大于,llama.cpp 仍然可以通过 SSD/HDD 卸载运行,但推理速度会更慢。
gpt-oss - Unsloth GGUF:
20B: gpt-oss-20B
120B: gpt-oss-120B
📜gpt-oss 的 Unsloth 修复
OpenAI 发布了一个独立的解析和分词库,名为 Harmony 它允许将对话分词为 OpenAI 为 gpt-oss 偏好的格式。
推理引擎通常使用 jinja 聊天模板,而不是 Harmony 包。我们在与 Harmony 直接比较后发现了它们的一些问题。如果你看下面,顶部是来自 Harmony 的正确渲染形式。下面则是当前 jinja 聊天模板渲染出来的形式。差异相当多!

我们还做了一些函数,如果你愿意,可以直接使用 OpenAI 的 Harmony 库,而无需 jinja 聊天模板——你可以像下面这样直接解析普通对话:
然后使用 encode_conversations_with_harmony 来自 Unsloth 的函数:
Harmony 格式包含多个有趣的内容:
reasoning_effort = "medium"你可以选择 low、medium 或 high,这会改变 gpt-oss 的推理预算——通常越高,模型准确率越好。developer_instructions就像你可以添加的系统提示。model_identity最好保持不变——你可以编辑它,但我们不确定自定义内容是否会生效。
我们发现当前的 jinja 聊天模板存在多个问题(生态中有多个实现):
函数和工具调用会使用
tojson进行渲染,这对于字典来说没问题,但如果它是字符串,引号和其他 符号会被转义成反斜杠.有一些 额外的换行 出现在 jinja 模板的某些边界处。
模型进行工具调用时的思考应带有
analysis标签,而不是final标签.其他聊天模板似乎根本没有使用
<|channel|>final。应该将其用于最终的助手消息。你不应将其用于思考过程或工具调用。
我们用于 GGUF、BnB 和 BF16 上传内容以及所有版本的聊天模板都已修复!例如,当比较我们的格式和 Harmony 的格式时,我们得到的字符没有任何不同:

🔢 精度问题
我们在 Tesla T4 和 float16 机器上发现了多个精度问题,主要原因是模型使用 BF16 训练,因此存在离群值和溢出。MXFP4 实际上不受 Ampere 和更老 GPU 的支持,因此 Triton 提供了 tl.dot_scaled 用于 MXFP4 矩阵乘法。它会在运行时将矩阵内部上转换为 BF16。
我们还制作了一个 MXFP4 推理笔记本 也可用于 Tesla T4 Colab!
我们发现,如果你将 float16 用作混合精度 autocast 数据类型,过一段时间后你会得到无穷大。为了解决这个问题,我们发现先用 bfloat16 执行 MoE,然后让它保持 bfloat16 或 float32 精度。如果旧 GPU 甚至不支持 bfloat16(如 T4),则使用 float32。
我们还将所有操作(如路由器)的精度在 float16 机器上改为 float32。
🖥️ 运行 gpt-oss
“ gpt-oss OpenAI 的模型包含一个功能,允许用户调整模型的“reasoning effort(推理努力)”。这让你可以控制模型性能与响应速度(延迟)之间的权衡,而这种权衡取决于模型用于思考的 token 数量。
“ gpt-oss 模型提供三个不同的推理努力级别供你选择:
低:针对需要非常快响应且不需要复杂多步推理的任务进行了优化。
中:在性能和速度之间取得平衡。
高:为需要它的任务提供最强的推理性能,但这会带来更高的延迟。
⚙️ 推荐设置
OpenAI 建议两个模型都使用以下推理设置:
temperature=1.0, top_p=1.0, top_k=0
温度为 1.0
Top_K = 0(或尝试 100 以获得可能更好的结果)
Top_P = 1.0
推荐的最小上下文长度:16,384
最大上下文长度窗口:131,072
聊天模板:
句子/生成结束标记:EOS 是 <|return|>
运行 gpt-oss-20B
为了让我们的动态 4-bit 量化达到每秒 6+ token 的推理速度,至少需要 14GB 统一内存 (合并的 VRAM 和 RAM)或 14GB 系统内存 。经验法则是,你可用的内存应当与所用模型的大小相当或更大。GGUF 链接: unsloth/gpt-oss-20b-GGUF
注意: 模型可以在少于其总大小的内存上运行,但这会降低推理速度。只有为了获得最快速度才需要最大内存。
你目前可以在 Google Colab、Docker、LM Studio 或 llama.cpp 上运行该模型。如下所示:
你可以通过我们的免费 Google Colab 笔记本
🦥 Unsloth Studio 指南
在本教程中,我们将使用 Unsloth Studio,这是我们用于运行和训练 LLM 的新 Web UI。借助 Unsloth Studio,你可以在以下平台本地运行模型 Mac、Windows、Linux,以及:

搜索并下载 gpt-oss-20b
首次启动时,你需要创建一个密码来保护你的账户,并在之后重新登录。然后你会看到一个简短的引导向导,用于选择模型、数据集和基本设置。你可以随时跳过。
然后前往 Unsloth Chat 标签页,在搜索栏中搜索 gpt-oss,然后下载你想要的模型和量化版本。

运行 gpt-oss-20b
在使用 Unsloth Studio 时,推理参数应自动设置,不过你仍然可以手动更改。你也可以编辑上下文长度、聊天模板和其他设置。
更多信息请查看我们的 Unsloth Studio 推理指南.

🐋 Docker:运行 gpt-oss-20b 教程
如果你已经安装了 Docker Desktop,你只需要运行下面的命令,就完成了:
✨ Llama.cpp:运行 gpt-oss-20b 教程
获取最新的
llama.cpp在 GitHub 上获取。你也可以按照下面的构建说明进行操作。将-DGGML_CUDA=ON改为-DGGML_CUDA=OFF如果你没有 GPU,或者只想使用 CPU 推理。 对于 Apple Mac / Metal 设备,设置-DGGML_CUDA=OFF然后按常规继续——Metal 支持默认开启。
你可以直接通过以下方式从 Hugging Face 拉取:
通过以下方式下载模型(在安装
pip install huggingface_hub hf_transfer)。如果下载卡住,请查看 Hugging Face Hub、XET 调试
运行 gpt-oss-120b:
为了让我们的 1-bit 量化达到每秒 6+ token 的推理速度,我们建议至少使用 66GB 统一内存 (合并的 VRAM 和 RAM)或 66GB 系统内存 。经验法则是,你可用的内存应当与所用模型的大小相当或更大。GGUF 链接: unsloth/gpt-oss-120b-GGUF
注意: 模型可以在少于其总大小的内存上运行,但这会降低推理速度。只有为了获得最快速度才需要最大内存。
🦥 Unsloth Studio 指南
在本教程中,我们将使用 Unsloth Studio,这是我们用于运行和训练 LLM 的新 Web UI。借助 Unsloth Studio,你可以在以下平台本地运行模型 Mac、Windows、Linux,以及:

搜索并下载 gpt-oss-120b
首次启动时,你需要创建一个密码来保护你的账户,并在之后重新登录。然后你会看到一个简短的引导向导,用于选择模型、数据集和基本设置。你可以随时跳过。
然后前往 Unsloth Chat 标签页,在搜索栏中搜索 gpt-oss,然后下载你想要的模型和量化版本。

运行 gpt-oss-120b
在使用 Unsloth Studio 时,推理参数应自动设置,不过你仍然可以手动更改。你也可以编辑上下文长度、聊天模板和其他设置。
更多信息请查看我们的 Unsloth Studio 推理指南.

📖 Llama.cpp:运行 gpt-oss-120b 教程
对于 gpt-oss-120b,我们将专门使用 Llama.cpp 进行优化推理。
获取最新的
llama.cpp在 GitHub 上获取。你也可以按照下面的构建说明进行操作。将-DGGML_CUDA=ON改为-DGGML_CUDA=OFF如果你没有 GPU,或者只想使用 CPU 推理。你可以直接使用 llama.cpp 下载模型,但我通常建议使用
huggingface_hub要直接使用 llama.cpp,请执行:或者,在安装
pip install huggingface_hub hf_transfer)。你可以选择 UD-Q2_K_XL,或其他量化版本。。在对话模式下运行模型并尝试任何提示。
编辑
--threads -1CPU 线程数,--ctx-size262114 作为上下文长度,--n-gpu-layers 99用于 GPU 卸载的层数。如果你的 GPU 显存不足,请尝试调整它。如果你只使用 CPU 推理,也请将其移除。
🛠️ 提升生成速度
如果你有更多 VRAM,可以尝试卸载更多 MoE 层,或者直接卸载整个层。
通常, -ot ".ffn_.*_exps.=CPU" 会将所有 MoE 层卸载到 CPU!这实际上让你可以把所有非 MoE 层放到 1 张 GPU 上,从而提升生成速度。如果你有更多 GPU 容量,还可以自定义正则表达式以容纳更多层。
如果你有更多一点 GPU 内存,可以尝试 -ot ".ffn_(up|down)_exps.=CPU" 这会卸载上投影和下投影 MoE 层。
尝试 -ot ".ffn_(up)_exps.=CPU" 如果你有更多 GPU 内存。这只会卸载上投影 MoE 层。
你也可以自定义正则表达式,例如 -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" 表示从第 6 层开始,只卸载 gate、up 和 down MoE 层。
“ 最新的 llama.cpp 版本 还引入了高吞吐模式。使用 llama-parallel. 了解更多 这里. 你还可以 将 KV 缓存量化为 4 位 例如以减少 VRAM / RAM 数据传输,这也可以让生成过程更快。
🦥 使用 Unsloth 微调 gpt-oss
Unsloth 对 gpt-oss 的微调速度快 1.5 倍,使用的 VRAM 少 70%,并支持 10 倍更长的上下文长度。gpt-oss-20b 的 QLoRA 训练可在 14GB VRAM 上运行,而 gpt-oss-120b 可在 65GB VRAM 上运行。
QLoRA 要求: gpt-oss-20b = 14GB VRAM • gpt-oss-120b = 65GB VRAM。
BF16 LoRA 要求: gpt-oss-20b = 44GB VRAM • gpt-oss-120b = 210GB VRAM。
阅读我们关于 gpt-oss 微调的分步教程:
教程:如何微调 gpt-oss用于微调 gpt-oss 的免费 Unsloth 笔记本:
gpt-oss-20b 推理 + 对话笔记本
强化学习(GRPO)
Unsloth 现在支持 gpt-oss 的 RL!我们制作了两个笔记本;有关更多细节,请阅读我们专门针对 gpt-oss RL 的博客: gpt-oss RL
2048 笔记本 (OpenAI 官方示例)
💾新:在 gpt-oss 训练后保存到 GGUF、vLLM
你现在可以对 gpt-oss 进行 QLoRA 微调,并直接将模型保存、导出或合并到 llama.cpp, vLLM,或者 HF ——不仅仅是 Unsloth。我们希望很快能发布一个免费笔记本。
此前,任何经过 QLoRA 微调的 gpt-oss 模型都只能在 Unsloth 中运行。我们通过引入 MXFP4 的按需反量化 在 LoRA 合并过程中处理基础模型(如 gpt-oss)。这使得可以 以 bf16 格式导出你的微调模型.
在微调你的 gpt-oss 模型后,你现在可以使用一个 单个命令:
如果你更希望直接合并模型并推送到 hugging-face hub,则可以使用:
💡让高效的 gpt-oss 微调真正可用
我们发现,虽然 MXFP4 非常高效,但它原生不支持使用 gpt-oss 进行训练。为克服这一限制,我们通过模仿 Bitsandbytes NF4 量化,专门为 MXFP4 层实现了自定义训练函数。
我们直接利用 OpenAI 的 Triton Kernels 库来支持 MXFP4 推理。不过,对于微调/训练而言,MXFP4 内核尚不支持训练,因为反向传播尚未实现。我们正在 Triton 中积极实现它!有一个名为 W_TRANSPOSE 如上所述 这里的标志,应该加以实现。导数可以通过权重矩阵的转置来计算,因此我们必须实现转置操作。
如果你想用 Unsloth 之外的任何库来训练 gpt-oss,那么你需要在训练前将权重上转换为 bf16。不过,这种方法 会显著增加 VRAM 使用量和训练时间,最多可达 300% 更多内存使用! 所有其他训练方法训练 20b 模型都至少需要 65GB VRAM,而 Unsloth 只需要 14GB VRAM(-80%)。
由于两个模型都使用 MoE 架构,20B 模型每个 token 会从 32 个专家中选择 4 个,而 120B 模型每个 token 会从 128 个专家中选择 4 个。在训练和发布期间,权重以 MXFP4 格式存储为 nn.Parameter 对象,而不是 nn.Linear 层,这使量化变得复杂,尤其是因为 MoE/MLP 专家约占 20B 参数中的 19B。
为启用 BitsandBytes 量化和节省内存的微调,我们将这些参数转换为 nn.Linear 层。尽管这会稍微减慢操作,但它使得在内存有限的 GPU 上进行微调成为可能,这是一个值得的权衡。
数据集微调指南
虽然 gpt-oss 只支持推理,你仍然可以用非推理 dataset进行微调,但这可能会影响其推理能力。如果你想保持其推理能力(可选),可以使用直接答案和思维链示例的混合。至少使用 75% 推理 和 25% 非推理 的数据,以使模型保留其推理能力。
我们的 gpt-oss-20b 对话笔记本使用了 OpenAI 的示例,也就是 Hugging Face 的 Multilingual-Thinking 数据集。使用该数据集的目的是让模型在这四种不同语言中学习并发展推理能力。

最后更新于
这有帮助吗?


