歡迎 GPT OSS,OpenAI 的全新開源模型家族!
GPT OSS 是 OpenAI 備受期待的開源權重版本,旨在實現強大的推理、代理任務和多功能開發者用例。它包含兩個模型:一個引數量為 117B 的大模型 (gpt-oss-120b),和一個引數量為 21B 的小模型 (gpt-oss-20b)。兩者都是專家混合(MoEs)模型,並使用 4 位量化方案 (MXFP4),從而實現快速推理(得益於更少的活躍引數,詳見下文),同時保持資源使用率較低。大模型可以在單個 H100 GPU 上執行,而小模型在 16GB 記憶體內執行,非常適合消費級硬體和裝置端應用。
為了使其對社群更好、更有影響力,這些模型在 Apache 2.0 許可證下獲得許可,並附帶一項最低使用政策。
我們旨在讓我們的工具安全、負責任、民主地使用,同時最大限度地控制您如何使用它們。使用 gpt-oss,即表示您同意遵守所有適用法律。
根據 OpenAI 的說法,本次釋出是他們對開源生態系統承諾的重要一步,符合其使人工智慧惠及大眾的既定使命。許多用例依賴於私有和/或本地部署,我們 Hugging Face 非常高興能歡迎 OpenAI 加入社群。我們相信這些模型將是長期存在、富有啟發性和影響力的模型。
目錄
功能和架構概覽
- 總引數量分別為 21B 和 117B,活躍引數量分別為 3.6B 和 5.1B。
- 使用 mxfp4 格式的 4 位量化方案。僅應用於 MoE 權重。如前所述,120B 模型適用於單個 80 GB GPU,20B 模型適用於單個 16GB GPU。
- 推理、純文字模型;支援思維鏈和可調推理工作量級別。
- 指令遵循和工具使用支援。
- 使用 transformers、vLLM、llama.cpp 和 ollama 進行推理實現。
- Responses API 推薦用於推理。
- 許可證:Apache 2.0,附帶小型補充使用政策。
架構
- 帶有 SwiGLU 啟用的 Token-choice MoE。
- 計算 MoE 權重時,對選定的專家進行 softmax(softmax-after-topk)。
- 每個注意力層使用 128K 上下文的 RoPE。
- 交替注意力層:全上下文和滑動 128 令牌視窗。
- 注意力層對每個頭部使用一個學習型注意力匯聚,其中 softmax 的分母有一個額外的加性值。
- 它使用與 GPT-4o 和其他 OpenAI API 模型相同的分詞器。
- 已整合一些新令牌以實現與 Responses API 的相容性。
o3 和 o4-mini 相比(來源:OpenAI)。透過推理提供商進行 API 訪問
OpenAI GPT OSS 模型可透過 Hugging Face 的推理提供商服務訪問,允許您使用相同的 JavaScript 或 Python 程式碼向任何受支援的提供商傳送請求。這與支援 OpenAI 官方演示的 gpt-oss.com 所用的基礎設施相同,您可以在自己的專案中使用它。
以下是一個使用 Python 和超高速 Cerebras 提供商的示例。有關更多資訊和附加片段,請檢視模型卡中的推理提供商部分以及我們為這些模型製作的專用指南。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.environ["HF_TOKEN"],
)
completion = client.chat.completions.create(
model="openai/gpt-oss-120b:cerebras",
messages=[
{
"role": "user",
"content": "How many rs are in the word 'strawberry'?",
}
],
)
print(completion.choices[0].message)
推理提供商還實現了 OpenAI 相容的 Responses API,這是用於聊天模型最先進的 OpenAI 介面,旨在實現更靈活和直觀的互動。
以下是使用 Responses API 和 Fireworks AI 提供商的示例。有關更多詳細資訊,請檢視開源的 responses.js 專案。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.getenv("HF_TOKEN"),
)
response = client.responses.create(
model="openai/gpt-oss-20b:fireworks-ai",
input="How many rs are in the word 'strawberry'?",
)
print(response)
本地推理
使用 Transformers
您需要安裝最新版 transformers (v4.55 或更高版本),以及 accelerate 和 kernels。
pip install --upgrade accelerate transformers kernels
模型權重以 mxfp4 格式進行量化,該格式與 Hopper 或 Blackwell 系列 GPU 相容。這包括 H100、H200 或 GB200 等資料中心顯示卡,以及 50xx 系列中最新的消費級 GPU。如果您擁有其中一款顯示卡,mxfp4 將在速度和記憶體消耗方面提供最佳結果。要使用它,您需要 triton 3.4 和 triton_kernels。如果這些庫未安裝(或者您沒有相容的 GPU),模型載入將回退到從量化權重解包的 bfloat16。
在我們的測試中,Triton 3.4 與最新的 PyTorch 版本 (2.7.x) 執行良好。您也可以選擇安裝 PyTorch 2.8——在撰寫本文時,它是一個預釋出版本(儘管它應該很快釋出),但它是與 triton 3.4 一起準備的版本,因此它們可以穩定地協同工作。以下是如何安裝 PyTorch 2.8(附帶 triton 3.4)和 triton 核心:
# Optional step if you want PyTorch 2.8, otherwise just `pip install torch`
pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/test/cu128
# Install triton kernels for mxfp4 support
pip install git+https://github.com/triton-lang/triton.git@main#subdirectory=python/triton_kernels
以下程式碼片段展示了 20B 模型的簡單推理。在使用 mxfp4 時,它可在 16 GB GPU 上執行,或者在使用 bfloat16 時,大約需要 48 GB。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "openai/gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype="auto",
)
messages = [
{"role": "user", "content": "How many rs are in the word 'strawberry'?"},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
generated = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(generated[0][inputs["input_ids"].shape[-1]:]))
Flash Attention 3
這些模型使用了注意力匯聚(attention sinks),這是 vLLM 團隊使其與 Flash Attention 3 相容的技術。我們已將他們的最佳化核心打包並整合到 kernels-community/vllm-flash-attn3 中。在撰寫本文時,這個超高速核心已在 PyTorch 2.7 和 2.8 的 Hopper 卡上進行了測試。我們預計未來幾天將增加覆蓋範圍。如果您在 Hopper 卡(例如 H100 或 H200)上執行模型,您需要 pip install --upgrade kernels 並在您的程式碼片段中新增以下行:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "openai/gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype="auto",
+ # Flash Attention with Sinks
+ attn_implementation="kernels-community/vllm-flash-attn3",
)
messages = [
{"role": "user", "content": "How many rs are in the word 'strawberry'?"},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
generated = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(generated[0][inputs["input_ids"].shape[-1]:]))
如我們的上一篇部落格文章所述,此程式碼片段將從kernels-community下載經過最佳化的預編譯核心程式碼。transformers 團隊已構建、打包並測試了程式碼,因此您可以完全安全地使用它。
其他最佳化
如果您擁有 Hopper GPU 或更高級別的 GPU,我們建議您出於上述原因使用 mxfp4。如果您還可以使用 Flash Attention 3,那麼務必啟用它!
如果您的 GPU 與
mxfp4不相容,那麼我們建議您使用 MegaBlocks MoE 核心以獲得更好的速度提升。為此,您只需像這樣調整您的推理程式碼:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "openai/gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
torch_dtype="auto",
+ # Optimize MoE layers with downloadable` MegaBlocksMoeMLP
+ use_kernels=True,
)
messages = [
{"role": "user", "content": "How many rs are in the word 'strawberry'?"},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
generated = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(generated[0][inputs["input_ids"].shape[-1]:]))
MegaBlocks 最佳化的 MoE 核心要求模型在
bfloat16上執行,因此記憶體消耗將高於在mxfp4上執行。如果可能,我們建議您使用mxfp4,否則透過use_kernels=True選擇使用 MegaBlocks。
AMD ROCm 支援
OpenAI GPT OSS 已在 AMD Instinct 硬體上驗證,我們很高興地宣佈在我們的核心庫中初步支援 AMD 的 ROCm 平臺,為 Transformers 中即將推出的最佳化 ROCm 核心奠定基礎。MegaBlocks MoE 核心加速已可用於 AMD Instinct(例如 MI300 系列)上的 OpenAI GPT OSS,從而實現更好的訓練和推理效能。您可以使用上面所示的相同推理程式碼進行測試。
AMD 還為使用者準備了一個 Hugging Face Space,以便在 AMD 硬體上試用該模型。
可用最佳化總結
在撰寫本文時,下表總結了我們根據 GPU 相容性和測試提出的建議。我們預計 Flash Attention 3(帶匯聚注意力)將相容更多 GPU。
| mxfp4 | Flash Attention 3 (帶匯聚注意力) | MegaBlocks MoE 核心 | |
|---|---|---|---|
| Hopper GPU (H100, H200) | ✅ | ✅ | ❌ |
| Blackwell GPU (GB200, 50xx, RTX Pro 6000) | ✅ | ❌ | ❌ |
| 其他 CUDA GPU | ❌ | ❌ | ✅ |
| AMD Instinct (MI3XX) | ❌ | ❌ | ✅ |
| 如何啟用 | 安裝 triton 3.4 + triton 核心 | 使用 kernels-community 中的 vllm-flash-attn3" | 使用核心 |
即使 120B 模型可以放在單個 H100 GPU 上(使用 mxfp4),您也可以使用 accelerate 或 torchrun 輕鬆地在多個 GPU 上執行它。Transformers 提供了一個預設的並行化方案,您還可以利用最佳化的注意力核心。以下程式碼片段可以在具有 4 個 GPU 的系統上透過 torchrun --nproc_per_node=4 generate.py 執行。
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.distributed import DistributedConfig
import torch
model_path = "openai/gpt-oss-120b"
tokenizer = AutoTokenizer.from_pretrained(model_path, padding_side="left")
device_map = {
"tp_plan": "auto", # Enable Tensor Parallelism
}
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype="auto",
attn_implementation="kernels-community/vllm-flash-attn3",
**device_map,
)
messages = [
{"role": "user", "content": "Explain how expert parallelism works in large language models."}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=1000)
# Decode and print
response = tokenizer.decode(outputs[0])
print("Model response:", response.split("<|channel|>final<|message|>")[-1].strip())
OpenAI GPT OSS 模型經過廣泛訓練,以利用工具作為其推理工作的一部分。我們為 transformers 製作的聊天模板提供了很大的靈活性,請檢視本帖中後面專門的部分。
Llama.cpp
Llama.cpp 提供原生 MXFP4 支援和 Flash Attention,從釋出第一天起,即可在 Metal、CUDA 和 Vulkan 等各種後端上提供最佳效能。
要安裝它,請按照 llama.cpp Github 倉庫中的指南進行操作。
# MacOS
brew install llama.cpp
# Windows
winget install llama.cpp
推薦的方法是透過 llama-server 使用它
llama-server -hf ggml-org/gpt-oss-120b-GGUF -c 0 -fa --jinja --reasoning-format none
# Then, access https://:8080
我們支援 120B 和 20B 模型。欲瞭解更多詳細資訊,請訪問此 PR 或 GGUF 模型集合。
vLLM
如前所述,vLLM 開發了支援注意力匯聚的最佳化 Flash Attention 3 核心,因此您將在 Hopper 卡上獲得最佳結果。聊天完成和 Responses API 都受支援。您可以使用以下程式碼片段安裝並啟動伺服器,該片段假設使用 2 個 H100 GPU:
vllm serve openai/gpt-oss-120b --tensor-parallel-size 2
或者,直接在 Python 中使用,例如:
from vllm import LLM
llm = LLM("openai/gpt-oss-120b", tensor_parallel_size=2)
output = llm.generate("San Francisco is a")
transformers serve
您可以使用 transformers serve 在本地試驗模型,無需其他依賴項。您只需啟動伺服器:
transformers serve
然後,您可以使用 Responses API 傳送請求。
# responses API
curl -X POST https://:8000/v1/responses \
-H "Content-Type: application/json" \
-d '{"input": [{"role": "system", "content": "hello"}], "temperature": 1.0, "stream": true, "model": "openai/gpt-oss-120b"}'
您也可以使用標準 Completions API 傳送請求。
# completions API
curl -X POST https://:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "system", "content": "hello"}], "temperature": 1.0, "max_tokens": 1000, "stream": true, "model": "openai/gpt-oss-120b"}'
微調
GPT OSS 模型已完全整合到 trl 中。我們開發了一些使用 SFTTrainer 的微調示例,以幫助您入門:
- OpenAI cookbook 中有一個 LoRA 示例,展示瞭如何微調模型以支援多語言推理。
- 一個基本的微調指令碼,您可以根據需要進行調整。
部署到 Hugging Face 合作伙伴
Azure
Hugging Face 與 Azure 合作,透過 Azure AI 模型目錄,將最流行的開源模型(涵蓋文字、視覺、語音和多模態任務)直接引入客戶環境,以實現安全部署到託管線上端點,利用 Azure 的企業級基礎設施、自動擴縮和監控。
GPT OSS 模型現已在 Azure AI 模型目錄中提供(GPT OSS 20B,GPT OSS 120B),可部署到線上端點進行即時推理。
Dell
戴爾企業中心是一個安全的線上門戶,它簡化了使用戴爾平臺在本地訓練和部署最新開放 AI 模型的過程。它與戴爾合作開發,提供最佳化的容器、對戴爾硬體的原生支援以及企業級安全功能。
GPT OSS 模型現已在 戴爾企業中心 上提供,可使用戴爾平臺在本地部署。
模型評估
GPT OSS 模型是推理模型:因此,它們在評估時需要非常大的生成大小(新令牌的最大數量),因為它們的生成將首先包含推理,然後才是實際答案。使用過小的生成大小可能會在推理過程中中斷預測,從而導致誤報。在計算指標之前,應從模型答案中刪除推理軌跡,以避免解析錯誤,尤其是在數學或指令評估中。
以下是關於如何使用 lighteval 評估模型(您需要從原始碼安裝)的示例。
git clone https://github.com/huggingface/lighteval
pip install -e .[dev] # make sure you have the correct transformers version installed!
lighteval accelerate \
"model_name=openai/gpt-oss-20b,max_length=16384,skip_special_tokens=False,generation_parameters={temperature:1,top_p:1,top_k:40,min_p:0,max_new_tokens:16384}" \
"extended|ifeval|0|0,lighteval|aime25|0|0" \
--save-details --output-dir "openai_scores" \
--remove-reasoning-tags --reasoning-tags="[('<|channel|>analysis<|message|>','<|end|><|start|>assistant<|channel|>final<|message|>')]"
對於 20B 模型,這將為您提供 IFEval(嚴格提示)的 69.5(+/-1.9)和 AIME25(pass@1 中)的 63.3(+/-8.9),這些分數對於此大小的推理模型來說都在預期範圍內。
如果您想編寫自定義評估指令碼,請注意為了正確過濾掉推理標籤,您需要在分詞器中使用 skip_special_tokens=False,以便在模型輸出中獲取完整的追蹤(使用與上述示例相同的字串對過濾推理)——您可以在下面瞭解原因。
聊天和聊天模板
OpenAI GPT OSS 在其輸出中使用“通道”的概念。大多數情況下,您會看到一個“分析”通道,其中包含不打算傳送給終端使用者的內容,例如思維鏈,以及一個“最終”通道,其中包含實際打算向用戶顯示的訊息。
假設沒有使用工具,模型輸出的結構如下:
<|start|>assistant<|channel|>analysis<|message|>CHAIN_OF_THOUGHT<|end|><|start|>assistant<|channel|>final<|message|>ACTUAL_MESSAGE
大多數時候,您應該忽略除 <|channel|>final<|message|> 後面的文字以外的所有內容。只有此文字應作為助理訊息附加到聊天中,或顯示給使用者。然而,此規則有兩個例外:在訓練期間或模型呼叫外部工具時,您可能需要將分析訊息包含在歷史記錄中。
訓練時:如果您正在為訓練格式化示例,通常會希望在最終訊息中包含思維鏈。正確的做法是在 thinking 鍵中進行。
chat = [
{"role": "user", "content": "Hi there!"},
{"role": "assistant", "content": "Hello!"},
{"role": "user", "content": "Can you think about this one?"},
{"role": "assistant", "thinking": "Thinking real hard...", "content": "Okay!"}
]
# add_generation_prompt=False is generally only used in training, not inference
inputs = tokenizer.apply_chat_template(chat, add_generation_prompt=False)
您可以隨意在先前的對話輪次中或在進行推理而非訓練時包含思考鍵,但它們通常會被忽略。聊天模板只會包含最新的思維鏈,並且只在訓練時(當 add_generation_prompt=False 且最後一輪是助手輪次時)才包含。
我們這樣做是有一個微妙的原因的:OpenAI gpt-oss 模型是在多輪資料上訓練的,除了最後一條思維鏈之外,所有思維鏈都被刪除了。這意味著當您想要微調 OpenAI gpt-oss 模型時,您應該也這樣做。
- 讓聊天模板丟棄除最後一條之外的所有思維鏈
- 除了最終的助手回覆之外,所有對話輪次都要遮蓋標籤,否則您將在沒有思維鏈的情況下訓練它,這將導致它生成不帶思維鏈的回覆。這意味著您無法將整個多輪對話作為一個單獨的樣本進行訓練;相反,您必須將其分解為每個助手回覆一個樣本,並且每次只取消遮蓋最終的助手回覆,以便模型可以從每個對話輪次中學習,同時仍然只在最終訊息中正確地看到思維鏈。
系統和開發者訊息
OpenAI GPT OSS 比較特殊,因為它在聊天開始時區分“系統”訊息和“開發者”訊息,但大多數其他模型只使用“系統”訊息。在 GPT OSS 中,系統訊息遵循嚴格的格式,包含當前日期、模型身份和要使用的推理工作級別等資訊,而“開發者”訊息則更自由,這使得它(非常令人困惑地)與大多數其他模型的“系統”訊息相似。
為了使 GPT OSS 更易於與標準 API 配合使用,聊天模板將把角色為“system”或“developer”的訊息視為開發者訊息。如果您想修改實際的系統訊息,可以將特定引數 model_identity 或 reasoning_effort 傳遞給聊天模板。
chat = [
{"role": "system", "content": "This will actually become a developer message!"}
]
tokenizer.apply_chat_template(
chat,
model_identity="You are OpenAI GPT OSS.",
reasoning_effort="high" # Defaults to "medium", but also accepts "high" and "low"
)
使用 Transformers 進行工具使用
GPT OSS 支援兩種工具:“內建”工具 browser 和 python,以及使用者提供的自定義工具。要啟用內建工具,請將其名稱以列表形式傳遞給聊天模板的 builtin_tools 引數,如下所示。要傳遞自定義工具,您可以將其作為 JSON schema 或帶有型別提示和文件字串的 Python 函式,使用 tools 引數。有關更多詳細資訊,請參閱 聊天模板工具文件,或者您可以直接修改以下示例:
def get_current_weather(location: str):
"""
Returns the current weather status at a given location as a string.
Args:
location: The location to get the weather for.
"""
return "Terrestrial." # We never said this was a good weather tool
chat = [
{"role": "user", "content": "What's the weather in Paris right now?"}
]
inputs = tokenizer.apply_chat_template(
chat,
tools=[weather_tool],
builtin_tools=["browser", "python"],
add_generation_prompt=True,
return_tensors="pt"
)
如果模型選擇呼叫工具(透過以 <|call|> 結尾的訊息指示),那麼您應該將工具呼叫新增到聊天中,呼叫工具,然後將工具結果新增到聊天中並再次生成。
tool_call_message = {
"role": "assistant",
"tool_calls": [
{
"type": "function",
"function": {
"name": "get_current_temperature",
"arguments": {"location": "Paris, France"}
}
}
]
}
chat.append(tool_call_message)
tool_output = get_current_weather("Paris, France")
tool_result_message = {
# Because GPT OSS only calls one tool at a time, we don't
# need any extra metadata in the tool message! The template can
# figure out that this result is from the most recent tool call.
"role": "tool",
"content": tool_output
}
chat.append(tool_result_message)
# You can now apply_chat_template() and generate() again, and the model can use
# the tool result in conversation.
致謝
這對於社群來說是一個重要的版本,為了在生態系統中全面支援新模型,各個團隊和公司付出了巨大的努力。
這篇部落格文章的作者是從為文章本身貢獻內容的人中挑選出來的,並不代表對專案的投入程度。除了作者列表之外,還有其他人為內容審閱做出了重要貢獻,包括 Merve 和 Sergio。謝謝你們!
整合和啟用工作涉及數十人。不分先後,我們要特別感謝開源團隊的 Cyril、Lysandre、Arthur、Marc、Mohammed、Nouamane、Harry、Benjamin、Matt。TRL 團隊的 Ed、Lewis 和 Quentin 都參與其中。我們還要感謝評估團隊的 Clémentine,以及核心團隊的 David 和 Daniel。在商業合作方面,Simon、Alvaro、Jeff、Akos、Alvaro 和 Ivar 做出了重要貢獻。Hub 和產品團隊貢獻了推理提供商支援、llama.cpp 支援以及許多其他改進,這都要歸功於 Simon、Célina、Pierric、Lucain、Xuan-Son、Chunte 和 Julien。Magda 和 Anna 參與了法律團隊的工作。
Hugging Face 的作用是讓社群有效地使用這些模型。我們感謝 vLLM 等公司推動了該領域的發展,並珍視我們與推理提供商的持續合作,以提供更簡單的方式來構建它們。
當然,我們深切感謝 OpenAI 決定向整個社群釋出這些模型。期待未來更多精彩!

