🧬LLM ファインチューニングガイド

ファインチューニングの基本とベストプラクティスをすべて学びます。初心者向けです。

1. ファインチューニングとは?

ファインチューニング/トレーニング/ポストトレーニングは、モデルの挙動をカスタマイズし、知識を強化・注入し、特定のドメインやタスク向けに性能を最適化します。例えば:

  • OpenAIの GPT-5 は、指示に従う能力と役立つチャットの挙動を改善するためにポストトレーニングされました。

  • ポストトレーニングの標準的な手法は教師ありファインチューニング(SFT)と呼ばれます。他の手法には、好み最適化(DPO、ORPO)、蒸留、そして 強化学習 (RL) (GRPO、GSPO)があり、ここでは「エージェント」が環境と相互作用して意思決定を学習し、 フィードバック の形で 報酬 または ペナルティ.

を使えば、 Unslotharrow-up-right、Colab、Kaggle、またはローカルで3GBのVRAMしかなくても当社のを使えば無料でファインチューニングやRLを行えます。 ノートブックarrow-up-right事前学習済みモデルをデータセットでファインチューニングすることで、次のことが可能になります:

  • 知識の更新+学習:ドメイン固有の新しい情報を注入し学習させます。

  • 振る舞いのカスタマイズ:モデルの口調、パーソナリティ、応答スタイルを調整します。

  • タスクへの最適化:特定のユースケースに対する精度と関連性を向上させます。

ファインチューニングやRLの利用例:

  • LLMが見出しが企業にとって肯定的か否定的かを予測できるようにします。

  • 過去の顧客とのやり取りを利用して、より正確でカスタムな応答を提供できます。

  • 契約分析、判例調査、コンプライアンスのために法務文書でLLMをファインチューニングします。

ファインチューニングされたモデルは、特定のタスクをより効果的かつ効率的に行うために設計された専門化されたエージェントと考えることができます。 ファインチューニングはRAGのすべての機能を再現できますが、その逆はできません。

LoRA/QLoRAとは?

LLMにはモデルの重みがあります。Llama 70Bには700億の数値があります。すべての70Bの数値を変える代わりに、各重みに薄い行列AとBを追加してそれらを最適化します。これにより重みの約1%のみを最適化します。LoRAは元のモデルが16ビット非量子化のときの手法で、QLoRAは4ビットに量子化してメモリを75%節約します。

モデル重み(黄色)を最適化する代わりに、2つの薄い行列AとBを最適化します。

ファインチューニングに関する誤解:

ファインチューニングは新しい知識を学習しない、またはRAGの方がファインチューニングより優れていると聞いたかもしれません。それは 誤りです。ファインチューニングとRLで専門的なコーディングモデルを訓練できますが、RAGはモデルの重みを変更できず推論時にモデルが見るものを補強するだけです。FAQと誤解について詳しく読むことをお勧めします。 ここ:

🤔FAQ + ファインチューニングは私に向いているか?chevron-right

2. 適切なモデルと手法を選ぶ

初心者なら、Llama 3.1 (8B) のような小さめの指示型モデルから始めて実験するのが最良です。また、通常のファインチューニング、RL、QLoRA、LoRAのどれを使うか決める必要があります:

  • 強化学習 (RL) は、ラベル付きデータではなく環境と報酬関数を使って特定の挙動(例:ツール呼び出し)で卓越するモデルが必要なときに使われます。当社にはいくつかの ノートブック例がありますが、ほとんどのユースケースでは標準のSFTで十分です。

  • LoRA は、通常ベースモデルの重みを固定したまま小さな追加の低ランクアダプタ重みのみを(16ビット精度で)学習するパラメータ効率の良いトレーニング方法です。

  • QLoRA はLoRAと4ビット精度を組み合わせ、大規模モデルを最小リソースで扱えるようにします。

  • Unslothはフルファインチューニング(FFT)や事前学習もサポートしており、これらははるかに多くのリソースを必要としますが、通常FFTは不要です。正しく行えばLoRAはFFTに匹敵します。

  • Unsloth あらゆるタイプのモデル: テキスト読み上げ(TTS), 埋め込み、GRPO、RL、 vision、マルチモーダルなど。

circle-info

研究は、 同じ精度でのトレーニングとサービング が精度を保つのに役立つことを示しています。つまり、4ビットで提供したいなら4ビットで訓練し、その逆も同様です。

我々はQLoRAから始めることを推奨します。QLoRAは最もアクセスしやすく効果的な訓練方法の一つです。当社の 動的4ビットarrow-up-right 量子化の改善により、QLoRAの精度低下は現在では大部分が回復しています。

モデル名はHugging Face上のモデル名に合わせて好きなモデルに変更できます。例:'unsloth/llama-3.1-8b-unsloth-bnb-4bit'.

当社は Instructモデルから始めることを推奨します。Instructモデルは会話型チャットテンプレート(ChatML、ShareGPT等)を用いて直接ファインチューニングでき、 Baseモデル (Alpaca、Vicuna等を使用)と比べて一般的に少ないデータで済みます。ここで instructモデルとbaseモデルの違いについて詳しく学べます.

  • モデル名が unsloth-bnb-4bit で終わるものは Unslothの動的4ビットarrow-up-right 量子化を示します。これらのモデルは標準のBitsAndBytes 4ビットモデルよりやや多くのVRAMを消費しますが、はるかに高い精度を提供します。

  • モデル名が単に bnb-4bitで終わり、「unsloth」が付かない場合、それは標準のBitsAndBytes 4ビット量子化を指します。

  • サフィックスのない モデルは 元の 16ビットまたは8ビット形式です。これらは公式のモデル作成者による元のモデルですが、チャットテンプレートやトークナイザの修正など重要な修正を含めることがあるため、利用可能な場合は当社版の使用を推奨します。

切り替えできる他の設定もあります:

  • max_seq_length = 2048 – コンテキスト長を制御します。Llama-3は8192をサポートしますが、テストには2048を推奨します。Unslothは4倍の長さでのコンテキストファインチューニングを可能にします。

  • dtype = None – デフォルトはNoneです;使用する場合は torch.float16 または torch.bfloat16 は新しいGPU向けです。

  • load_in_4bit = True – 4ビット量子化を有効にし、ファインチューニング時のメモリ使用量を4倍削減します。無効にすると16ビットのLoRAファインチューニングが有効になります。load_in_16bit = Trueで16ビットLoRAも有効にできます。 load_in_16bit = True

  • フルファインチューニング(FFT)を有効にするには、 full_finetuning = Trueを設定します。8ビットファインチューニングには、 load_in_8bit = True.

  • 注意: のいずれか一つのトレーニング手法のみを True に設定できます。

circle-info

よくある間違いは、計算負荷の高いフルファインチューニング(FFT)にすぐ飛びつくことです。まずはLoRAやQLoRAでテストしてください。そこでうまくいかないならFFTでもほぼ無理です。そしてLoRAが失敗したからといってFFTが自動的に解決するとは限りません。

また次のようなことも行えます: テキスト読み上げ(TTS), 推論(GRPO), vision, 強化学習(RL) (GRPO、DPO)、 継続的事前学習、テキスト補完やその他のトレーニング手法もUnslothで行えます。

モデル選びに関するガイドを読む:

What Model Should I Use?chevron-right

個別のモデルチュートリアルについては:

🚀LLM Tutorials Directorychevron-right

3. あなたのデータセット

LLMにとってデータセットはモデルを訓練するために使用できるデータの集合です。訓練に有用であるためには、テキストデータはトークン化可能な形式である必要があります。

  • 通常、質問と回答の2列のデータセットを作成する必要があります。品質と量がファインチューニングの最終結果を大きく左右するため、この部分を正しく行うことが非常に重要です。

  • あなたは データを合成的に生成し ChatGPTやローカルLLMを使ってデータを構造化し(QAペアにする)ことができます。

  • 当社の新しいSynthetic Datasetノートブックを使えば、ドキュメント(PDF、動画など)を自動で解析し、QAペアを生成し、Llama 3.2のようなローカルモデルで自動クリーンを行うこともできます。 ノートブックはこちらからアクセスできます。arrow-up-right

  • ファインチューニングは既存の文書リポジトリから学習し知識ベースを継続的に拡張できますが、ただデータを投げ込むだけでは最適な結果は得られません。最適な結果を得るには、理想的には質問─回答ペアとしてよく構築されたデータセットをキュレートしてください。これにより学習、理解、応答の正確さが向上します。

  • しかし、常にそうとは限りません。例えばコード向けにLLMをファインチューニングする場合、コードデータをそのまままとめて投入するだけで、構造化フォーマットがなくても大幅な性能向上をもたらすことがあります。したがって、ユースケースによります。

データセット作成について詳しく読む:

📈データセットガイドchevron-right

ほとんどのノートブック例では、我々は Alpacaデータセットarrow-up-right を利用しますが、Visionのような他のノートブックでは回答に画像が必要な別のデータセットを使用する場合があります。

4. トレーニングのハイパーパラメータを理解する

適切な ハイパーパラメータ の選び方を研究や実地のベストプラクティスから学び、それぞれがモデルの性能にどう影響するかを理解してください。

ハイパーパラメータがトレーニングにどう影響するかについての完全なガイドは以下を参照してください:

🧠Hyperparameters Guidechevron-right

5. インストール+要件

Unslothは主に2つの方法で使えます:当社の無料ノートブックまたはローカル環境です。

Unslothノートブック

初心者には、まず当社の用意した ノートブック を利用することをお勧めします。ガイド付きの手順で始めるのが最も簡単です。後でノートブックをエクスポートしてローカルで使用できます。

Unslothには、 テキスト読み上げ(TTS), 埋め込み、GRPO、RL、 vision、マルチモーダル、さまざまなユースケース向けのステップバイステップのノートブックがあります。

ローカルインストール

Unslothは次を通じてローカルにインストールすることもできます: Docker または pip install unsloth (Linux、WSLまたは Windowsで)。また使用するモデルによっては十分なVRAMとリソースが必要になります。

UnslothのインストールにはWindowsまたはLinuxデバイスが必要です。インストール後、当社のノートブックをコピー&ペーストして自身のローカル環境で使用できます。詳しくは:

6. トレーニング+評価

すべてが整ったらトレーニングの時間です!何か問題があれば、ハイパーパラメータやデータセットを変更できることを忘れないでください。

learning_rate = 2e-4,

トレーニング損失は数値として表示されます

特に長いトレーニングや大きなバッチサイズが必要でない限り、デフォルト設定を維持することを一般的にお勧めします。

  • per_device_train_batch_size = 2 – GPU利用率を向上させるために増やしますが、パディングによる訓練遅延に注意してください。代わりに、より滑らかな訓練のために gradient_accumulation_steps を増やしてください。

  • gradient_accumulation_steps = 4 – メモリ使用量を増やさずにより大きなバッチサイズをシミュレートします。

  • max_steps = 60 – トレーニングを高速化します。完全な実行ではこれを置き換えてください: max_steps (過学習を避けるために1〜3エポックを推奨)。

  • learning_rate = 2e-4 – よりゆっくりだが精密なファインチューニングのために低くします。例えば以下の値を試してください: 1e-4, 5e-5、または 2e-5.

評価

評価を行うには、単にモデルとチャットして手動で評価し、自分の好みに合うかを確認する方法があります。またUnslothで評価を有効にできますが、データセットのサイズによっては時間がかかる点に注意してください。評価を高速化するには、評価用データセットのサイズを減らすか、 evaluation_steps = 100.

を設定できます。テスト用には訓練データの20%を取り分けて使用することもできます。既に全ての訓練データを使っている場合は手動評価が必要です。自動評価ツールを使用することもできますが、自動化ツールが必ずしもあなたの評価基準と完全に一致するとは限らない点に留意してください。

7. モデルの実行+デプロイ

訓練中に数値のログが表示されます。これは訓練損失で、モデルがどれだけデータから学んでいるかを示します。多くの場合、損失が0.5〜1.0付近であれば良い兆候ですが、データセットやタスクによります。損失が下がらない場合は設定を調整する必要があるかもしれません。損失が0に近づくと過学習の可能性があるので、検証も確認することが重要です。

11. 推論 / モデルの実行 トレーニングプロセスが完了したらモデルを実行してみましょう!黄色の下線部分を編集できます!実際、マルチターンチャットボットを作成したので、過去の会話を見たかのようにモデルを呼び出すこともできます: 補足:Unsloth 自体は 2倍高速な推論をネイティブに提供しています。常に FastLanguageModel.for_inference(model) を呼び出すのを忘れないでください。もしモデルにより長い応答を出させたい場合は、

保存+デプロイ

Ollama、vLLM、Open WebUIのような目的の推論エンジンにモデルを保存・デプロイするには、ベースモデルの上にLoRAアダプタを使用する必要があります。各フレームワーク向けの専用ガイドがあります:

🖥️推論 & デプロイchevron-right

単一デバイス(ノートパソコンやMacなど)で推論を実行する場合は、llama.cppを使ってGGUF形式に変換し、Ollama、llama.cpp、LM Studioなどで使用してください:

GGUF & llama.cppchevron-right

FP8、AWQのエンタープライズまたはマルチユーザー推論向けにLLMをデプロイする場合は、vLLMを使用してください:

vLLMchevron-right

ファインチューニングしたモデルを小さな100MBのファイルとしてLoRAアダプタで保存できるようになりました。モデルをアップロードしたい場合はHugging Faceハブにプッシュすることもできます!Hugging Faceの トークンarrow-up-right そしてトークンを追加してください!

モデルを保存したら、再びUnslothを使ってモデル自体を実行できます!使用するのは FastLanguageModel を再度呼び出して推論を行います!

8. 完了です!

Unslothを使って言語モデルのファインチューニングに成功し、希望する推論エンジンへエクスポートできました!

ファインチューニングのヒントやコツをもっと学びたい場合は、非常に有益で教育的な価値を提供する当社のブログをご覧ください: https://unsloth.ai/blog/arrow-up-right

ファインチューニングの助けが必要な場合は、当社のDiscordサーバーに参加することもできます ここarrow-up-right または がDeepSpeed内のTiled MLP向けのドキュメント更新を提供しました。arrow-up-right。お読みいただきありがとうございました。お役に立てれば幸いです!

最終更新

役に立ちましたか?