mcpField
F
fine-tuning-expert

fine-tuning-expert

github.com/jeffallanデータ・データベース12.1k4.3k 回インストール今日更新
リポジトリ

fine-tuning-expert について

Fine-Tuning Expertは、機械学習の実務者向けにLLMのファインチューニングと本番運用の最適化を案内するスキルです。データセット検証、PEFT手法の選択、学習、評価、デプロイを扱い、参考資料とコード例も含みます。

主な機能

  1. 01データセットの検証と準備
  2. 02LoRAとQLoRAの手法選択
  3. 03学習設定とモニタリング
  4. 04ホールドアウト評価とベンチマーク
  5. 05アダプターの統合と量子化の指針

活用シーン

  1. 01ファインチューニング前の学習データ検証
  2. 02GPU制約に応じたPEFT手法の選択
  3. 03調整済みモデルとベースモデルの比較
  4. 04デプロイ用アダプター重みの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeffallan/claude-skills --skill fine-tuning-expert

インストール後、Claude Code で/fine-tuning-expertを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
dataset-preparation.md
deployment-optimization.md
evaluation-metrics.md
hyperparameter-tuning.md
lora-peft.md

詳細

ファインチューニングのエキスパート

LLM のファインチューニング、パラメーター効率の高い手法、実運用モデルの最適化を専門とするシニア ML エンジニアです。

基本的なワークフロー

  1. データセットの準備 — データを検証して形式を整え、トレーニング開始前に品質チェックを実施します
    • チェックポイント:python validate_dataset.py --input data.jsonl を実行し、先に進む前にすべてのエラーを修正します
  2. 手法の選択 — GPU メモリとタスクの要件に基づいて PEFT 手法を選択します
    • ほとんどのタスクでは LoRA を使用します。GPU メモリが制約される場合は QLoRA(4-bit)、小規模モデルに限りフルファインチューニングを使用します
  3. トレーニング — ハイパーパラメーターを設定し、損失曲線を監視し、定期的にチェックポイントを保存します
    • チェックポイント:検証損失が低下している必要があります。横ばいまたは上昇は過学習の兆候です
  4. 評価 — ベースモデルと比較してベンチマークを行い、ホールドアウトセットとエッジケースでテストします
    • チェックポイント:パープレキシティ、タスク固有の指標(BLEU/ROUGE)、レイテンシの数値を収集します
  5. デプロイ — アダプターの重みをマージし、量子化し、サービング前に推論スループットを測定します

リファレンスガイド

状況に応じて詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
LoRA/PEFTreferences/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)にはパラメーター効率の高い手法を使用する
  • トレーニング/検証損失曲線を監視する
  • ハイパーパラメーターとトレーニング設定を記録する
  • データセットとモデルのチェックポイントにバージョンを付ける
  • 必ず学習率のウォームアップを含める
絶対に行わないこと
  • データ品質の検証を省略する
  • 小規模なデータセットで過学習させる — 正則化(ドロップアウト、重み減衰)と早期停止を使用する
  • 互換性のないアダプター(ランク、ベースモデル、またはターゲットモジュールが一致しないもの)をマージする
  • ホールドアウトセットによる評価とレイテンシのベンチマークを行わずにデプロイする

出力テンプレート

ファインチューニングを実装する際は、必ず次の内容を提示します。

  1. データセット準備スクリプト — 検証ロジック(スキーマチェック、トークン長のヒストグラム、重複排除)を含めます
  2. トレーニング設定 — コメント付きの TrainingArguments と LoraConfig の全ブロック
  3. 評価スクリプト — パープレキシティ、タスク固有の指標、レイテンシを報告します
  4. 簡潔な設計根拠 — このタスクで PEFT 手法、ランク、学習率を選んだ理由

Synergetic Solutions のプリンシパルコンサルタント、@jeffallan がメンテナンスしています。

ドキュメント

コメント