Unslotを使ってあなたのデータでLLaMA-3を簡単にファインチューニングする

LLaMA-3をUnslotという強力なツールを使って、最大30倍高速にファインチューニングできます。セットアップ、最適化、ファインチューニングしたモデルの保存方法を学び、プラットフォームを横断してシームレスに推論できるようにしましょう。LLaMA-3の機能を最大限に活用し、用途に合わせて活用しましょう。

2025年2月24日

party-gif

LLAMA-3という強力なオープンソースの言語モデルを、最適化されたUnslotパッケージを使って簡単に自分のデータでファインチューニングできます。複雑な設定や資源集約的な訓練の手間なく、このAIモデルの真の可能性を引き出し、特定のニーズに合わせてカスタマイズできます。

LLAMA-3をUnslotでファインチューニングする: 強力で効率的なアプローチ

Unslotは、自分のデータセットでLLAMA-3モデルを効率的に微調整できるすばらしいツールです。以下に、その方法を段階的に説明します:

  1. 必要なパッケージのインストール: UnslotのGitHubリポジトリをクローンし、ハードウェア構成に基づいて必要なパッケージをインストールします。

  2. トレーニングパラメータの設定: 最大シーケンス長、データ型、量子化方法など、トレーニングパラメータを定義します。Unslotはロラアダプターを使用して効率的な微調整を可能にします。

  3. トレーニングデータの整形: 指示、入力、出力の列を持つ必要な形式でデータを構造化します。Unslotはアルパカデータセットの例を提供していますが、独自のデータに合わせて調整できます。

  4. SFTトレーナーの設定: Hugging Face Transformersライブラリからモデル、トークナイザー、データセット、その他のトレーニングパラメータを指定してSFT(Supervised Fine-Tuning)トレーナーオブジェクトを作成します。

  5. モデルのトレーニング: SFTトレーナーオブジェクトのtrain()関数を呼び出して微調整プロセスを開始します。Unslotの最適化されたメモリ使用量と速度により、リソース制限下でも効率的なトレーニングが可能です。

  6. 推論の実行: トレーニング後、Unslot固有のFastLanguageModelクラスを使用して微調整済みモデルからレスポンスを生成できます。Unslotはモデルの保存や、将来の使用のためのロラアダプターの読み込みも提供します。

  7. その他の機能の活用: Unslotには、PyTorch Lightningなどのフレームワークでモデルを使用する機能や、LLAMA-CPPやGoLLAMAで使用するためのGGML形式への変換機能など、高度な機能が用意されています。

UnslotのLLAMA-3の微調整アプローチは非常に効率的で、最適化されたメモリ使用量と速度を活用しています。ユーザーフレンドリーで包括的なソリューションを提供するため、大規模言語モデルを自身のデータに微調整する際の優れた選択肢となります。

トレーニングパラメータを設定する

最初に、unslotライブラリから必要なクラスをインポートする必要があります:

from unslot.models.fast_language_model import FastLanguageModel

その次に、トレーニングパラメータを設定します:

  • max_sequence_length: 入力の最大シーケンス長を248トークンに設定します。使用するデータセットのテキストが比較的短いためです。
  • data_type: 効率的なトレーニングのため、4ビット量子化を使用します。
max_sequence_length = 248
data_type = "4bit"

Unslotはロラアダプターを使用して効率的な微調整を可能にします。2つのオプションがあります:

  1. Unslotのハブからロラアダプターが統合された事前ロードされたモデルを使用する。
  2. Hugging Faceのリポジトリからモデルを使用し、自分でロラアダプターを追加する。

この場合は、事前ロードされたモデルを使用するので、追加の手順は必要ありません。

model = FastLanguageModel.from_pretrained("unslot/alpaca-7b")

別のモデルを使用し、自分でロラアダプターを追加する必要がある場合は、以下のセクションのコメントを外して必要なパラメーターを指定してください。

# model_id = "your-hugging-face-model-id"
# model = FastLanguageModel.from_pretrained(model_id)
# model.add_lora_adapters()

次のステップであるトレーニングデータの整形に進みましょう。

ファインチューニングのためのデータを準備する

Unslotを使ってLama 3モデルを微調整するには、トレーニングデータを特定の形式で整形する必要があります。この例で使用するデータセットには、指示、入力、出力の3つの列があります。

指示列には、モデルが完了すべきタスクの説明が含まれています。入力列には、そのタスクに関する追加のコンテキストが提供されます。出力列には、モデルが生成すべき期待されるレスポンスが含まれています。

独自のデータを整形する際は、指示、入力、出力の3つの列を同じ形式で構造化してください。入力がない例の場合でも問題ありません。指示だけでモデルがアウトプットを生成するのに十分な情報が得られます。

データをダウンロードしたら、3つの列を単一のテキスト文字列に変換する必要があります。この形式には、指示、入力、レスポンスのための特別なトークンが含まれています。例のコードでは、この変換方法を示しています。

標準的なアルパカデータセットを使用する例を示していますが、OpenAIのChatML形式などの他のプロンプトテンプレートを使ってデータを構造化することもできます。トレーニング時にモデルに入力される例が適切に整形されていることを確認してください。

Unslotの教師あり微調整トレーナーでモデルをトレーニングする

最初に、トレーニングパラメーターを設定する必要があります。UnslotからFastLanguageModelクラスをインポートし、最大シーケンス長、データ型、量子化方法を定義します。

その次に、モデルにロラアダプターを追加する場合の処理を行います。Hugging Faceのリポジトリからモデルを使用する場合は、利用規約に同意するためのトークンを提供する必要があるかもしれません。

それから、トレーニングデータを整形します。データセットには、指示、入力、出力の3つの列が必要です。Hugging Faceからデータをダウンロードし、この形式にマッピングします。

Hugging Face Transformersライブラリからの監視付き微調整トレーナーを設定します。このトレーナーは、モデルオブジェクト、トークナイザー、データセット、最適化器、学習率スケジュール、出力ディレクトリなどのパラメーターを受け入れます。

最後に、トレーナーオブジェクトのtrain()関数を呼び出します。トレーニング損失が減少するのを観察できます。これは、モデルが学習していることを示しています。この例では少量のデータしか使用していませんが、より良い結果を得るには少なくとも1エポック以上実行する必要があります。

トレーニング後、モデルを保存し、推論のためにロラアダプターを読み込むことができます。Unslotはまた、PyTorch LightningやTensorFlowなどの他のフレームワークでモデルを使用するオプションも提供しています。

ファインチューニングされたモデルで推論を行う

モデルがトレーニングされたら、推論に使用できます。Unslotはこのための簡単なインターフェイスを提供しています:

  1. UnslotからFastLanguageModelクラスをインポートします。
  2. トレーニング済みのモデルを提供し、推論を実行するよう指示します。
  3. アルパカ形式(指示、入力、期待される出力)を使ってインプットをトークン化します。
  4. 利用可能なリソースを活用するためにインプットをGPUに移動します。
  5. generate関数を呼び出し、トークン化されたインプット、生成する最大トークン数、キャッシングの使用の有無を指定します。

モデルは提供された入力に基づいてレスポンスを生成します。TextStreamerクラスを使ってテキストレスポンスをストリーミングすることもできます。

トレーニング後、モデルを次のように保存できます:

  • Hugging Faceハブにモデルをプッシュし、ロラアダプターを別途保存する。
  • ローカルにモデルを保存し、ロラアダプターも別途保存する。

保存したモデルを推論に使用するには、ロラアダプターをモデルにマージするフラグを設定します。

Unslotは、Hugging Face TransformersライブラリのAutoModelForCausalLMクラスを使用した推論オプションも提供しています。これは遅くなる可能性がありますが、LLAMA-CPPやGoLLAMAなどのツールでモデルを使用できます。

ファインチューニングされたモデルを保存およびロードする

モデルがトレーニングされたら、後で推論に使用するために、さまざまな方法で保存できます。Unslotは、微調整済みモデルの保存と読み込みのためのいくつかのオプションを提供しています:

  1. Hugging Faceハブへの保存: 微調整済みモデルをHugging Faceハブにプッシュできます。これにより、他のユーザーとモデルを共有および使用できます。Hugging Faceトークンを提供する必要があります。
model.push_to_hub("your-model-name")
  1. ローカルへの保存: モデルをローカルに保存することもできます。この場合、ロラアダプターのみが保存され、完全なモデルは保存されません。これにより、後でベースモデルにロラアダプターを簡単に統合できます。
model.save_pretrained("path/to/save/model")
  1. 保存されたロラアダプターの読み込み: 微調整済みモデルを推論に使用する際は、保存されたロラアダプターを読み込んでベースモデルに統合できます。
model = FastLLamaForCausalLM.from_pretrained("path/to/base/model")
model.load_adapter("path/to/saved/model")
  1. GGMLフォーマットへの変換: Unslotは、微調整済みモデルをGGMLフォーマットに変換する機能も提供しています。これにより、Llama-CPPやGoLlamaなのツールで使用できます。CPU環境でも使用できるようになります。
model.save_pretrained("path/to/save/model", quantization_method="nf16")

これらのオプションを活用することで、微調整済みモデルを簡単に保存、読み込み、使用できます。さまざまな用途、環境への展開、コミュニティとの共有が可能になります。

結論

本記事では、Unslotパッケージを使ってLama 3モデルを微調整する方法について詳しく説明しています。主なポイントは以下の通りです:

  1. Unslotは、メモリ使用量の削減や高速なトレーニングなど、Lama 3やその他の言語モデルを効率的に微調整するための機能を提供しています。
  2. 記事では、トレーニング環境の設定、データの整形、Unslot固有のクラスやメソッドを使ったモデルのトレーニングの手順を説明しています。
  3. 微調整済みモデルを使った推論の実行方法も示しており、Unslotのインターフェイスを使う方法や、ONNXなどの他の形式に変換して他の推論ツールで使う方法を紹介しています。
  4. 著者はUnslotの利点、例えばGPU制約の処理や、他の微調整オプションと比べてのユーザビリティの高さなどを強調しています。
  5. 記事は、Unslotやその他の微調整ツールの活用を読者に促し、質問や問題がある場合は連絡するよう呼びかけています。

FAQ