llm-finetuning について
LLM を特定の分野やタスクに適応させる実務者向けのファインチューニングガイドスキルです。LoRA、QLoRA、データセット準備、学習設定、評価、Hugging Face PEFT エコシステムを使ったアダプターのデプロイを扱います。
主な機能
- 01LoRA と QLoRA の設定
- 02指示・応答データセットの準備
- 03PEFT の学習ワークフロー
- 04ハイパーパラメーター選択
- 05タスク別指標と人手による評価
- 06アダプターのマージとデプロイ
活用シーン
- 01分野固有のデータによるモデル適応
- 02指示追従データセットの準備
- 03ファインチューニング済みモデルの評価
- 04推論用 LoRA アダプターのデプロイ
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill llm-finetuningインストール後、Claude Code で/llm-finetuningを入力して読み込まれたか確認します。
詳細
LLM ファインチューニングのエキスパート
パラメーター効率の高い手法、データセットのキュレーション、学習の最適化を用いた大規模言語モデルのファインチューニングに、実践的な専門知識を持つディープラーニングのスペシャリストです。このスキルでは、LoRA、QLoRA、Hugging Face PEFT エコシステムを用いて、基盤モデルを特定のドメインやタスクに適応させるためのガイダンスを提供します。データセットの準備、ハイパーパラメーターの選定、評価戦略、アダプターのデプロイを網羅しています。
主要な原則
- ファインチューニングはモデルに言語を教えることではなく、タスクの形式とドメイン知識を教えることです。実行できる範囲で最も性能の高いベースモデルから始めましょう
- データセットは量より質がはるかに重要です。厳選された多様で高品質な例が1,000件あれば、ノイズの多い例が100,000件ある場合を上回ることもよくあります
- パラメーター効率の高いファインチューニング(LoRA/QLoRA)を使えば、メモリー要件を桁違いに削減しながら、フルファインチューニングに匹敵する性能を実現できます
- 評価には、パープレキシティだけでなく、タスク固有のメトリクスと人によるレビューを使用しましょう。パープレキシティが低いモデルでも、特定のユースケースでは出力が劣る場合があります
- 結果の再現と比較ができるよう、正確なハイパーパラメーター、データセットのバージョン、ベースモデルのチェックポイントを含め、すべての実験を記録しましょう
手法
- LoRA は適切なランク(r=8~64)、アルファ(通常はランクの2倍)、ターゲットモジュール(アテンションには q_proj、v_proj、より幅広く適応させる場合はすべての線形レイヤー)で設定します
- メモリーに制約がある環境では QLoRA を使用します。ベースモデルを4ビットの NormalFloat 量子化で読み込み、fp16/bf16 の LoRA アダプターを追加し、ページドオプティマイザーを使ってメモリーの急増に対応しながら学習します
- データセットは一貫したテンプレートを使った指示と応答のペアとして整形します。ペルソナやコンテキスト用の system フィールド、タスク用の instruction フィールド、期待する出力用の response フィールドを含めます
- PEFT ライブラリのワークフローを適用します。ベースモデルの読み込み、LoRA 設定の作成、get_peft_model() の呼び出し、Hugging Face Trainer またはカスタムループでの学習を行い、その後、アダプターを個別に保存・読み込みします
- 学習ハイパーパラメーターは慎重に設定します。学習率は1e-5~2e-4、コサインスケジュール、エポック数は1~5(過学習に注意)、ウォームアップ比率は0.03~0.1とし、勾配累積でより大きなバッチサイズを実現します
- 複数の指標で評価します。過学習の検出には検証損失、タスク固有のメトリクス(要約には ROUGE、QA には完全一致)、保留セットを使った体系的な人手評価を用います
よくあるパターン
- ドメイン適応:ドメイン固有のテキスト(法律、医療、金融)でファインチューニングし、その分野特有の用語、推論パターン、出力形式をモデルに学習させます
- 指示追従:多様な指示と応答のペアで学習し、複雑な複数段階の指示に従って構造化された出力を生成するモデルの能力を高めます
- アダプターのマージ:学習後、merge_and_unload() を使って LoRA アダプターの重みをベースモデルにマージし、PEFT のオーバーヘッドなしで推論できるようにします
- マルチタスク学習:複数のタスク(要約、分類、抽出)のデータセットを1回のファインチューニングで混合し、多用途のアダプターを作成します
避けるべき落とし穴
- 適切な確認とフィルタリングを行わずに、個人を特定できる情報、著作権で保護されたコンテンツ、有害な素材を含むデータでファインチューニングしないでください
- 小規模なデータセットでエポック数を増やしすぎないでください。言語モデルはすぐにデータを記憶し、汎化できずに反復的で定型的な出力を生成することで過学習が表れます
- 学習セットと評価セットの間のデータ汚染除去を省略しないでください。評価例が学習データに含まれていると、メトリクスが実際より高くなります
- 1組のハイパーパラメーターがすべてのベースモデルで機能すると考えないでください。アーキテクチャやサイズが異なれば、学習率、LoRA ランク、バッチサイズへの反応も異なります
コメント
Markdown 対応