⚡チュートリアル:gpt-oss をファインチューニングする方法
Unsloth を使って OpenAI gpt-oss をローカルで段階的にトレーニングする方法を学びます。
🌐 Colab gpt-oss ファインチューニング
5
データ準備

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
いよいよファインチューニングしたモデルで推論を実行する時です。指示と入力は変更できますが、出力は空のままにしてください。
gpt-oss モデルをファインチューニングした後、次のようにして 16 ビット形式にマージできます:model.save_pretrained_merged(save_directory, tokenizer, save_method="mxfp4)✨ モデルをマージして直接 Hugging Face ハブへプッシュすることを好む場合:
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 model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token= hf_token, save_method="mxfp4")マージ済みモデルを変換する:量子化モデルで推論を実行する: llama.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"
1
あなたのデバイスが
# 最新の Torch、Triton、OpenAI の 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@05b2c186c1b6c9a08375389d5efe9cb4c401c075#subdirectory=python/triton_kernels2
gpt-oss と Reasoning Effort の設定
from unsloth import FastLanguageModel
import torch
max_seq_length = 1024
dtype = None
# 4bit 事前量子化モデルはダウンロードが4倍高速で OOM を防ぎます。
fourbit_models = [
"unsloth/gpt-oss-20b-unsloth-bnb-4bit", # bitsandbytes 4bit 量子化を使用する20Bモデル
"unsloth/gpt-oss-120b-unsloth-bnb-4bit",
"unsloth/gpt-oss-20b", # MXFP4 フォーマットを使用する20Bモデル
"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, # メモリ削減のための4ビット量子化
full_finetuning = False, # [NEW!] フルファインチューニングも利用可能になりました!
# token = "hf_...", # ゲート付きモデルを使う場合は指定してください
)3
ファインチューニングのハイパーパラメータ(LoRA)
model = FastLanguageModel.get_peft_model(
model,
r = 8, # 0より大きい任意の数を選択してください!推奨: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, # 任意をサポートしますが = 0 が最適化されています
bias = "none", # 任意をサポートしますが = "none" が最適化されています
# [NEW] "unsloth" は VRAM を30%節約し、2倍大きなバッチサイズに対応します!
use_gradient_checkpointing = "unsloth", # 非常に長いコンテキストには True または "unsloth"
random_state = 3407,
use_rslora = False, # ランク安定化LoRAをサポートします
loftq_config = None, # および LoftQ
)4
データ準備
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
from datasets import load_dataset
dataset = load_dataset("HuggingFaceH4/Multilingual-Thinking", split="train")
データセットを使います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'])
5
を参照してください。
from trl import SFTConfig, SFTTrainer
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, # 1エポックの完全なトレーニングを設定する場合
max_steps = 30,
learning_rate = 2e-4,
logging_steps = 1,
optim = "adamw_8bit",
weight_decay = 0.01,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "outputs",
report_to = "none", # WandB等を使う場合は適宜変更
),
)
6
推論:トレーニング済みモデルを実行する
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."},
]
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
モデルを保存してエクスポートする
model.save_pretrained_merged(save_directory, tokenizer)model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token= hf_token)✨ モデルをマージして直接 Hugging Face ハブへプッシュすることを好む場合:
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 model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token= hf_token, save_method="mxfp4")python3 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 \ llama.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 \
🏁 以上です!
❓よくある質問(FAQ)
1. 後でHugging Face、llama.cppのGGUF、またはvLLMで使用するためにモデルをエクスポートできますか?
2. gpt-ossでfp4やMXFP4トレーニングはできますか?
3. トレーニング後にモデルをMXFP4形式にエクスポートできますか?
4. gpt-ossで強化学習(RL)やGRPOを行えますか?
最終更新
役に立ちましたか?










