当前位置: 首页 > news >正文

gpt-oss 全量技术解读

一、概述

gpt-oss 是 OpenAI 发布的开放权重(open-weight)模型系列,面向强推理、Agent 能力与多样化应用场景

提供两种规格:

  • gpt-oss-120b:面向生产与高推理需求,单卡 80GB GPU(如 NVIDIA H100 或 AMD MI300X)可运行(117B 参数,活跃参数 5.1B)。
  • gpt-oss-20b:面向低时延、本地化或专项场景(21B 参数,活跃参数 3.6B)。

两款模型均基于 harmony 对话格式训练,必须使用该格式,否则行为不稳定。

二、亮点(Highlights)

  • Apache 2.0 许可:无传染条款与专利风险,便于实验、定制与商业化。
  • 推理成本可调:按需在低/中/高之间折中推理强度与时延。
  • 可访问的推理过程(CoT):便于调试与可解释性(不建议直接展示给终端用户)。
  • 可微调:支持参数级微调,适配垂直场景。
  • 原生 Agent 能力:函数调用、网页浏览、Python 代码执行与结构化输出。
  • 原生 MXFP4 量化:MoE 层使用 MXFP4;120b 可单卡 80GB 运行,20b 可在 16GB 级内存环境运行。

三、推理示例(Inference examples)

Transformers

可直接在 Transformers 中使用 gpt-oss-120b / gpt-oss-20b。使用 chat 模板会自动套用 harmony;如果手动 model.generate,需要显式应用(或使用 openai-harmony)。

from transformers import pipeline
import torchmodel_id = "openai/gpt-oss-120b"pipe = pipeline("text-generation",model=model_id,torch_dtype="auto",device_map="auto",
)messages = [{"role": "user", "content": "Explain quantum mechanics clearly and concisely."},
]outputs = pipe(messages,max_new_tokens=256,
)
print(outputs[0]["generated_text"][-1])

了解如何在 Transformers 中使用 gpt-oss。

vLLM

建议用 uv 管理依赖。vLLM 可启动 OpenAI 兼容服务,命令如下:

uv pip install --pre vllm==0.10.1+gptoss \--extra-index-url https://wheels.vllm.ai/gpt-oss/ \--extra-index-url https://download.pytorch.org/whl/nightly/cu128 \--index-strategy unsafe-best-matchvllm serve openai/gpt-oss-20b

了解如何在 vLLM 中使用 gpt-oss。

PyTorch / Triton / Metal

主要作为参考实现与教学用途,不建议直接用于生产(详见下文“参考实现”)。

Ollama

在消费级设备上可使用 Ollama 本地运行:

## gpt-oss-20b
ollama pull gpt-oss:20b
ollama run gpt-oss:20b## gpt-oss-120b
ollama pull gpt-oss:120b
ollama run gpt-oss:120b

在 Ollama 上本地运行 gpt-oss 的详情。

LM Studio

在 LM Studio 中下载:

## gpt-oss-20b
lms get openai/gpt-oss-20b
## gpt-oss-120b
lms get openai/gpt-oss-120b

更多生态与推理伙伴见仓库中的 awesome-gpt-oss.md

四、环境准备(Setup)

先决条件(Requirements)

  • Python 3.12
  • macOS:安装 Xcode CLI → xcode-select --install
  • Linux:参考实现依赖 CUDA
  • Windows:未测试;本地运行建议用 Ollama 等方案

安装(Installation)

快速试用可从 PyPI 安装:

## 仅使用工具
pip install gpt-oss
## 试用 torch 参考实现
pip install gpt-oss[torch]
## 试用 triton 参考实现
pip install gpt-oss[triton]

需要修改源码或使用 metal 实现,可本地搭建:

git clone https://github.com/openai/gpt-oss.git
GPTOSS_BUILD_METAL=1 pip install -e ".[metal]"

五、下载模型(Download the model)

通过 Hugging Face CLI 拉取权重:

## gpt-oss-120b
huggingface-cli download openai/gpt-oss-120b --include "original/*" --local-dir gpt-oss-120b/## gpt-oss-20b
huggingface-cli download openai/gpt-oss-20b --include "original/*" --local-dir gpt-oss-20b/

六、参考 PyTorch 实现(Reference PyTorch implementation)

gpt_oss/torch/model.py 提供结构真实但效率较低的 PyTorch 参考实现,用基础算子还原模型。MoE 支持张量并行(如 4×H100 或 2×H200),权重与激活以 BF16 运行。

安装依赖:

pip install -e .[torch]

运行:

## 在 4×H100 上:
torchrun --nproc-per-node=4 -m gpt_oss.generate gpt-oss-120b/original/

七、参考 Triton 实现(单卡)(Reference Triton implementation, single GPU)

基于 Triton MoE 内核 的优化实现,支持 MXFP4,并对注意力做了内存优化。使用 nightly 版 triton/torch,可在单张 80GB H100上运行 gpt-oss-120b

安装:

## 构建 triton
git clone https://github.com/triton-lang/triton
cd triton/
pip install -r python/requirements.txt
pip install -e . --verbose --no-build-isolation## 安装 gpt-oss 的 triton 后端
pip install -e .[triton]

运行:

## 在 1×H100 上
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python -m gpt_oss.generate --backend triton gpt-oss-120b/original/

遇到 torch.OutOfMemoryError 时,启用可扩展分配器,避免加载 checkpoint 时崩溃。

八、参考 Metal 实现(Reference Metal implementation)

提供 Apple Silicon 的 Metal 实现,数值与 PyTorch 一致(不适合生产)。在 Apple Silicon 上安装 .[metal] 会自动编译:

pip install -e .[metal]

推理前需将 SafeTensors 转为本地格式:

python gpt_oss/metal/scripts/create-local-model.py -s <model_dir> -d <output_file>

或直接下载 metal/* 权重:

huggingface-cli download openai/gpt-oss-120b --include "metal/*" --local-dir gpt-oss-120b/metal/
huggingface-cli download openai/gpt-oss-20b --include "metal/*" --local-dir gpt-oss-20b/metal/

快速测试:

python gpt_oss/metal/examples/generate.py gpt-oss-20b/metal/model.bin -p "why did the chicken cross the road?"

九、Harmony 格式与工具(Harmony format & tools)

提供 harmony 对话格式库,用于与模型交互(见官方指南)。同时包含两类系统工具:浏览器Python 容器(实现见 gpt_oss/tools)。

十、客户端(Clients)

终端聊天(Terminal Chat)

终端应用演示如何在 PyTorch、Triton、vLLM 中使用 harmony,并可选择启用 Python/浏览器工具:

usage: python -m gpt_oss.chat [-h] [-r REASONING_EFFORT] [-a] [-b] [--show-browser-results] [-p] [--developer-message DEVELOPER_MESSAGE] [-c CONTEXT] [--raw] [--backend {triton,torch,vllm}] FILEChat examplepositional arguments:FILE                  Path to the SafeTensors checkpointoptions:-h, --help            show this help message and exit-r REASONING_EFFORT, --reasoning-effort REASONING_EFFORTReasoning effort (default: low)-a, --apply-patch     Make apply_patch tool available to the model (default: False)-b, --browser         Use browser tool (default: False)--show-browser-resultsShow browser results (default: False)-p, --python          Use python tool (default: False)--developer-message DEVELOPER_MESSAGEDeveloper message (default: )-c CONTEXT, --context CONTEXTMax context length (default: 8192)--raw                 Raw mode (does not render Harmony encoding) (default: False)--backend {triton,torch,vllm}Inference backend (default: triton)

注:PyTorch/Triton 需要 gpt-oss-120b/original/gpt-oss-20b/original/ 下的原始 checkpoint;vLLM 使用 gpt-oss-120b/gpt-oss-20b/ 根目录下的 Hugging Face 转换版 checkpoint。

Responses API

提供简化的 Responses API 服务器示例(不覆盖全部事件,但可满足大多数基础用例),并可作为自建服务思路。可选择以下后端:

  • triton:使用 triton 实现
  • metal:Apple Silicon
  • ollama:调用 Ollama /api/generate
  • vllm:本地 vLLM
  • transformers:本地 Transformers 推理
usage: python -m gpt_oss.responses_api.serve [-h] [--checkpoint FILE] [--port PORT] [--inference-backend BACKEND]Responses API serveroptions:-h, --help                    show this help message and exit--checkpoint FILE             Path to the SafeTensors checkpoint--port PORT                   Port to run the server on--inference-backend BACKEND   Inference backend to use

Codex

可将 codex 作为 gpt-oss 客户端。以 20b 为例,在 ~/.codex/config.toml 中配置:

disable_response_storage = true
show_reasoning_content = true[model_providers.local]
name = "local"
base_url = "http://localhost:11434/v1"[profiles.oss]
model = "gpt-oss:20b"
model_provider = "local"

可与任何监听 11434 端口、兼容 Chat Completions API 的服务配合(如 Ollama):

ollama run gpt-oss:20b
codex -p oss

十一、工具(Tools)

Browser

警告:示例仅用于学习,不要直接用于生产。生产环境需替换为等价的自研浏览后端(如与 ExaBackend 同等能力)。

两种 gpt-oss 模型均受训支持 browser 工具,提供:

  • search:关键词检索
  • open:打开页面
  • find:页内查找

用法(在 harmony 的 system 消息里声明工具定义;完整接口可用 with_browser(),否则用 with_tools() 自定义):

import datetime
from gpt_oss.tools.simple_browser import SimpleBrowserTool
from gpt_oss.tools.simple_browser.backend import ExaBackend
from openai_harmony import SystemContent, Message, Conversation, Role, load_harmony_encoding, HarmonyEncodingNameencoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS)## Exa backend 需要你设置 EXA_API_KEY 环境变量
backend = ExaBackend(source="web",
)
browser_tool = SimpleBrowserTool(backend=backend)## 基本 system 提示词
system_message_content = SystemContent.new().with_conversation_start_date(datetime.datetime.now().strftime("%Y-%m-%d")
)## 若需要使用浏览器工具
if use_browser_tool:# 启用工具system_message_content = system_message_content.with_tools(browser_tool.tool_config)# 如果你的工具不是无状态的,也可以:system_message_content = system_message_content.with_browser()## 构造 system 消息
system_message = Message.from_role_and_content(Role.SYSTEM, system_message_content)## 构造整体对话
messages = [system_message, Message.from_role_and_content(Role.USER, "What's the weather in SF?")]
conversation = Conversation.from_messages(messages)## 渲染为补全所需 token
token_ids = encoding.render_conversation_for_completion(conversation, Role.ASSISTANT)## ……执行推理……## 解析输出
messages = encoding.parse_messages_from_completion_tokens(output_tokens, Role.ASSISTANT)
last_message = messages[-1]
if last_message.recipient.startswith("browser"):# 执行浏览器调用response_messages = await browser_tool.process(last_message)# 追加到对话后再次推理messages.extend(response_messages)

实现细节:采用“窗口式滚动文本”控制上下文(先取前 50 行,再滚动 20 行等);模型被训练为在回答中引用工具返回的片段。内置请求缓存,避免重复抓取;建议每次请求新建浏览器实例

Python

模型受训支持在推理过程中使用 Python 工具。训练时为有状态,参考实现改为无状态(会在 system 中覆盖 openai-harmony 默认定义)。

警告:参考实现运行在权限较宽的容器中,存在提示注入等风险;生产需加强隔离与最小权限。

用法(完整接口可用 with_python(),否则 with_tools() 自定义):

import datetime
from gpt_oss.tools.python_docker.docker_tool import PythonTool
from openai_harmony import SystemContent, Message, Conversation, Role, load_harmony_encoding, HarmonyEncodingNameencoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS)python_tool = PythonTool()## 基本 system 提示词
system_message_content = SystemContent.new().with_conversation_start_date(datetime.datetime.now().strftime("%Y-%m-%d")
)## 若启用 Python 工具
if use_python_tool:# 以无状态定义启用工具system_message_content = system_message_content.with_tools(python_tool.tool_config)# 若你的工具不是无状态,也可以:system_message_content = system_message_content.with_python()## 构造 system 消息
system_message = Message.from_role_and_content(Role.SYSTEM, system_message_content)## 构造整体对话
messages = [system_message, Message.from_role_and_content(Role.USER, "What's the square root of 9001?")]
conversation = Conversation.from_messages(messages)## 渲染为补全所需 token
token_ids = encoding.render_conversation_for_completion(conversation, Role.ASSISTANT)## ……执行推理……## 解析输出
messages = encoding.parse_messages_from_completion_tokens(output_tokens, Role.ASSISTANT)
last_message = messages[-1]
if last_message.recipient == "python":# 执行 Python 调用response_messages = await python_tool.process(last_message)# 追加到对话后再次推理messages.extend(response_messages)

Apply Patch

apply_patch 用于在本地创建、更新或删除文件

十二、其他细节(Other details)

精度格式(Precision format)

模型以原生量化形式发布:MoE 线性投影权重使用 MXFP4。MoE 张量拆分为两部分:

  • tensor.blocks:FP4 数值(每两个值打包为一个 uint8
  • tensor.scales:分块尺度(沿最后一维分块缩放)

其余张量采用 BF16,建议激活也使用 BF16。

采样参数建议(Recommended Sampling Parameters)

推荐基线:temperature=1.0top_p=1.0

http://www.lryc.cn/news/615347.html

相关文章:

  • AI鉴伪技术:守护数字时代的真实性防线
  • 数学学习 | 高数、线代、概率论及数理统计荐书
  • 【C++】set
  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 第二十八天(cookiesessiontokeny验证)
  • 李宏毅深度学习教程 第16-18章 终身学习+网络压缩+可解释性人工智能
  • STM32学习笔记6-TIM-2输出比较功能
  • 《汇编语言:基于X86处理器》第12章 复习题和练习
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • 元宇宙技术如何改变社交方式?
  • (第三篇)spring cloud之Zookeeper注册中心
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • 图片拆分工具,自定义宫格切割
  • 在Spring Boot项目中如何动态切换数据源、数据库?
  • java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
  • 【Git】Visual Studio 实现合并分支
  • Alibaba Cloud Linux 3 安装 git
  • DigitalProductId解密算法php调试版piddebug.php
  • n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node
  • AG32cpld实现一个UartTx“外设”
  • Kafka服务端NIO操作原理解析(二)
  • Arm Development Studio 安全通告:CVE-2025-7427
  • 人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
  • 【面试题】cookie和session 的区别
  • 【26】C#实战篇—— 多个线程函数对同一个 Excel 文件进行写操作引起的文件冲突问题,解决方法
  • Playwright C# 自动登录并上传 Excel 文件 的可运行示例
  • Irix HDR Pro:专业级 HDR 图像处理软件
  • Docker部署whisper转写模型
  • Java中Lambda表达式的常见用法和解析:从入门到实战
  • C/C++基础详解(二)