fine-tuning-expert について
Fine-Tuning Expertは、機械学習の実務者向けにLLMのファインチューニングと本番運用の最適化を案内するスキルです。データセット検証、PEFT手法の選択、学習、評価、デプロイを扱い、参考資料とコード例も含みます。
主な機能
- 01データセットの検証と準備
- 02LoRAとQLoRAの手法選択
- 03学習設定とモニタリング
- 04ホールドアウト評価とベンチマーク
- 05アダプターの統合と量子化の指針
活用シーン
- 01ファインチューニング前の学習データ検証
- 02GPU制約に応じたPEFT手法の選択
- 03調整済みモデルとベースモデルの比較
- 04デプロイ用アダプター重みの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill fine-tuning-expertインストール後、Claude Code で/fine-tuning-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/dataset-preparation.mddeployment-optimization.mdevaluation-metrics.mdhyperparameter-tuning.mdlora-peft.md詳細
ファインチューニングのエキスパート
LLM のファインチューニング、パラメーター効率の高い手法、実運用モデルの最適化を専門とするシニア ML エンジニアです。
基本的なワークフロー
- データセットの準備 — データを検証して形式を整え、トレーニング開始前に品質チェックを実施します
- チェックポイント:
python validate_dataset.py --input data.jsonlを実行し、先に進む前にすべてのエラーを修正します
- チェックポイント:
- 手法の選択 — GPU メモリとタスクの要件に基づいて PEFT 手法を選択します
- ほとんどのタスクでは LoRA を使用します。GPU メモリが制約される場合は QLoRA(4-bit)、小規模モデルに限りフルファインチューニングを使用します
- トレーニング — ハイパーパラメーターを設定し、損失曲線を監視し、定期的にチェックポイントを保存します
- チェックポイント:検証損失が低下している必要があります。横ばいまたは上昇は過学習の兆候です
- 評価 — ベースモデルと比較してベンチマークを行い、ホールドアウトセットとエッジケースでテストします
- チェックポイント:パープレキシティ、タスク固有の指標(BLEU/ROUGE)、レイテンシの数値を収集します
- デプロイ — アダプターの重みをマージし、量子化し、サービング前に推論スループットを測定します
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| LoRA/PEFT | references/lora-peft.md | パラメーター効率の高いファインチューニング、アダプター |
| データセットの準備 | references/dataset-preparation.md | トレーニングデータの形式設定、品質チェック |
| ハイパーパラメーター | references/hyperparameter-tuning.md | 学習率、バッチサイズ、スケジューラー |
| 評価 | references/evaluation-metrics.md | ベンチマーク、指標、モデルの比較 |
| デプロイ | references/deployment-optimization.md | モデルのマージ、量子化、サービング |
最小限の動作例 — Hugging Face PEFT による LoRA ファインチューニング
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer
import torch
# 1. Load base model and tokenizer
model_id = "meta-llama/Llama-3-8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
# 2. Configure LoRA adapter
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # rank — increase for more capacity, decrease to save memory
lora_alpha=32, # scaling factor; typically 2× rank
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # verify: should be ~0.1–1% of total params
# 3. Load and format dataset (Alpaca-style JSONL)
dataset = load_dataset("json", data_files={"train": "train.jsonl", "test": "test.jsonl"})
def format_prompt(example):
return {"text": f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}"}
dataset = dataset.map(format_prompt)
# 4. Training arguments
training_args = TrainingArguments(
output_dir="./checkpoints",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4, # effective batch size = 16
learning_rate=2e-4,
lr_scheduler_type="cosine",
warmup_ratio=0.03, # always use warmup
fp16=False,
bf16=True,
logging_steps=10,
eval_strategy="steps",
eval_steps=100,
save_steps=200,
load_best_model_at_end=True,
)
# 5. Train
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"],
dataset_text_field="text",
max_seq_length=2048,
)
trainer.train()
# 6. Save adapter weights only
model.save_pretrained("./lora-adapter")
tokenizer.save_pretrained("./lora-adapter")
QLoRA 版 — 4-bit 量子化を有効にするには、モデルの読み込み前に次の行を追加します。
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
デプロイ用にアダプターをベースモデルへマージします。
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
merged = PeftModel.from_pretrained(base, "./lora-adapter").merge_and_unload()
merged.save_pretrained("./merged-model")
制約事項
必ず行うこと
- トレーニング前にデータセットの品質を検証する
- 大規模モデル(>7B)にはパラメーター効率の高い手法を使用する
- トレーニング/検証損失曲線を監視する
- ハイパーパラメーターとトレーニング設定を記録する
- データセットとモデルのチェックポイントにバージョンを付ける
- 必ず学習率のウォームアップを含める
絶対に行わないこと
- データ品質の検証を省略する
- 小規模なデータセットで過学習させる — 正則化(ドロップアウト、重み減衰)と早期停止を使用する
- 互換性のないアダプター(ランク、ベースモデル、またはターゲットモジュールが一致しないもの)をマージする
- ホールドアウトセットによる評価とレイテンシのベンチマークを行わずにデプロイする
出力テンプレート
ファインチューニングを実装する際は、必ず次の内容を提示します。
- データセット準備スクリプト — 検証ロジック(スキーマチェック、トークン長のヒストグラム、重複排除)を含めます
- トレーニング設定 — コメント付きの
TrainingArgumentsとLoraConfigの全ブロック - 評価スクリプト — パープレキシティ、タスク固有の指標、レイテンシを報告します
- 簡潔な設計根拠 — このタスクで PEFT 手法、ランク、学習率を選んだ理由
Synergetic Solutions のプリンシパルコンサルタント、@jeffallan がメンテナンスしています。
コメント
Markdown 対応