⚡Tutorial: Wie man gpt-oss finetunt
Lerne Schritt für Schritt, wie man OpenAI gpt-oss lokal mit Unsloth trainiert.
🌐 Colab gpt-oss Feinabstimmung
5
Datenvorbereitung

tokenizer.apply_chat_template(
text,
tokenize = False,
add_generation_prompt = False,
reasoning_effort = "medium",
)from unsloth.chat_templates import standardize_sharegpt
dataset = standardize_sharegpt(dataset)
dataset = dataset.map(formatting_prompts_func, batched = True,)print(dataset[0]['text'])
8
Speichern/exportieren Sie Ihr Modell
model.save_pretrained_merged(save_directory, tokenizer, save_method="mxfp4)model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token= hf_token, save_method="mxfp4")✨ Speichern für Llama.cpp
apt-get update apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y git clone https://github.com/ggml-org/llama.cpp cmake llama.cpp -B llama.cpp/build \ -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-gguf-split cp llama.cpp/build/bin/llama-* llama.cppython3 llama.cpp/convert_hf_to_gguf.py gpt-oss-finetuned-merged/ --outfile gpt-oss-finetuned-mxfp4.ggufllama.cpp/llama-cli --model gpt-oss-finetuned-mxfp4.gguf \ --jinja -ngl 99 --threads -1 --ctx-size 16384 \ --temp 1.0 --top-p 1.0 --top-k 0 \ -p "The meaning to life and the universe is"

🖥️ Lokale gpt-oss Feinabstimmung
1
Stellen Sie sicher, dass Ihr Gerät
für dieses Setup nicht funktionieren wird, da wir die neuesten Versionen von PyTorch, Triton und zugehörigen Paketen benötigen. Installieren Sie Unsloth mit diesem spezifischen Befehl:
!pip install --upgrade -qqq uv
# Wir installieren das neueste Torch, Triton, OpenAI's Triton-Kernels, Transformers und Unsloth!
try: import numpy; install_numpy = f"numpy=={numpy.__version__}"
!uv pip install -qqq \
except: install_numpy = "numpy"
"unsloth_zoo[base] @ git+https://github.com/unslothai/unsloth-zoo" \
"unsloth[base] @ git+https://github.com/unslothai/unsloth" \
"torch>=2.8.0" "triton>=3.4.0" {install_numpy} \
torchvision bitsandbytes \
git+https://github.com/triton-lang/triton.git@05b2c186c1b6c9a08375389d5efe9cb4c401c075#subdirectory=python/triton_kernels2
Konfiguration von gpt-oss und Reasoning Effort
from unsloth import FastLanguageModel
import torch
max_seq_length = 1024
dtype = None
(da keine andere Version für QLoRA-Feinabstimmung funktionieren wird). Konfigurieren Sie die folgenden Parameter:
# 4bit vorquantisierte Modelle, die wir für 4× schnelleren Download + keine OOMs unterstützen.
fourbit_models = [
"unsloth/gpt-oss-20b-unsloth-bnb-4bit", # 20B-Modell mit bitsandbytes 4bit-Quantisierung
"unsloth/gpt-oss-120b-unsloth-bnb-4bit",
"unsloth/gpt-oss-20b", # 20B-Modell im MXFP4-Format
"unsloth/gpt-oss-120b",
model, tokenizer = FastLanguageModel.from_pretrained(
] # Mehr Modelle unter https://huggingface.co/unsloth
model_name = "unsloth/gpt-oss-20b",
dtype = dtype, # None für automatische Erkennung
max_seq_length = max_seq_length, # Wählen Sie beliebig für lange Kontexte!
load_in_4bit = True, # 4-Bit-Quantisierung zur Reduzierung des Speichers
full_finetuning = False, # [NEU!] Wir haben jetzt Full-Finetuning!
)3
Hyperparameter der Feinabstimmung (LoRA)
model = FastLanguageModel.get_peft_model(
model,
# token = "hf_...", # verwenden Sie eins, wenn Sie gated Modelle nutzen
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 16,
lora_dropout = 0, # Unterstützt beliebige Werte, aber = 0 ist optimiert
bias = "none", # Unterstützt beliebige Werte, aber = "none" ist optimiert
r = 8, # Wählen Sie eine beliebige Zahl > 0! Vorgeschlagen: 8, 16, 32, 64, 128
use_gradient_checkpointing = "unsloth", # True oder "unsloth" für sehr langen Kontext
random_state = 3407,
use_rslora = False, # Wir unterstützen rank-stabilisiertes LoRA
loftq_config = None, # Und LoftQ
)4
Datenvorbereitung
Dies ist derselbe Datensatz, der im Feinabstimmungs-Cookbook von OpenAI referenziert wird. Das Ziel der Verwendung eines multilingualen Datensatzes ist es, dem Modell zu helfen, Reasoning-Muster über mehrere Sprachen hinweg zu lernen und zu verallgemeinern.
def formatting_prompts_func(examples):
convos = examples["messages"]
texts = [tokenizer.apply_chat_template(convo, tokenize = False, add_generation_prompt = False) for convo in convos]
return { "text" : texts, }
from datasets import load_dataset
pass
Datensatztokenizer.apply_chat_template(
text,
tokenize = False,
add_generation_prompt = False,
reasoning_effort = "medium",
)from unsloth.chat_templates import standardize_sharegpt
dataset = standardize_sharegpt(dataset)
dataset = dataset.map(formatting_prompts_func, batched = True,)print(dataset[0]['text'])
5
Trainieren Sie das Modell
dataset = load_dataset("HuggingFaceH4/Multilingual-Thinking", split="train")
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
train_dataset = dataset,
args = SFTConfig(
per_device_train_batch_size = 1,
gradient_accumulation_steps = 4,
warmup_steps = 5,
# num_train_epochs = 1, # Set this for 1 full training run.
from trl import SFTConfig, SFTTrainer
num_train_epochs = 1
logging_steps = 1,
optim = "adamw_8bit",
weight_decay = 0.01,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "outputs",
report_to = "none", # Use this for WandB etc
),
)
6
max_steps = 30,
Inference: Führen Sie Ihr trainiertes Modell aus
messages = [
{"role": "system", "content": "reasoning language: French\n\nYou are a helpful assistant that can solve mathematical problems."},
]
{"role": "user", "content": "Solve x^5 + 3x^4 - 10 = 3."},
messages,
inputs = tokenizer.apply_chat_template(
add_generation_prompt = True,
return_tensors = "pt",
reasoning_effort = "medium",
return_dict = True,
from transformers import TextStreamer
).to(model.device)
7
_ = model.generate(**inputs, max_new_tokens = 2048, streamer = TextStreamer(tokenizer))
Nach der Feinabstimmung Ihres gpt-oss-Modells können Sie es in 16-Bit-Format zusammenführen mit:model.save_pretrained_merged(save_directory, tokenizer)✨ Speichern für Llama.cpp
apt-get update apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y git clone https://github.com/ggml-org/llama.cpp cmake llama.cpp -B llama.cpp/build \ -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON cmake --build llama.cpp/build --config Release -j --clean-first --target llama-cli llama-gguf-split cp llama.cpp/build/bin/llama-* llama.cpKonvertieren und quantisieren Sie das zusammengeführte Modell: python3 llama.cpp/convert_hf_to_gguf.py gpt-oss-finetuned-merged/ --outfile gpt-oss-finetuned.ggufllama.cpp/llama-quantize gpt-oss-finetuned.gguf gpt-oss-finetuned-Q8_0.gguf Q8_0 --jinja -ngl 99 --threads -1 --ctx-size 16384 \ --temp 1.0 --top-p 1.0 --top-k 0 \ -p "The meaning to life and the universe is"
llama.cpp/llama-cli --model gpt-oss-finetuned-Q8_0.gguf \
vorbeischauen, wenn Sie Hilfe benötigen.
❓FAQ (Häufig gestellte Fragen)
2. Kann ich fp4- oder MXFP4-Training mit gpt-oss durchführen?
3. Kann ich mein Modell nach dem Training in das MXFP4-Format exportieren?
4. Kann ich Reinforcement Learning (RL) oder GRPO mit gpt-oss durchführen?
Zuletzt aktualisiert
War das hilfreich?










