# チュートリアル：Llama-3 のファインチューニングと Ollama での利用方法

このチュートリアルの最後までに、あなたはカスタムチャットボットを作成します、 **Llama-3をファインチューニングする** と一緒に [**Unsloth**](https://github.com/unslothai/unsloth) で無料で。ローカルでは [**Ollama**](https://github.com/ollama/ollama) を介してPC上で実行することも、 [**Google Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3_\(8B\)-Ollama.ipynb)の無料GPUインスタンスで実行することもできます。以下のように対話的にチャットボットとやり取りできます：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-cf9aed2029e54afbb65889b480134e6d5e1cf3a7%2FAssistant%20example.png?alt=media" alt=""><figcaption></figcaption></figure>

**Unsloth** はファインチューニングを非常に簡単にし、ファインチューニング済みモデルを自動的にエクスポートできるようにします、 **Ollama** 統合された自動 `モデルファイル` 作成！もし助けが必要なら、私たちのDiscordサーバーに参加できます： <https://discord.com/invite/unsloth>

{% hint style="warning" %}
**コードをコピーまたは保存したい場合は、すべて私たちの** [**Ollama Colabノートブック**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3_\(8B\)-Ollama.ipynb)**にあります。そこですぐに使用するか、ローカル環境向けに調整できます：** [**https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3\_(8B)-Ollama.ipynb**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3_\(8B\)-Ollama.ipynb)
{% endhint %}

## 1. Unslothとは？

[Unsloth](https://github.com/unslothai/unsloth) はLlama-3、Mistral、Phi-3、Gemmaなどの大規模言語モデルのファインチューニングを2倍速く、メモリ使用量を70％削減し、精度の劣化なしに行えます！このチュートリアルでは無料GPUを提供するGoogle Colabを使用します。以下から私たちの無料ノートブックにアクセスできます：

* [Ollama Llama-3 Alpaca](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3_\(8B\)-Ollama.ipynb) （このチュートブックで使用するノートブック）
* [CSV/Excel Ollamaガイド](https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing)

#### ***Googleアカウントでログインする必要もあります！***

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-bca149bda83c2192982b136cfeb096999c469a2e%2FColab%20Screen.png?alt=media" alt=""><figcaption></figcaption></figure>

## 2. Ollamaとは？

[Ollama ](https://github.com/ollama/ollama)は、自分のコンピュータから言語モデルを迅速かつ簡単に実行できるようにします！バックグラウンドでLlama-3のような言語モデルを実行できるプログラムを静かに起動します。言語モデルに質問したくなったら、単にOllamaにリクエストを送信すれば、すぐに結果を返してくれます！私たちは推論エンジンとしてOllamaを使用します！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-fd25844766001d93ed0949fc8f57957f49b1e6e5%2FOllama.png?alt=media" alt=""><figcaption></figcaption></figure>

## 3. Unslothのインストール

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-4d1b1778f3c8bde62a40130d7b4395b8bb1ce90f%2FColab%20Options.png?alt=media" alt=""><figcaption></figcaption></figure>

Colabノートブックを使ったことがない場合、ノートブック自体の簡単な解説：

1. **各「セル」の再生ボタン。** これをクリックするとそのセルのコードが実行されます。セルを飛ばしてはいけませんし、すべてのセルを時系列順に実行する必要があります。エラーが出た場合は、前に実行していなかったセルを再度実行してください。再生ボタンをクリックしたくない場合はCTRL + ENTERを押すオプションもあります。
2. **上部ツールバーのランタイムボタン。** このボタンを使って「すべて実行」を選ぶと、ノートブック全体を一度に実行できます。カスタマイズ手順をすべてスキップするので、最初の試行として良い場合があります。
3. **接続 / 再接続 T4 ボタン。** より高度なシステム統計を見るにはここをクリックできます。

最初のインストールセルは以下のようになっています：角括弧 \[ ] 内の再生ボタンをクリックするのを忘れないでください。私たちはオープンソースのGithubパッケージを取得し、いくつかの他のパッケージをインストールします。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-3ae88d2cf9ba1c59b13d701864750ac311a60426%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 4. ファインチューニングするモデルの選択

ではファインチューニングするモデルを選びましょう！デフォルトではMeta / FacebookのLlama-3を使用します。これはなんと15兆トークンで学習されています。トークンは英語の単語1つのようなものだと仮定してください。それはおおよそ35万冊分の分厚い百科事典に相当します！他の人気モデルにはMistral、GPT-4出力で学習したPhi-3、GoogleのGemma（13兆トークン）などがあります。

Unslothはこれらのモデルやその他多数をサポートします！実際、Hugging Faceのモデルハブからモデル名を入力するだけで動作するか確認できます！動作しない場合はエラーになります。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-4fb10a1ce3e457310c11f74ca5b6347ad556fab0%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

切り替えできる他の設定が3つあります：

1. ```
   max_seq_length = 2048
   ```

   これはモデルのコンテキスト長を決定します。例えばGeminiは100万を超えるコンテキスト長を持ち、Llama-3は8192のコンテキスト長です。任意の数値を選べますが、テスト目的では2048を推奨します。Unslothは非常に長いコンテキストのファインチューニングもサポートしており、私たちはベストより4倍長いコンテキスト長を提供できることを示しています。
2. ```
   dtype = None
   ```

   これをNoneにしておいてください。新しいGPUではtorch.float16やtorch.bfloat16を選択できます。
3. ```
   load_in_4bit = True
   ```

   私たちは4ビット量子化でファインチューニングを行います。これによりメモリ使用量が4倍削減され、実際に無料の16GBメモリGPUでファインチューニングが可能になります。4ビット量子化は重みを限られた数値の集合に変換してメモリ使用を減らすものです。その欠点は精度が1〜2％低下することです。もしH100のような大きなGPUを使うなら、このわずかな精度向上のためにFalseに設定してください。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-a44ac84348a2c5973dd542866c4c6727a00b3744%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

セルを実行すると、Unslothのバージョン、使用しているモデル、GPUのメモリ量、その他の統計の出力がいくつか表示されます。今は無視して構いません。

## 5. ファインチューニングのパラメータ

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-495edc79c5353f0f47c1eea58df045631bfef1e0%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

今ファインチューニングをカスタマイズするには上の数値を編集できますが、私たちはすでにかなり妥当な数値を選んでいるので無視してもかまいません。

目的はこれらの数値を変更して精度を上げることですが、同時に **過学習に対抗すること**。過学習とは、言語モデルがデータセットを丸暗記してしまい、新しい質問に答えられなくなることです。最終モデルには見たことのない質問にも答えられることを望み、単なる暗記は避けたいです。

1. ```
   r = 16, # 0 より大きい任意の数を選んでください！推奨：8, 16, 32, 64, 128
   ```

   ファインチューニングプロセスのランク。大きい数はより多くのメモリを使い遅くなりますが、難しいタスクで精度を上げることができます。通常は高速なファインチューニングのために8などを推奨し、最大128までです。大きすぎると過学習を引き起こし、モデル品質を損なう可能性があります。
2. ```
   target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                     "gate_proj", "up_proj", "down_proj",],
   ```

   ファインチューニングするすべてのモジュールを選択しています。メモリ使用量を減らしトレーニングを速くするために一部を削除することもできますが、これは強くは推奨しません。すべてのモジュールでトレーニングしてください！
3. ```
   lora_alpha = 16,
   ```

   ファインチューニングのスケーリング係数。大きい数はデータセットについてより多く学習しますが、過学習を促すことがあります。通常はこの値をランクと等しくするか、 `r`、またはその倍にすることを推奨します。
4. ```notebook-python
   lora_dropout = 0, # どれでもサポートしますが = 0 が最適化されています
   ```

   高速なトレーニングのためにこれを0のままにしてください！過学習を減らせますが、その効果はそれほど大きくありません。
5. ```
   bias = "none",    # どれでもサポートしますが = "none" が最適化されています
   ```

   これを0のままにしておくと、より高速で過学習の少ないトレーニングになります！
6. ```
   use_gradient_checkpointing = "unsloth", # 非常に長いコンテキスト用は True または "unsloth"
   ```

   オプションには `True`, `False` および `"unsloth"`があります。推奨は `"unsloth"` なぜならメモリ使用量をさらに30％削減し、非常に長いコンテキストのファインチューニングをサポートするからです。詳細は以下を参照してください： <https://unsloth.ai/blog/long-context> で詳細を確認できます。
7. ```
   random_state = 3407,
   ```

   決定論的な実行を決める数値です。トレーニングやファインチューニングには乱数が必要なので、この数値を設定すると実験の再現性が得られます。
8. ```
   use_rslora = False,  # ランク安定化されたLoRAをサポートしています
   ```

   高度な機能で、次の値を自動的に設定します： `lora_alpha = 16` 必要ならこれを使うことができます！
9. ```
   loftq_config = None, # と LoftQ
   ```

   LoRA行列を重みの上位r特異ベクトルで初期化する高度な機能です。精度を多少改善することがありますが、開始時にメモリ使用量が爆発的に増える可能性があります。

## 6. Alpacaデータセット

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-1d66d8714e44d90513dd87b9356eec67886ab3f7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

これからGPT-4自身を呼び出して作成されたAlpacaデータセットを使用します。これは52,000件の指示と出力のリストで、Llama-1がリリースされたときに非常に人気があり、ベースLLMのファインチューニングをChatGPTと競合させました。

AlpacaのGPT4バージョンのデータセットにはここからアクセスできます： <https://huggingface.co/datasets/vicgalle/alpaca-gpt4>。古い最初のバージョンのデータセットはここにあります： <https://github.com/tatsu-lab/stanford_alpaca>。以下にデータセットのいくつかの例を示します：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-0dde50e386e7b245d3e8a57e10a4a81755b3769a%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

各行には指示、入力、出力の3つの列があることがわかります。実際には各行を以下のように1つの大きなプロンプトに結合します。これを使って言語モデルをファインチューニングし、これによりChatGPTに非常に似たものになります。このプロセスを私たちは **教師あり指示ファインチューニング**.

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-8b3663c5d80adcb935ff77661500f08e13c9af2d%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## と呼びます。

7\. ファインチューニングのための複数列

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-d90162c2685ced871f4151369aadcaee40a9c54f%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

しかし大きな問題は、ChatGPTスタイルのアシスタントの場合、1つの指示/1つのプロンプトしか許可されず、複数列/複数入力を許可しないことです。例えばChatGPTでは1つのプロンプトを送信し、複数のプロンプトを送信するわけではありません。

これは本質的に、ファインチューニングが実際に機能するために複数の列を1つの大きなプロンプトに「結合」しなければならないことを意味します！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-a2df04874bfc879182cb66c789341d49700227ea%2FMerge.png?alt=media" alt=""><figcaption></figcaption></figure>

例えば非常に有名なTitanicデータセットには多くの列があります。あなたの仕事は年齢、乗客クラス、運賃などに基づいて乗客が生存したか死亡したかを予測することでした。これを単にChatGPTに渡すことはできず、むしろこの情報を1つの大きなプロンプトに「結合」する必要があります。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-b3da2b36afe37469cd3962f37186e758871864a5%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

他のファインチューニングライブラリでは、すべての列を1つのプロンプトに手動でマージしてデータセットを準備する必要があります。Unslothでは、単に `to_sharegpt` という関数を提供しており、これが一度にこれを行います！

Titanicのファインチューニングノートブックにアクセスするか、CSVまたはExcelファイルをアップロードしたい場合は、ここに行ってください： <https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing>

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-62b94dc44f2e343020d31de575f52eb22be4b0fc%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

ここはより複雑ですが、多くのカスタマイズを許可するので、いくつかのポイントがあります：

* すべての列名を波括弧で囲む必要があります `{}`。これらは実際のCSV / Excelファイル内の列名です。
* オプションのテキスト要素はで囲む必要があります `[[]]`。例えば列 "input" が空の場合、マージ関数はそのテキストを表示せずスキップします。これは欠損値のあるデータセットに便利です。
* 出力またはターゲット/予測列をで選択してください `output_column_name`。Alpacaデータセットでは、これは `output`.

になります。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-e6228cf6e5c0bb4e4b45e6f3e045910d567c33d2%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

例えばTitanicデータセットでは、各列/テキスト片がオプションになるように以下のような大きな結合プロンプト形式を作成できます。

| 例えば、データセットが多くの欠損データを含む次のような形だと仮定します： | 出港地 | 年齢   |
| ------------------------------------ | --- | ---- |
| 運賃                                   | 23  |      |
|                                      | 18  | 7.25 |

S

1. すると、結果として次のようにしたくはありません： **乗客はSから出港しました。彼らの年齢は23です。彼らの運賃は**.
2. 空 **乗客はSから出港しました。彼らの年齢は23です。彼らの運賃は**乗客は

から出港しました。彼らの年齢は18です。彼らの運賃は$7.25です。 `[[]]`代わりに、列をオプションとしてで囲むことにより、これらの情報を完全に除外できます。

1. \[\[乗客はSから出港しました。]] \[\[彼らの年齢は23です。]] \[\[彼らの運賃は **乗客はSから出港しました。彼らの年齢は23です。彼らの運賃は**.]]
2. \[\[乗客は **乗客はSから出港しました。彼らの年齢は23です。彼らの運賃は**から出港しました。]] \[\[彼らの年齢は18です。]] \[\[彼らの運賃は$7.25です。]]

は次のようになります：

1. 乗客はSから出港しました。彼らの年齢は23です。
2. 彼らの年齢は18です。彼らの運賃は$7.25です。

## 8. マルチターン会話

気付かなかったかもしれませんが、Alpacaデータセットはシングルターンである一方、ChatGPTは対話的で複数ターンで話すことができます。例えば左側が私たちが望むもので、右側はAlpacaデータセットが提供する単一の会話です。ファインチューニングされた言語モデルにはChatGPTのようにマルチターン会話を行う方法を学ばせたいです。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-2a65cd74ddd03a6bcbbc9827d9d034e4879a8e6a%2Fdiff.png?alt=media" alt=""><figcaption></figcaption></figure>

そこで私たちは `conversation_extension` パラメータを導入しました。これは基本的に単一ターンデータセットの任意の行をいくつか選んでそれらを1つの会話に結合します！例えば3に設定すると、ランダムに3行を選んで1つに結合します。長く設定しすぎるとトレーニングが遅くなりますが、チャットボットと最終ファインチューニングを大幅に改善する可能性があります！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-2b1b3494b260f1102942d86143a885225c6a06f2%2Fcombine.png?alt=media" alt=""><figcaption></figcaption></figure>

そして `output_column_name` を予測 / 出力列に設定します。Alpacaデータセットではoutput列になります。

次に `standardize_sharegpt` 関数を使って、データセットをファインチューニングに適した正しい形式に整えます！必ずこれを呼んでください！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-7bf83bf802191bda9e417bbe45afa181e7f24f38%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 9. カスタマイズ可能なチャットテンプレート

これでファインチューニング自体のチャットテンプレートを指定できます。有名なAlpacaフォーマットは以下の通りです：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-59737e6dcb09fed15487d5a57c69f07cb40bb8e7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

しかし、ChatGPTスタイルのファインチューニングは1つのプロンプトのみを要求するためこれは良くないという話をしましたね？Unslothでデータセットのすべての列を1つにうまくマージしたので、実質的に1つの入力列（指示）と1つの出力で以下のスタイルのチャットテンプレートを作成できます：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-d54582ae98c396d51bfb85628b46c54f2517d030%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

ただし、必ず `{INPUT}` フィールドを指示用に、 `{OUTPUT}` フィールドをモデルの出力用に置く必要があります。実際にはオプションで `{SYSTEM}` フィールドも許可しており、これはChatGPTのようにシステムプロンプトをカスタマイズするのに便利です。例えば以下はカスタマイズできるいくつかのクールな例です：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-cc455dc380d3d44ef136e485754964159dc773d8%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

OpenAIモデルで使用されるChatMLフォーマットの場合：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-15bfca9cfadf10d54b4d3f66e3050044317d62c5%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

またはLlama-3のテンプレート自体を使用することもできます（これはLlama-3のinstructバージョンを使うことでのみ機能します）：実際にオプションで `{SYSTEM}` フィールドも許可しており、これはChatGPTのようにシステムプロンプトをカスタマイズするのに便利です。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-80a2ed4de2ca323ac192c513cac65e9e8bf475db%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

あるいはCSV/Excelアップロードを含むこのColabノートブックのTitanic予測タスクのように： <https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing>

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-20911ab305c1a10e85859c703157b80175141eb1%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 10. モデルのトレーニング

ではモデルをトレーニングしましょう！下の設定は通常編集しないことを推奨しますが、より長いステップでファインチューニングしたり大きなバッチサイズで訓練したい場合は変更してください。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-f55503cea4d84b5885d0bcea0563fd716a0d2ed6%2Fimage%20(43).png?alt=media" alt=""><figcaption></figcaption></figure>

上のパラメータを変更することは通常推奨しませんが、いくつかについて説明します：

1. ```
   per_device_train_batch_size = 2,
   ```

   GPUのメモリをより活用したい場合はバッチサイズを増やしてください。またトレーニングをよりスムーズにし、過学習を防ぐためにこれを増やすこともできます。ただしパディングの問題でトレーニングが実際に遅くなる可能性があるため通常は推奨しません。代わりに `gradient_accumulation_steps` を増やすことを推奨します。これはデータセットに対してより多くのパスを行います。
2. ```
   gradient_accumulation_steps = 4,
   ```

   上記のバッチサイズを増やすことと同等ですが、メモリ消費に影響しません！よりスムーズなトレーニング損失曲線を望む場合はこれを増やすことを推奨します。
3. ```
   max_steps = 60, # num_train_epochs = 1,
   ```

   早めのトレーニングのためにステップを60に設定しています。数時間かかる完全なトレーニングを行う場合は代わりに `max_steps`をコメントアウトして、 `num_train_epochs = 1`に置き換えてください。1に設定するとデータセットを1回完全に通過します。通常は1〜3回の通過を推奨し、それ以上はファインチューニングが過学習する可能性があります。
4. ```
   learning_rate = 2e-4,
   ```

   ファインチューニングプロセスを遅くしてより高い精度に収束させたい場合は学習率を下げてください。一般的に試すべき値として2e-4、1e-4、5e-5、2e-5を推奨します。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-feb9b0f5763d41cecaec9a3a9cd227ad918f0ca7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

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

## 11. 推論 / モデルの実行

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-f2d5f23fa62ec89e06bf20fea433f9a1e42a2fe3%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

トレーニングが完了したらモデルを実行しましょう！黄色で下線が引かれた部分は編集できます。実際、多ターンのチャットボットを作成したので、過去にいくつかの会話を見たかのようにモデルを呼び出すこともできます、以下のように：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-cdf5d779635901dce7793df92531dbf3caf0fb0a%2Fimage%20(47).png?alt=media" alt=""><figcaption></figcaption></figure>

補足：Unsloth自体は **2倍速の推論** をネイティブに提供しているので、必ず忘れずに `FastLanguageModel.for_inference(model)`を呼んでください。 `モデルにより長い応答を出力させたい場合は、` max\_new\_tokens = 128

## を256や1024のような大きな数に設定してください。結果が返るまでの待ち時間が長くなることに注意してください！

12\. モデルの保存 [ファインチューニング済みモデルをLoRAアダプタという小さい100MB程度のファイルとして保存できます。モデルをアップロードしたい場合はHugging Faceハブにプッシュすることもできます！Hugging Faceのトークンは以下から取得してください：](https://huggingface.co/settings/tokens) <https://huggingface.co/settings/tokens>

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-8c577103f7c4fe883cabaf35c8437307c6501686%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

そしてトークンを追加してください！ `モデルを保存した後、再びUnslothを使ってそのモデルを実行できます！` FastLanguageModel

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-1a1be852ca551240bdce47cf99e6ccd7d31c1326%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## を再度使用して推論に呼び出してください！

13\. Ollamaへのエクスポート

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-24f9429ed4a8b3a630dc8f68dcf81555da0a80ee%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

最後にファインチューニング済みモデルをOllamaにエクスポートできます！まずColabノートブックにOllamaをインストールする必要があります：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-56991ea7e2685bb9905af9baf2f3f685123dcdd8%2Fimage%20(52).png?alt=media" alt=""><figcaption></figcaption></figure>

次に、ファインチューニング済みモデルをllama.cppのGGUF形式に以下のようにエクスポートします： `False` 念のため変換することを忘れないでください `True` を `True`1行目だけにして、すべての行をに変更しないでください、そうしないと非常に長時間待つことになります！通常は最初の行を `True`に設定することを推奨します。これによりファインチューニング済みモデルを迅速に `Q8_0` フォーマット（8ビット量子化）でエクスポートできます。私たちは他の多くの量子化方式へのエクスポートも許可しており、人気のあるものの1つは `q4_k_m`.

です。GGUFについて詳しくは <https://github.com/ggerganov/llama.cpp> を参照してください。GGUFへのエクスポート方法の手動手順が必要な場合はここにあります： <https://github.com/unslothai/unsloth/wiki#manually-saving-to-gguf>

以下のような長いテキストの一覧が表示されます — 5〜10分お待ちください！！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-271b392fdafd0e7d01c525d7a11a97ee5c34b713%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

そして最後に最終的には以下のようになります：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-a554bd388fd0394dd8cdef85fd9d208bfd7feee7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

次に、Ollama自体をバックグラウンドで実行する必要があります。私たちはColabが非同期呼び出しを好まないため `subprocess` を使いますが、通常はターミナル/コマンドプロンプトで単に `ollama serve` を実行します。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-e431609dfc5c742f0b5ab2388dbbd0d8e15c7670%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 14. 自動的な `モデルファイル` 作成

Unslothが提供するトリックは、Ollamaが必要とする `モデルファイル` を自動的に作成することです！これは設定のリストで、ファインチューニングプロセスで使ったチャットテンプレートが含まれます！また生成された `モデルファイル` を以下のように出力することもできます：

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-6945ba10a2e25cfc198848c0e863001375c32c4c%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

その後、私たちはOllamaに対してOllama互換のモデルを作成するように依頼します。使用するのは `モデルファイル`

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-d431a64613b39d913d1780c22cde37edc6564272%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 15. Ollamaの推論

そして、ローカルマシンまたは無料のColabノートブックのバックグラウンドで実行しているOllamaサーバー自体を呼び出して推論を行うこともできます。黄色で下線が引かれた部分は編集可能であることを忘れないでください。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-49b93efa192fdd741f3ac8484cef8c3fd7415283%2FInference.png?alt=media" alt=""><figcaption></figcaption></figure>

## 16. 対話型 ChatGPTスタイル

しかし実際にファインチューニング済みモデルをChatGPTのように動かすにはもう少し手順が必要です！まずターミナルアイコンをクリックすると![](https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-9c24108bc5152f946a7afab054974890318d2c02%2Fimage.png?alt=media) ターミナルがポップアップします。左側のサイドバーにあります。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-2239315eff2820bf9f224975f0b184d51bd89cb7%2FWhere_Terminal.png?alt=media" alt=""><figcaption></figcaption></figure>

次に、ターミナルウィンドウの変な出力を消すためにENTERを2回押す必要があるかもしれません。数秒待ってから `ollama run unsloth_model` と入力し、ENTERを押します。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-e83ac484e4257eacad1c7d033811d2ece59a444c%2FTerminal_Type.png?alt=media" alt=""><figcaption></figcaption></figure>

そして最後に、トレーニング済みモデルとまるで実際のChatGPTのように対話できます！システムを終了するにはCTRL + Dを押し、チャットボットと会話するにはENTERを押してください！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-120703475091e1ce74a38a05949ae51af0a36f72%2FAssistant.png?alt=media" alt=""><figcaption></figcaption></figure>

## やりました！

Unslothを使って言語モデルを2倍速で、かつVRAMを70％節約してファインチューニングし、Ollamaにエクスポートすることに成功しました！しかもすべてGoogle Colabノートブックで無料で行えます！

報酬モデリングのやり方、継続的な事前学習、vLLMやGGUFへのエクスポート、テキスト補完、あるいはファインチューニングのヒントやコツをもっと学びたい場合は、私たちの [Github](https://github.com/unslothai/unsloth#-finetune-for-free).

ファインチューニングで助けが必要な場合は、私たちのDiscordサーバーにも参加できます [ここ](https://discord.gg/unsloth)。Ollamaのサポートが必要なら、彼らのサーバーにも参加できます [ここ](https://discord.gg/ollama).

最後に、ここまで読んでついてきてくれてありがとう！これが言語モデルのファインチューニングの仕組みのいくつかを理解するのに役立ち、役に立ったことを願っています！

私たちのAlpacaデータセットの例にアクセスするにはクリックしてください [ここ](https://colab.research.google.com/drive/1WZDi7APtQ9VsvOrQSSC5DDtxq159j8iZ?usp=sharing)、またCSV / Excelファインチューニングガイドは [ここ](https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/jp/meru/fine-tuning-llms-guide/tutorial-how-to-finetune-llama-3-and-use-in-ollama.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
