⚡Tutoriel : Comment affiner gpt-oss
Apprenez étape par étape comment entraîner OpenAI gpt-oss localement avec Unsloth.
🌐 Affinage gpt-oss sur Colab
5
Préparation des données

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
Enregistrez/exportez votre modèle
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")✨ Enregistrement vers 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 "Le sens de la vie et de l'univers est"

🖥️ Affinage gpt-oss local
1
Installer Unsloth localement
# Nous installons les dernières versions de Torch, Triton, les noyaux Triton d'OpenAI, Transformers et 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@05b2c186c1b6c9a08375389d5efe9cb4c401c075#subdirectory=python/triton_kernels2
Configuration de gpt-oss et de l'Effort de Raisonnement
from unsloth import FastLanguageModel
import torch
max_seq_length = 1024
dtype = None
# Modèles pré-quantifiés 4 bits que nous prenons en charge pour un téléchargement 4× plus rapide + pas d'OOM.
fourbit_models = [
"unsloth/gpt-oss-20b-unsloth-bnb-4bit", # modèle 20B utilisant la quantification bitsandbytes 4bit
"unsloth/gpt-oss-120b-unsloth-bnb-4bit",
"unsloth/gpt-oss-20b", # modèle 20B utilisant le format MXFP4
"unsloth/gpt-oss-120b",
] # Plus de modèles sur https://huggingface.co/unsloth
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/gpt-oss-20b",
dtype = dtype, # None pour détection automatique
max_seq_length = max_seq_length, # Choisissez n'importe quelle valeur pour un contexte long !
load_in_4bit = True, # quantification 4 bits pour réduire la mémoire
full_finetuning = False, # [NOUVEAU!] Nous avons maintenant le fine-tuning complet !
# token = "hf_...", # utilisez-en un si vous utilisez des modèles à accès restreint
)3
Hyperparamètres d'affinage (LoRA)
model = FastLanguageModel.get_peft_model(
model,
r = 8, # Choisissez n'importe quel nombre > 0 ! Suggestion : 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, # Prend en charge n'importe quelle valeur, mais = 0 est optimisé
bias = "none", # Prend en charge n'importe quelle valeur, mais = "none" est optimisé
# [NOUVEAU] "unsloth" utilise 30% de VRAM en moins, permet des tailles de batch 2× supérieures !
use_gradient_checkpointing = "unsloth", # True or "unsloth" pour des contextes très longs
random_state = 3407,
use_rslora = False, # Nous prenons en charge le LoRA à rang stabilisé
loftq_config = None, # Et LoftQ
)4
Préparation des données
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, }
pass
#token = "hf_...", # en utiliser un si vous utilisez des modèles régulés comme meta-llama/Llama-2-7b-hf
dataset = load_dataset("HuggingFaceH4/Multilingual-Thinking", split="train")
Elisetokenizer.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
Entraîner le modèle
from trl import SFTConfig, SFTTrainer
trainer = SFTTrainer(
trainer = Trainer(
tokenizer = tokenizer,
model = model,
args = SFTConfig(
args = TrainingArguments(
gradient_accumulation_steps = 4,
per_device_train_batch_size = 1,
warmup_steps = 5,
max_steps = 30,
max_steps = 60,
bf16 = is_bfloat16_supported(),
optim = "adamw_8bit",
logging_steps = 1,
weight_decay = 0.01,','t201':'lr_scheduler_type = "linear",']
seed = 3407,
output_dir = "outputs",
report_to = "none", # Utilisez ceci pour WandB, etc.
),
)
6
Inférence : Exécutez votre modèle entraîné
messages = [
{"role": "system", "content": "langue de raisonnement : Français\n\nVous êtes un assistant utile qui peut résoudre des problèmes mathématiques."},
{"role": "user", "content": "Résoudre x^5 + 3x^4 - 10 = 3."},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt = True,
return_tensors = "pt",
return_dict = True,
reasoning_effort = "medium",
).to(model.device)
from transformers import TextStreamer
_ = model.generate(**inputs, max_new_tokens = 2048, streamer = TextStreamer(tokenizer))
7
Enregistrez et exportez votre modèle
model.save_pretrained_merged(save_directory, tokenizer)model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token= hf_token)✨ Enregistrement vers 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.gguf llama.cpp/llama-quantize gpt-oss-finetuned.gguf gpt-oss-finetuned-Q8_0.gguf Q8_0llama.cpp/llama-cli --model gpt-oss-finetuned-Q8_0.gguf \ --jinja -ngl 99 --threads -1 --ctx-size 16384 \ --temp 1.0 --top-p 1.0 --top-k 0 \ -p "Le sens de la vie et de l'univers est"
🏁 Et voilà !
❓FAQ (Foire aux questions)
1. Puis-je exporter mon modèle pour l'utiliser plus tard dans Hugging Face, llama.cpp GGUF ou vLLM ?
2. Puis-je faire un entraînement fp4 ou MXFP4 avec gpt-oss ?
3. Puis-je exporter mon modèle au format MXFP4 après l'entraînement ?
4. Puis-je faire de l'apprentissage par renforcement (RL) ou GRPO avec gpt-oss ?
Mis à jour
Ce contenu vous a-t-il été utile ?










