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

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

1. ファインチューニングとは何ですか?

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

  • OpenAIの GPT-5 は指示に従う能力と有益なチャット振る舞いを改善するためにポストトレーニングされました。

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

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

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

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

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

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

  • LLMが見出しが企業にとって好意的か否かを予測できるようにすることを可能にします。

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

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

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

LoRA/QLoRAとは何ですか?

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

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

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

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

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

Unsloth Studioの紹介: モデルのトレーニングと実行のための新しいオープンソースのウェブUIです。これによりノーコードでモデルをファインチューニングでき、可観測性や自動データセット作成機能が利用可能になります。

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

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

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

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

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

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

  • Unsloth すべてのタイプのモデル: テキスト・トゥ・スピーチ, 埋め込み、GRPO、RL、 ビジョン、マルチモーダルなど。

circle-info

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

我々はQLoRAから始めることを推奨します。これはモデル訓練の中で最も手軽で効果的な方法の一つだからです。当社の 動的4ビットarrow-up-right 量子化では、QLoRAのLoRAに対する精度損失が大部分回復されています。

モデル名はHugging Face上のモデル名と一致させることで任意のモデルに変更できます。例: 'unsloth/llama-3.1-8b-unsloth-bnb-4bit'.

我々はまず 指示モデルから始めることを推奨します。これらは会話チャットテンプレート(ChatML、ShareGPTなど)を直接使ってファインチューニングでき、 ベースモデル (Alpaca、Vicunaなどを使用する)に比べて必要なデータ量が少なくて済みます。指示モデルとベースモデルの違いについて詳しくは こちら.

  • で確認してください。 モデル名の末尾が unsloth-bnb-4bit で終わるものはarrow-up-right Unslothの動的4ビット量子化を示します。

  • これらのモデルは標準のBitsAndBytesの4ビットモデルよりやや多くのVRAMを消費しますが、はるかに高い精度を提供します。 モデル名の末尾が単にbnb-4bit

  • で「unsloth」が付かない場合、それは標準のBitsAndBytes 4ビット量子化を指します。 接尾辞が ないモデル は元の16ビットまたは8ビット形式

です。これらは公式のモデル制作者によるオリジナルモデルですが、チャットテンプレートやトークナイザの修正など重要な修正を含めることがあるため、利用可能な場合は我々のバージョンを使用することを推奨します。

  • 切り替え可能な他の設定があります: max_seq_length = 2048

  • – コンテキスト長を制御します。Llama-3は8192をサポートしますが、テストには2048を推奨します。Unslothは4倍長いコンテキストでのファインチューニングを可能にします。 dtype = None – デフォルトはNoneです。新しいGPUでは または torch.float16

  • torch.bfloat16 を使用してください。 load_in_4bit = True

  • – 4ビット量子化を有効にし、ファインチューニング時のメモリ使用量を4分の1に削減します。これを無効にするとLoRAの16ビットファインチューニングが有効になります。16ビットLoRAを有効にするには load_in_16bit = Trueを設定します。フルファインチューニング(FFT)を有効にするには full_finetuning = True.

  • を設定してください。8ビットファインチューニングには load_in_8bit = True を設定します。 注意:

circle-info

同時に

True に設定できるトレーニング方法は1つだけです。, 一般的な誤りは、計算資源が大量に必要なフルファインチューニング(FFT)にいきなり飛びつくことです。まずはLoRAやQLoRAでテストを開始してください。そこでうまくいかないなら、FFTでもほぼ確実にうまくいきません。LoRAが失敗したからといってFFTが自動的に解決するとは考えないでください。, ビジョン, また、 テキスト・トゥ・スピーチ(TTS) 推論(GRPO)

、継続的な事前学習、テキスト補完など、他のトレーニング手法もUnslothで行うことができます。

モデル選びに関するガイドを参照してください:

ノートブックはこちらからアクセスできます。

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

ファインチューニングは既存の文書リポジトリから学習し、知識ベースを継続的に拡張できますが、単にデータを投げ込むだけでは最適な結果は得られません。最適な結果を得るためには、理想的には質問-回答ペアとしてよく構築されたデータセットをキュレーションすることが重要です。これにより学習、理解、応答精度が向上します。 ただし、常にそうとは限りません。例えばコード向けにLLMをファインチューニングする場合、コードデータをそのまま大量に投入するだけでも、構造化フォーマットがなくてもモデルの性能が大幅に向上することがあります。したがって、ユースケースによります。arrow-up-right データセット作成に関する詳細はこちら:

当社の多くのノートブック例では

Alpacaデータセット を利用していますが、ビジョンのような他のノートブックは回答に画像を含める必要があるなど別のデータセットを使用する場合があります。 4. トレーニングのハイパーパラメータを理解する

研究や実運用のベストプラクティスを使って適切な

🧠Hyperparameters Guidechevron-right

ハイパーパラメータ

を選ぶ方法を学び、それぞれがモデルの性能にどのように影響するかを理解してください。

ハイパーパラメータがトレーニングに与える影響の完全なガイドは次を参照してください:

5. インストールと要件 ノートブック Unslothは主に2つの方法で利用できます。無料のノートブックかローカルです。

Unslothノートブック テキスト・トゥ・スピーチ, 埋め込み、GRPO、RL、 ビジョン初心者にはガイド付きの手順で始めるのが最も簡単なので、事前作成された

をまず利用することをお勧めします。後でノートブックをエクスポートしてローカルで使用できます。

Unslothには Docker または pip install unsloth 、マルチモーダル、さまざまなユースケース向けのステップバイステップのノートブックがあります。 Windowsローカルインストール

Unslothはローカルにもインストールできます(

を使ったLinux、WSLなど)。使用するモデルによっては十分なVRAMとリソースが必要です。

UnslothのインストールにはWindowsまたはLinuxデバイスが必要です。インストール後はノートブックをコピー&ペーストしてローカル環境で使用できます。詳細は次を参照してください:

6. トレーニングと評価

すべての準備が整ったら、いよいよトレーニングです!何かうまくいかない場合は、ハイパーパラメータやデータセットなどをいつでも変更できることを忘れないでください。

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

  • トレーニング損失は数値として表示されます 我々は通常、長いトレーニングやより大きなバッチサイズが必要でない限り、デフォルト設定を維持することを推奨します。 per_device_train_batch_size = 2 – GPU利用率を改善するために増やすことができますが、パディングによる訓練の遅延に注意してください。代わりに

  • gradient_accumulation_steps を増やしてトレーニングを滑らかにしてください。

  • gradient_accumulation_steps = 4 – メモリ使用量を増やさずに大きなバッチサイズをシミュレートします。 max_steps = 60 – トレーニングを高速化します。フルランではこれを

  • num_train_epochs = 1 (過学習を避けるために1〜3エポックを推奨)に置き換えてください。 learning_rate = 2e-4, – より遅くしかしより精密なファインチューニングのために低めに設定します。例えば次の値を試してください:1e-4 5e-5.

、または

2e-5 評価.

評価を行うには、モデルと実際に会話して手動で評価し、自分の好みに合っているか確かめることができます。Unslothで評価を有効にすることもできますが、データセットのサイズによっては時間がかかる点に注意してください。評価を高速化するには、評価用データセットのサイズを減らすか、

evaluation_steps = 100

を設定してください。

テストのために、トレーニングデータの20%を取り分けてテストに使うこともできます。すでにすべてのトレーニングデータを使用している場合は手動で評価する必要があります。自動評価ツールを使用することもできますが、自動化ツールがあなたの評価基準と完全に一致しない可能性があることに留意してください。 7. モデルの実行とデプロイ トレーニングが完了したらモデルを実行しましょう!黄色で下線が引かれた部分を編集できます。実際、マルチターンのチャットボットを作成したので、過去の会話を見たかのようにモデルを呼び出すこともできます。例えば以下のように: 補足:Unsloth自体は2倍高速な推論 をネイティブで提供しているので、常に FastLanguageModel.for_inference(model)

を呼び出すことを忘れないでください。

モデルにより長い応答を出力させたい場合は、

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

max_new_tokens = 128

GGUF & llama.cppchevron-right

を256や1024のようなより大きな値に設定してください。結果が返ってくるまでの待ち時間も長くなる点に注意してください!

vLLMchevron-right

保存とデプロイ Ollama、vLLM、Open WebUIのような希望する推論エンジンにモデルを保存・デプロイするには、ベースモデルの上にLoRAアダプタを使用する必要があります。各フレームワーク向けに専用のガイドがあります:arrow-up-right 単一デバイス(ラップトップやMacなど)で推論を実行する場合は、llama.cppを使ってGGUF形式に変換し、Ollama、llama.cpp、LM Studioなどで使用してください:

エンタープライズやマルチユーザー推論でFP8、AWQをデプロイする場合はvLLMを使用してください: 我々はファインチューニングしたモデルを小さな100MB程度のファイルであるLoRAアダプタとして保存できます。モデルをアップロードしたい場合はHugging Faceにプッシュすることも可能です。Hugging Faceの トークン

を取得して、自分のトークンを追加するのを忘れないでください!

モデルを保存した後、再びUnslothを使ってモデル自体を実行できます!推論のために再度

FastLanguageModel を使用してください!arrow-up-right

8. 完了しました! こちらarrow-up-right または おめでとうございます — Unslothを使って言語モデルを正常にファインチューニングし、希望する推論エンジンにエクスポートしました!arrow-up-rightファインチューニングのコツやヒントについてもっと知りたい場合は、非常に有益な当社のブログを参照してください:

最終更新

役に立ちましたか?