For the complete documentation index, see llms.txt. This page is also available as Markdown.

gpt-oss:如何运行指南

运行并微调 OpenAI 的新开源模型!

OpenAI 发布“gpt-oss-120b' 和“gpt-oss-20b'”,这是两个采用 Apache 2.0 许可的 SOTA 开源语言模型。这两个 128k 上下文模型在推理、工具使用和智能体任务上都优于同等规模的开源模型。现在你可以使用 Unsloth 在本地运行并微调它们!

运行 gpt-oss-20b运行 gpt-oss-120b微调 gpt-oss

微调 使用我们的免费微调 gpt-oss-20b Colab 笔记本

采用 RL, gpt-oss-120b 可与 o4-mini 匹敌,并且 gpt-oss-20b 可与 o3-mini 匹敌。两者在函数调用和 CoT 推理方面都表现出色,超过了 o1 和 GPT-4o。

为了获得最佳性能,请确保你的可用总内存(统一内存 + VRAM + 系统内存)超过你正在下载的量化模型文件的大小。否则,llama.cpp 仍可通过 SSD/HDD 卸载运行,但推理速度会更慢。

gpt-oss - Unsloth GGUF:

📜gpt-oss 的 Unsloth 修复

我们的一些修复已上游到 OpenAI 在 Hugging Face 上的官方模型中。 查看

OpenAI 发布了一个独立的解析和分词库,名为 Harmony 它允许将对话标记化为 OpenAI 为 gpt-oss 偏好的格式。

推理引擎通常使用 jinja 聊天模板而不是 Harmony 包,我们在直接与 Harmony 比较后发现了一些问题。如果你看下面,顶部的是来自 Harmony 的正确渲染形式。下面的是当前 jinja 聊天模板渲染出的形式。它们之间有相当多的差异!

如果你愿意,我们还提供了一些函数,可让你无需 jinja 聊天模板也能直接使用 OpenAI 的 Harmony 库——你只需像下面这样解析普通对话:

然后使用 encode_conversations_with_harmony 来自 Unsloth 的

Harmony 格式包含多个有趣的内容:

  1. reasoning_effort = "medium" 你可以选择 low、medium 或 high,这会改变 gpt-oss 的推理预算——通常越高,模型的准确性越好。

  2. developer_instructions 类似于你可以添加的系统提示。

  3. model_identity 最好保持不变——你可以编辑它,但我们不确定自定义内容是否会生效。

我们发现当前 jinja 聊天模板存在多个问题(整个生态中有多个实现):

  1. 函数和工具调用会以 tojson渲染,这本身没问题,因为它是一个字典,但如果它是字符串,引号和其他 符号会被加反斜杠.

  2. 在 jinja 模板中的某些边界处有一些 额外的换行

  3. 模型在进行工具调用思考时应使用 analysis 标签,而不是 final 标签.

  4. 其他聊天模板似乎根本没有使用 <|channel|>final ——而这应该用于最终的助手消息。你不应该将其用于思考轨迹或工具调用。

我们的 GGUF、BnB 和 BF16 上传版本以及所有版本的聊天模板都已经修复!例如,在比较我们的格式和 Harmony 的格式时,我们不会得到任何不同的字符:

🔢 精度问题

我们在 Tesla T4 和 float16 机器上发现了多个精度问题,主要是因为模型是使用 BF16 训练的,因此存在离群值和溢出。MXFP4 实际上不受 Ampere 及更早 GPU 的支持,因此 Triton 提供 tl.dot_scaled 用于 MXFP4 矩阵乘法。它会在运行时内部将矩阵临时上转换为 BF16。

我们还制作了一个 MXFP4 推理笔记本 也可用于 Tesla T4 Colab!

软件仿真 使得可以针对不原生支持微缩放操作的硬件架构。目前在这种情况下,微缩放的 lhs/rhs 会预先上转换为 bf16 元素类型,以便进行点积计算,

我们发现,如果你将 float16 用作混合精度 autocast 数据类型,过一段时间后就会出现无穷大。为了解决这个问题,我们发现先将 MoE 以 bfloat16 运行,然后将其保留为 bfloat16 或 float32 精度。如果较旧的 GPU 甚至不支持 bfloat16(比如 T4),则使用 float32。

我们还会将所有操作的精度(例如路由器)在 float16 机器上改为 float32。

🖥️ 运行 gpt-oss

以下是针对该模型 20B120B 模型变体。

任何小于 F16 的量化,包括 2-bit,精度损失都很小,因为只有一部分(例如注意力层)是低位宽,而大多数仍保持全精度。这就是为什么尺寸接近 F16 模型;例如,2-bit(11.5 GB)版本的表现几乎与完整 16-bit(14 GB)版本相同。一旦 llama.cpp 支持这些模型更好的量化,我们会尽快上传。

gpt-oss OpenAI 的模型包含一个功能,允许用户调整模型的“推理努力”程度。这让你能够控制模型性能与响应速度(延迟)之间的权衡,其依据是模型用于思考的 token 数量。

gpt-oss 模型提供三个不同的推理努力级别供你选择:

  • :针对需要非常快响应且不需要复杂多步推理的任务进行优化。

  • :在性能和速度之间取得平衡。

  • :为需要它的任务提供最强的推理性能,但这会带来更高的延迟。

⚙️ 推荐设置

OpenAI 为两个模型推荐以下推理设置:

temperature=1.0, top_p=1.0, top_k=0

  • Temperature 为 1.0

  • Top_K = 0(或者尝试 100,可能会有更好的结果)

  • Top_P = 1.0

  • 建议最小上下文:16,384

  • 最大上下文长度窗口:131,072

聊天模板:

句末/生成结束 token:EOS 是 <|return|>

运行 gpt-oss-20B

为了让我们的动态 4-bit 量化达到每秒 6+ 个 token 的推理速度,至少需要 14GB 的统一内存 (VRAM 与 RAM 合计)或 14GB 的系统内存 即可。一般来说,可用内存应当与所使用模型的大小相当或更大。GGUF 链接: unsloth/gpt-oss-20b-GGUF

注意: 模型可以在低于其总大小的内存上运行,但这会减慢推理速度。只有在需要最快速度时才需要最大内存。

遵循 上面的最佳实践。它们与 120B 模型相同。

你现在可以在 Google Colab、Docker、LM Studio 或 llama.cpp 上运行该模型。见下文:

你可以使用我们的免费方式运行 gpt-oss-20b Google Colab 笔记本

🦥 Unsloth Studio 指南

在本教程中,我们将使用 Unsloth Studio,这是我们用于运行和训练 LLM 的新网页界面。使用 Unsloth Studio,你可以在以下平台本地运行模型: Mac、Windows和 Linux,并且:

1

安装 Unsloth

在你的终端中运行:

MacOS、Linux、WSL:

Windows PowerShell:

2

启动 Unsloth

MacOS、Linux、WSL、Windows:

然后在浏览器中打开 http://localhost:8888

3

搜索并下载 gpt-oss-20b

首次启动时,你需要创建密码以保护你的账户,并可在稍后重新登录。随后你会看到一个简短的引导向导,用于选择模型、数据集和基本设置。你可以随时跳过。

然后前往 Studio Chat 标签页,在搜索栏中搜索 gpt-oss,然后下载你想要的模型和量化版本。

4

运行 gpt-oss-20b

在使用 Unsloth Studio 时,推理参数应会自动设置,不过你仍然可以手动更改。你也可以编辑上下文长度、聊天模板和其他设置。

如需更多信息,你可以查看我们的 Unsloth Studio 推理指南.

🐋 Docker:运行 gpt-oss-20b 教程

如果你已经安装了 Docker desktop,你只需要运行下面的命令,就完成了:

Llama.cpp:运行 gpt-oss-20b 教程

  1. 获取最新的 llama.cppGitHub 这里。你也可以按照下面的构建说明操作。将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 如果你没有 GPU,或者只想进行 CPU 推理。 对于 Apple Mac / Metal 设备,设置 -DGGML_CUDA=OFF 然后照常继续——Metal 支持默认开启。

  1. 你可以通过以下方式直接从 Hugging Face 拉取:

  2. 通过以下方式下载模型(在安装 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

注意: 模型可以在低于其总大小的内存上运行,但这会减慢推理速度。只有在需要最快速度时才需要最大内存。

遵循 上面的最佳实践。它们与 20B 模型相同。

🦥 Unsloth Studio 指南

在本教程中,我们将使用 Unsloth Studio,这是我们用于运行和训练 LLM 的新网页界面。使用 Unsloth Studio,你可以在以下平台本地运行模型: Mac、Windows和 Linux,并且:

1

安装 Unsloth

MacOS、Linux、WSL:

Windows PowerShell:

2

设置 Unsloth Studio(仅需一次)

设置过程会自动安装 Node.js(通过 nvm)、构建前端、安装所有 Python 依赖,并构建带 CUDA 支持的 llama.cpp。

WSL 用户: 系统会提示你输入 sudo 密码以安装构建依赖(cmake, git, libcurl4-openssl-dev).

3

启动 Unsloth

MacOS、Linux、WSL:

Windows PowerShell:

然后在浏览器中打开 http://localhost:8888

4

搜索并下载 gpt-oss-120b

首次启动时,你需要创建密码以保护你的账户,并可在稍后重新登录。随后你会看到一个简短的引导向导,用于选择模型、数据集和基本设置。你可以随时跳过。

然后前往 Studio Chat 标签页,在搜索栏中搜索 gpt-oss,然后下载你想要的模型和量化版本。

5

运行 gpt-oss-120b

在使用 Unsloth Studio 时,推理参数应会自动设置,不过你仍然可以手动更改。你也可以编辑上下文长度、聊天模板和其他设置。

如需更多信息,你可以查看我们的 Unsloth Studio 推理指南.

📖 Llama.cpp:运行 gpt-oss-120b 教程

对于 gpt-oss-120b,我们将专门使用 Llama.cpp 进行优化推理。

  1. 获取最新的 llama.cppGitHub 这里。你也可以按照下面的构建说明操作。将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 如果你没有 GPU,或者只想进行 CPU 推理。

  2. 你可以直接使用 llama.cpp 下载模型,但我通常建议使用 huggingface_hub 要直接使用 llama.cpp,请执行:

  3. 或者,在安装后通过(以下方式)下载模型 pip install huggingface_hub hf_transfer )。你可以选择 UD-Q2_K_XL,或其他量化版本。

  4. 在对话模式下运行模型并尝试任何提示词。

  5. 编辑 --threads -1 来设置 CPU 线程数, --ctx-size 用于上下文长度的 262114, --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 缓存量化为 4bits ,例如减少 VRAM / RAM 传输,这也可以加快生成过程。

🦥 使用 Unsloth 微调 gpt-oss

Unsloth 的 gpt-oss 微调速度快 1.5 倍,显存占用减少 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 笔记本:

强化学习(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 基础模型(如 gpt-oss)在 LoRA 合并过程中。这使得可以 将你微调后的模型导出为 bf16 格式.

在微调完你的 gpt-oss 模型后,你现在可以将其合并为 16 位格式,并使用一个 单个命令:

如果你更愿意直接合并模型并推送到 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 数据集。使用该数据集的目的是让模型在这四种不同语言中学习并发展推理能力。

最后更新于

这有帮助吗?