新智元報(bào)道
編輯:艾倫
【新智元導(dǎo)讀】針對OpenAI最新開源的GPT-OSS,這一篇面向零基礎(chǔ)小白用戶的手把手式的詳細(xì)訓(xùn)練教程或許能幫助你完成你的第一個(gè)GPT訓(xùn)練項(xiàng)目。
新一年的最難秋招季又來了!
2025年,隨著AI Agent的鋪開,各類崗位都開始逐漸要求候選人具有AI能力。
你是否也想在簡歷上擁有訓(xùn)練GPT的高大上的項(xiàng)目經(jīng)歷,增強(qiáng)自己在AI時(shí)代求職的競爭力?
解決方案現(xiàn)在有了。
今年8月5日,自從幾年前GPT-2發(fā)布后,再無新開源模型的終于發(fā)布了新開源大模型GPT-OSS,引發(fā)社區(qū)熱議。
模型分為120B和20B兩個(gè)版本,其中20B的版本理論上可以在消費(fèi)級的16GB以上顯存的顯卡上運(yùn)行,從而允許我們以較低的成本使用消費(fèi)級顯卡訓(xùn)練GPT。
近日,博主Lorentz Yeung發(fā)表的一篇博客,就對本地部署和微調(diào)訓(xùn)練GPT-OSS進(jìn)行了手把手的詳盡教學(xué),小白友好值Max。
博客地址:https://pub.towardsai.net/teaching-openais-gpt-oss-20b-model-multilingual-reasoning-ability-a-hands-on-guide-with-rtx-4090-0835ba121ee7
微調(diào)GPT-OSS-20B
RTX 4090本地實(shí)操指南
本文會詳細(xì)介紹如何對OpenAI最新開源的GPT-OSS-20B模型(https://huggingface.co/unsloth/gpt-oss-20b-GGUF)進(jìn)行微調(diào),以提升它的多語言推理能力。
我們將涵蓋目標(biāo)設(shè)定、基于RTX 4090和WSL2的本地環(huán)境搭建、代碼來源、詳細(xì)操作流程、訓(xùn)練前后效果對比,以及為何即便只訓(xùn)練60步也能有顯著提升。
如果你喜歡鼓搗AI,這份教程可以幫助你在本地復(fù)現(xiàn)整個(gè)流程。
你將學(xué)到什么:解鎖多語言思維鏈推理
看完這篇教程后,你就能動手為OpenAI發(fā)布的GPT-OSS-20B模型進(jìn)行多語言思維鏈推理的微調(diào)。
GPT-OSS模型本身已經(jīng)可以勝任數(shù)學(xué)、編程、常識問答等任務(wù),并且具備一定的多語言能力,但它的推理過程天然偏向英文。
比如,即使你用法語提問,模型內(nèi)部思考時(shí)還是優(yōu)先用英文,而且你無法像設(shè)置「推理語言:法語」那樣切換它的思考語言。
通過在HuggingFaceH4/Multilingual-Thinking數(shù)據(jù)集(包含1000條多語言推理樣本,涵蓋法語、西班牙語、德語、意大利語等)上微調(diào),可以讓模型具備以下能力:
能用OpenAI的Harmony格式生成結(jié)構(gòu)化響應(yīng)(例如把「分析」和「最終答案」分開)。
可以根據(jù)需要切換推理語言(比如用法語分析、用英語作答)。
能在非英語環(huán)境下,更靈活地調(diào)整推理的詳細(xì)程度(低、中、高)。
按需切換推理語言和詳細(xì)程度。此處示例為:法語,中等詳細(xì)程度
微調(diào)后的模型能根據(jù)需求自由切換推理語言和細(xì)節(jié)程度——例如用法語進(jìn)行中等細(xì)節(jié)分析。
對于教學(xué)、內(nèi)容創(chuàng)作或AI助手等場景,這點(diǎn)非常實(shí)用,尤其是當(dāng)用戶的母語不是英文時(shí)。
環(huán)境搭建:RTX 4090+WSL2本地高效微調(diào)
訓(xùn)練腳本主要基于Unsloth提供的訓(xùn)練腳本,并針對RTX4090做了一些參數(shù)調(diào)整。
硬件環(huán)境是:NVIDIA RTX 4090 GPU(24GB顯存),操作系統(tǒng)是Windows,通過WSL2運(yùn)行。
為什么要用本地環(huán)境?
我們一開始嘗試用Google Colab免費(fèi)的Tesla T4顯卡,但由于顯存限制(即使用了4bit量化,20B模型還是需要12–23GB顯存),很快就出現(xiàn)AcceleratorError錯(cuò)誤并崩潰。
使用Google Colab報(bào)錯(cuò):AcceleratorError
Colab的付費(fèi)高級版可能可以跑,但本地環(huán)境顯然在控制能力和速度上更勝一籌。
搭建流程如下:
1. 在WSL2終端,創(chuàng)建虛擬環(huán)境并安裝pytorch和unsloth,命令如下(見Unsloth文檔:https://docs.unsloth.ai/basics/gpt-oss-how-to-run-and-fine-tune#fine-tuning-gpt-oss-with-unsloth):
conda create --name unsloth_env \
python=3.11 \
pytorch-cuda=12.1 \
pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers \
-y
conda activate unsloth_env
pip install unsloth
看到「unsloth_env is created!」就成功了。
2. 下載我們的Notebook文件,激活新建的「unsloth_env」(或者你自己命名的環(huán)境)kernel,運(yùn)行安裝依賴的cell:
%%capture
# 安裝最新版Torch、Triton、Transformers和Unsloth!
!pip install --upgrade -qqq uv
try: import numpy; install_numpy = f"numpy=={numpy.__version__}"
except: install_numpy = "numpy"
!uv pip install -qqq \
"torch>=2.8.0" "triton>=3.4.0" {install_numpy} \
"unsloth_zoo[base] @ git+https://github.com/unslothai/unsloth-zoo" \
"unsloth[base] @ git+https://github.com/unslothai/unsloth" \
torchvision bitsandbytes \
git+https://github.com/huggingface/transformers \
git+https://github.com/triton-lang/triton.git@main#subdirectory=python/triton_kernels
有環(huán)境或依賴疑問可參考相關(guān)文檔。
整個(gè)配置流程大約花費(fèi)30分鐘。
用RTX 4090本地運(yùn)行其實(shí)很簡單:下載Notebook到本地,在VS Code或Jupyter Lab里用WSL2環(huán)境逐行運(yùn)行就可以了。
Unsloth庫在速度和顯存利用上都有優(yōu)化,訓(xùn)練效率更高,也特別適配RTX系列顯卡。
代碼詳解
這份Notebook包含了加載模型、準(zhǔn)備數(shù)據(jù)、微調(diào)和推理的完整流程。
如果你不關(guān)心細(xì)節(jié)解釋,其實(shí)完全可以直接跳過下面的內(nèi)容,在Jupyter Notebook頂部點(diǎn)擊Run All一鍵運(yùn)行就行——我們已經(jīng)為RTX4090優(yōu)化好了參數(shù)。
安裝與模型加載
模型用的是Unsloth版本的GPT-OSS-20B。
OpenAI的GPT-OSS模型本身就用的是MXFP4格式,而Unsloth最近加了對應(yīng)工具和兼容方案,讓這些權(quán)重也能順利微調(diào)。
MXFP4是Open Compute Project提出的微縮浮點(diǎn)數(shù)格式,在推理效率上表現(xiàn)很好。
OpenAI發(fā)布的GPT-OSS-120B和20B都有原生MXFP4權(quán)重,Unsloth針對主流訓(xùn)練框架缺乏MXFP4支持的情況,做了自定義適配和NF4仿真機(jī)制,能直接對GPT-OSS進(jìn)行微調(diào),詳見Unsloth文檔。
from unsloth import FastLanguageModel
import torch
max_seq_length = 4096
dtype = None
# 支持4bit預(yù)量化的模型,下載速度快且顯存友好。
fourbit_models = [
"unsloth/gpt-oss-20b-unsloth-bnb-4bit", # bitsandbytes 4bit量化
"unsloth/gpt-oss-120b-unsloth-bnb-4bit",
"unsloth/gpt-oss-20b", # MXFP4格式
"unsloth/gpt-oss-120b",
] # 更多模型見https://huggingface.co/unsloth
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/gpt-oss-20b",
dtype = dtype, # None表示自動識別
max_seq_length = max_seq_length,
load_in_4bit = True, # 4bit量化顯存更省
full_finetuning = False,
# token = "hf_...", # 如果用gated模型需要填
)
model = FastLanguageModel.get_peft_model(
model,
r = 8, # 可選8,16,32,64,128等
target_modules = ["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj",],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth", # 超長上下文推薦True或"unsloth"
random_state = 3407,
use_rslora = False,
loftq_config = None,
)
這段代碼實(shí)現(xiàn)了什么?
用pip安裝Unsloth、Torch、Transformers及相關(guān)依賴。
加載模型(支持4bit量化,起步只需約12GB顯存)。
加載LoRA適配器,目標(biāo)僅微調(diào)約0.02%的參數(shù),極大提升訓(xùn)練效率。
數(shù)據(jù)準(zhǔn)備
dataset = load_dataset("HuggingFaceH4/Multilingual-Thinking", split="train")
這行代碼的作用:
加載HuggingFaceH4/Multilingual-Thinking數(shù)據(jù)集(包含1000條多語言鏈?zhǔn)酵评順颖荆╤ttps://huggingface.co/datasets/HuggingFaceH4/Multilingual-Thinking)。
主要字段包括:「reasoning_language」、「developer」、「user」、「analysis」、「final」、「messages」。
其中「messages」是對話輪次列表,比如system prompt、用戶提問、助手分析/回答等。
from unsloth.chat_templates import standardize_sharegpt
dataset = standardize_sharegpt(dataset)
dataset = dataset.map(formatting_prompts_func, batched = True,)
這段代碼是在:
標(biāo)準(zhǔn)化數(shù)據(jù)為ShareGPT格式,并應(yīng)用GPT-OSS的專用對話模板。
這一步會把每輪對話包裝成GPT-OSS專屬的Harmony格式(比如<|start|>role<|message|>content<|end|>),包含推理細(xì)致程度、不同channel(分析/評論/最終答案)、工具調(diào)用等結(jié)構(gòu)信息。更詳細(xì)的說明見下圖的Notebook示例。
這里只是文本格式化,還沒有進(jìn)行分詞,分詞是在訓(xùn)練時(shí)完成的。
將每次對話包裝為 GPT-OSS 專用的 Harmony 格式(例如:<|start|>role<|message|>content<|end|>)
訓(xùn)練
from trl import SFTConfig, SFTTrainer
from transformers import DataCollatorForSeq2Seq
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
train_dataset = dataset,
args = SFTConfig(
per_device_train_batch_size = 1,
gradient_accumulation_steps = 16,
warmup_steps = 5,
# num_train_epochs = 1, # 如果想完整跑一輪可以開啟
max_steps = 60,
learning_rate = 2e-4,
logging_steps = 20,
optim = "adamw_8bit",
weight_decay = 0.01,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "outputs",
report_to = "none", # 可接入WandB等日志平臺
),
)
這一大段代碼其實(shí)只是在:
使用SFTTrainer,訓(xùn)練步數(shù)設(shè)置為60,等效batch size為16,學(xué)習(xí)率2e-4。
在RTX 4090上訓(xùn)練大約34分鐘,損失從1.62降到1.07。如果有條件可以訓(xùn)練更久,歡迎留言告訴我們你是否能降到0.5附近。
訓(xùn)練采樣時(shí)會不會重復(fù)抽樣?
Hugging Face的TRL SFTTrainer默認(rèn)是「無放回采樣」,即每輪迭代按順序遍歷數(shù)據(jù)集(可選shuffle),直到達(dá)到指定步數(shù)或epoch數(shù)。
如果訓(xùn)練步數(shù)不足一輪(比如這里的60步,等效batch size16,約采樣960/1000條數(shù)據(jù)),一般不會重復(fù)抽樣。
當(dāng)然,也可以用dataloader_sampler等參數(shù)自定義采樣方式。
訓(xùn)練前后對比
效果一目了然
微調(diào)前,基座模型在面對類似「解方程x? + 3x? - 10 = 3」的問題時(shí),推理過程都是用英文進(jìn)行:
Low(低):用英文給出粗略估算(比如根約為1.36)。
Medium(中):用英文做更深入的分析。
High(高):英文詳細(xì)步驟,精確計(jì)算根約為1.32。
沒有多語言分析,也沒有Harmony格式的結(jié)構(gòu)化輸出。
微調(diào)60步之后:
微調(diào)后使用法語進(jìn)行推理
推理過程能自動切換到法語「分析」通道(比如:「Très bien, commen?ons…」),而且格式結(jié)構(gòu)清晰。
數(shù)學(xué)結(jié)論依然準(zhǔn)確,但每一步用法語表達(dá),符合數(shù)據(jù)集設(shè)定。
這樣的變化說明,模型從單一英文推理轉(zhuǎn)變?yōu)榭梢愿鶕?jù)需要靈活切換思考語言,證明了微調(diào)的巨大作用。
為什么只訓(xùn)練60步就有巨大提升?
你可能會好奇:為什么只訓(xùn)練60步,模型推理風(fēng)格就發(fā)生這么大轉(zhuǎn)變?
我們認(rèn)為的一種可能的解釋是:
LoRA的高效性:實(shí)際更新的參數(shù)只有大約400萬(占209億總參數(shù)的0.02%),主要集中在注意力層。這其實(shí)是在快速「換風(fēng)格」,而不是重新學(xué)邏輯或功能。
高質(zhì)量數(shù)據(jù)集:模型這60步能看到960條樣本(幾乎全量),直接學(xué)習(xí)多語言鏈?zhǔn)酵评淼谋磉_(dá)方式。
SFT對齊:監(jiān)督微調(diào)優(yōu)化輸出,loss下降很快,效率遠(yuǎn)高于RLHF。
強(qiáng)大預(yù)訓(xùn)練基礎(chǔ):模型本身已具備推理和多語言能力,我們只是微調(diào)表達(dá)方式。
優(yōu)化器和學(xué)習(xí)率:較高的學(xué)習(xí)率(2e-4)讓模型能迅速適應(yīng)新風(fēng)格。NVIDIA文檔里也常把這種訓(xùn)練稱為「激進(jìn)」。
本質(zhì)上,這是在強(qiáng)大基座模型上進(jìn)行風(fēng)格微調(diào)——只需60步,多語言表現(xiàn)立竿見影。
接下來輪到您來親自微調(diào)了!
看完這篇文章,你應(yīng)該已經(jīng)學(xué)會如何把類似GPT-OSS-20B這樣的大模型,調(diào)整成支持多語言思維鏈推理的版本,把它從英文「內(nèi)心獨(dú)白」變成可按需切換思考語言(比如法語)的多面手。
這也包括了對Harmony格式結(jié)構(gòu)化響應(yīng)的理解,以及解決模型默認(rèn)英文推理的限制。
如果遇到問題,可以優(yōu)先去Unsloth的Discord社區(qū)(https://discord.com/invite/unsloth)尋求解決方案。
以上Notebook文件包含完整運(yùn)行結(jié)果,可以在GitHub下載(https://github.com/entzyeung/towardsai/tree/main/Teaching%20OpenAI's%20GPT-OSS%2020B%20Model%20Multilingual%20Reasoning%20Ability)。
微調(diào)GPT-OSS,就像為AI打開了定制化大門,只需要以低成本臨時(shí)在云端租用一張4090即可完成微調(diào)。
建議你也親自試試,有問題歡迎在評論區(qū)討論。
參考資料:
https://entzyeung.medium.com/0835ba121ee7?source=friends_link&sk=ca02110337755c9c27c11049f466f891
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.