Unsloth : 大きなGPU上でLLMをファインチューニングします public
Unslothは、LoRAとQLoRAのファインチューニングで負荷の高い処理を書き換える、オープンソースのPythonライブラリです(コアのライセンスはApache 2.0、GitHubのスター数は76,000を超えています)。開発元によると、VRAM使用量を70%削減しつつ、最大2倍の速度を実現します。ドキュメントでは、80億パラメータのモデルを4ビットQLoRAでファインチューニングする場合、最低6 GBが必要とされているため、12 GBのグラフィックカードで十分です。その後、GGUF形式でエクスポートすれば、Ollamaで実行できます。
Unslothは、一般向けのグラフィックカード上でオープンモデルのファインチューニングを可能にします。他の環境と同じ手法ですが、計算カーネルを再実装することで、必要な時間とメモリを削減しています。70億または80億パラメータのモデルは、12 GBのカードで調整でき、その結果はGGUF形式でエクスポートしてOllamaで実行できます。しかし、すべてに先立つ根本的な問いが残ります。本当にファインチューニングが必要ですか?
#何かをインストールする前に答えを出しておくべき問い
はい、一般向けのGPUでも、70億または80億パラメータのモデルをファインチューニングできます。Unslothのドキュメントでは、4ビットQLoRAの最低要件はVRAM 5〜6 GBとされているため、12 GBのGPUなら、コンテキストやバッチ用の余裕を残して利用できます。UnslothはLoRAおよびQLoRAのファインチューニングで負荷の高い処理を書き直しており、開発元によると、最大2倍の速度と70%少ないVRAM使用量を実現します。ただし、この数値が当てはまるのは一部のノートブックのみです。学習結果はGGUF形式でエクスポートして、Ollamaで実行できます。ただし、インストールする前に考えるべき本質的な問いがあります。ファインチューニングで変わるのはモデルの振る舞い(口調、形式、文体)であり、知識を最新にするものではありません。モデルに自分のドキュメントの内容を把握させたいなら、まず文書検索の仕組みを構築してください。また、データセットの準備には学習そのものより時間がかかることも見込んでください。
ファインチューニングはモデルの行動を変えるもので、ドキュメント検索は回答の際に知っていることを変えるものです。これらを混同すると、数週間の時間を失います。
| あなたのニーズ | 正しい回答 |
|---|---|
| ドキュメントに基づいた回答 | RAGチェーン:ドキュメントは毎日変更される可能性があります |
| 一貫した出力形式 | ファインチューニング、または制約付き生成 |
| 自社らしい語り口、業務に合った文体 | Fine-tuning |
| 専門分野の語彙 | 十分な例を使用したファインチューニング |
| 頻繁に変化する情報 | 常に RAG を選ぶ:料金情報のために再学習する意味はありません |
| より短いまたはより長い応答 | まずはシステムプロンプトを使う。このためにモデルを学習させないこと。 |
#Unslothが実際に変更する点
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 30日間返金対応
この手法は新しいものではありません。モデルの重みを凍結し、各重みに追加した細い行列だけを学習します。Unsloth のガイドによると、学習するのはパラメータの約 1%です。LoRA は元のモデルを 16 ビットで保持し、QLoRA はそれを 4 ビットに量子化することで、メモリ使用量を 75%削減します。これは標準的な手法であり、Unsloth 独自のものではありません。
このライブラリが提供するものは、計算カーネルを重い処理段階用に書き直した実装です。プロジェクトは3つの形態で存在します。ネイティブアプリケーションであるUnsloth Desktop、WebインターフェースであるUnsloth Studio、そして本記事で取り上げているコード駆動型のUnsloth Coreです。ライセンスは二重で、コア部分はApache 2.0、Studioインターフェースなどの一部のオプションコンポーネントはAGPL-3.0です。言語モデル、拡散モデル、音声合成モデル、埋め込みモデルの学習を、精度の劣化なしに2倍速く、VRAM使用量を70%削減できると主張しています。エキスパート混合アーキテクチャ(MoE)では、公開されている性能向上はさらに大きく、一部の最新モデルでは最大12倍速く、VRAMを35%以上節約できるとされています。ただし、これらはすべてベンダーが提示する数値であり、最良のケースを示しています。README自体も、「2倍、70%」という数値は特定のノートブックにのみ適用されることを示しています。
| Notebook | 公称速度 | 公表されたVRAM |
|---|---|---|
| Llama 3.1 (8B) Alpaca | 2倍速 | 70%削減 |
| gpt-oss (20B) | 2倍速 | 70%削減 |
| Qwen3.5 (4B)、ビジョン | 1.5倍速 | 60%の削減 |
| Gemma 4 (E2B)、ビジョン | 1.5倍速 | 50%の削減 |
| Orpheus-TTS (3B) | 1.5倍速 | 50%の削減 |
| embeddinggemma (300M) | 2倍速 | 20%削減 |
#どのモデルにどのカードを使うか
| モデルサイズ | QLoRA (4ビット) | LoRA (16ビット) | 一般向けGPUでの解釈 |
|---|---|---|---|
| 30億 | 3,5 | 8 | QLoRA なら、比較的新しい GPU であればどれでも快適に動作 |
| 70億 | 5 | 19 | 8GBでのQLoRA;16ビットLoRAは24GBのGPUが必要です |
| 8B | 6 | 22 | 8 GB以上でQLoRAが可能。12 GBなら余裕があります |
| 140億 | 8,5 | 33 | 12GBでのQLoRA;24GBのGPUでは16ビットLoRAは実現できません |
| 270億 | 22 | 64 | 24 GBでQLoRA、余裕なし;16ビットLoRAは単一カードでは不可能 |
| 320億 | 26 | 76 | QLoRAでも24 GBを超えます |
| 700 億 | 41 | 164 | 一般向けグラフィックカード1枚では対応できない |
ドキュメントでは、これらの数値は必要量の最低限を示すものであり、モデルによってはさらに多く必要になると明記しています。また、メモリがいっぱいになるよくある原因としてバッチサイズが大きすぎることを挙げ、1、2、または3に下げるよう示しています。最初の試行では、コンテキスト長を2048にすることを推奨しています。
| プラットフォーム | ドキュメントに記載されている内容 |
|---|---|
| NVIDIA、Unsloth Core で動作 | Linux と Windows。Compute Capability は最低7.0(V100、T4、RTX 20 シリーズ以降、A100、H100)で、Blackwell と DGX Spark も対象です。GTX 1070 と1080でも動作しますが、速度は遅くなります。 |
| AMDおよびIntel | 専用のガイドがあります。これらのGPUでは、CoreでもStudioでも学習が動作します。 |
| Mac | Unsloth Studio はトレーニング、MLX、および GGUF の推論をサポートしています(macOS 12 以降)。Core に関しては、Apple シリコン(MLX)のサポートは「準備中」と表示されています。 |
| GPUなし | StudioはGGUFモデルによるチャットやデータの準備に使用できますが、トレーニングには対応していません。 |
| 複数のGPU | AccelerateおよびDeepSpeed (FSDP、DDP) でサポートされ、手動設定が必要です。device_map="balanced" は、モデルが大きすぎる場合、複数のGPUに分散して配置します。 |
#本当の作業はデータセット作り
ファインチューニングはライブラリの問題で失敗することはありません。データの問題で失敗します。
- フォーマット
- 多くの場合、質問と回答の2列からなるデータセットを、モデルが想定する会話形式に合わせて用意します。このガイドでは、Instructモデルから始めることを推奨しています。会話テンプレート(ChatML、ShareGPT)をそのまま利用でき、ベースモデルよりも少ないデータで済むためです。量よりも一貫性が重要です。
- 量
- Unslothのガイドでは、最低でも100行、より良い結果を得るには1,000行を超える量を推奨しています。トーンや形式は少数の例でも変えられますが、実際の業務に即した振る舞いを身につけさせるには、互いに一貫した例がさらに多く必要です。
- 品質
- モデルは提示された内容を模倣します。これには誤りも含まれます。データに存在する系統的な欠陥は、モデルにも系統的な欠陥として反映されます。
- 検証用データセット
- 学習時にモデルに一切見せない例です。これらがなければ、学習と単なる丸暗記を区別することはできません。
- コードなし
- Unsloth Studio は、PDF、CSV、または DOCX を視覚的なフローでデータセットに変換する Data Recipes を提供しています。完全な構築を開始する前に、事前にプレビューが可能です。
#モデルアダプタから利用可能なモデルへの変換
手順は3段階です。4ビットのモデルを読み込み、公式ノートブックのいずれかを使って学習させ、その後エクスポートします。最初のコードブロックではモデルを読み込み、LoRAアダプターを追加します。実際の学習にはUnslothのノートブックのいずれかを使います。このガイドでは、そのノートブックをローカル環境にコピーすることを勧めています。
名前の接尾辞が重要です。ガイドによると、名前がunsloth-bnb-4bitで終わるモデルは、Unslothの動的4ビット量子化版です。標準のBitsAndBytes量子化よりもVRAMを少し多く消費しますが、精度は大幅に高くなります。名前が単にbnb-4bitで終わる場合は、標準版を指します。また、ガイドでは、学習とモデルの提供に同じ精度を使うことが望ましいとしています。つまり、4ビットで提供するなら、学習も4ビットで行うということです。
| パラメータ | ガイドでの設定値 | 知っておくべきこと |
|---|---|---|
| per_device_train_batch_size | 2 | より大きなモデルはGPUの使用効率が高く、訓練速度はフィルムの詰まりによって遅くなるため、gradient_accumulation_steps を優先してください |
| gradient_accumulation_steps | 4 | 追加のメモリを必要とせず、より大きなバッチをシミュレート |
| max_steps | 60 | 短時間の試行用の値。本格的な学習では、num_train_epochsに置き換え、値を1〜3に設定する |
| learning_rate | 2e-4 | 値を低くすると、調整はゆっくり進み、より精密になります。1e-4、5e-5、2e-5を試す |
| max_seq_length | 2048 | テストに推奨される長さです。「余裕を持たせるため」に値を大きくすると、データに存在しない長さのシーケンス用にメモリを確保してしまいます。まず、実際のサンプルの長さを測定してください。 |
- 01トレーニング結果として、Unslothの例では約100MBのLoRAアダプタが生成されます。これは完全なモデルではありません。
- 02評価検証用データセットを使い、元のモデルとも比較して評価します。「より良い」ことは、思い込むのではなく実証する必要があります。ガイドでは、自動評価ツールがご自身の評価基準を適切に反映しない場合があると指摘しています。
- 03統合するか、別に保管するかアダプタは別ファイルのまま保持して差し替えることも、重みに統合することもできます。統合する場合は、model.save_pretrained_mergedでsave_method="merged_16bit"を指定します。
- 04GGUFにエクスポートし、量子化を行うmodel.save_pretrained_ggufは、q4_k_m、q8_0、f16から選んだ形式でファイルを作成します。これにより、作成したファイルをOllamaやllama.cppで、一般的なハードウェア上で実行できるようになります。
#よくある落とし穴
- 気づかないままベースモデルから始める
- このガイドではInstructモデルを推奨しています。会話テンプレートに対応しており、必要なデータも少なくて済むためです。ベースモデルには異なる形式(Alpaca、Vicuna)と、より多くの例が必要です。
- 会話テンプレートを忘れる
- モデルが期待するフォーマットとは異なるフォーマットで例を提供すると、技術的には成功したが実用的には無意味なトレーニングになります。
- トレーニングデータ上で評価する
- この間違いを犯すと、華々しい結果を発表しながら、実際には期待外れのモデルを提供することになります。
- 文書検索の代わりになると思い込む
- モデルに学習させた内容は、手元の情報が変わった時点で古くなります。また、モデルは出典を示しません。変化する事実を扱う場合は、ドキュメント検索のほうが確実です。
- 学習例のデータクリーニングを軽視する
- データセット内のほぼ同一の重複データは、学習をその特定のケースに偏らせますが、追跡している指標にはその兆候が現れません。
- 複数の設定を一度に変更
- 学習率、アダプタのランク、シーケンス長を同じ実験で変更すると、観察された変化がどのパラメータによって引き起こされたかを判断できません。
#具体的なユースケース
- 一貫したトーンのカスタマーサポート
- 実際のやり取りで調整したモデルは、各プロンプトで文体の指示を繰り返さなくても、ブランドらしい語り口で回答します。
- 厳密なフォーマットでの抽出
- 入力と出力の例を使ってファインチューニングすると、プロンプトだけの場合よりも確実に出力形式を固定できます。結果を後続のシステムに渡す前に役立ちます。
これらのケースに共通するのは、どれも測定できるという点です。学習を始める前に、漠然とした改善の印象ではなく、例えば「検証用データセットの出力の少なくとも95%がJSON形式に従っている」のように、検証可能な一文で成功基準を定めてください。結果が費やした時間に見合うかを判断するのは、直感ではなく、この基準です。
- 出典:Unslothの公式リポジトリ(機能、ハードウェア、ダブルライセンス)
- 出典:前提条件およびモデルサイズごとの最小VRAM要件
- 出典:Unslothのファインチューニングガイド
- 出典:GGUFのエクスポートおよびテンプレートの問題
- 出典:MoE モデルのパフォーマンスデータ
#カードの価格だけではわからない実際のコスト
グラフィックカードは、必要な費用や作業の一項目にすぎません。一貫性のあるサンプルを収集して整え、モデルが一度も目にしない評価用データセットを作り、各バージョンを元のモデルと比較する作業は、学習そのものよりも負担が大きいことがよくあります。Unslothのガイドでは、その学習を60ステップの試行で例示しています。
そのため、Unslothで学習がどれほど速くなっても、プロジェクトの所要時間は期待するほど短くなりません。技術的なボトルネックは解消しても、データに関する作業はなくならないからです。
#FAQ
Unslothは無料ですか?+
70億パラメータのモデルを調整するための適切なGPUはどれですか?+
例は何件必要ですか?+
得られたモデルはOllamaで動作しますか?+
AMD、Mac、またはGPUなしで動作しますか?+
ファインチューニングをすると、モデルは私のデータに精通するようになりますか?+
推奨ハードウェア: RTX 5070 Ti 16 GB — 16 GB の NVIDIA グラフィックカード。7〜8B モデルを QLoRA でファインチューニングするのに十分です。 すべてのAIハードウェア →
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。