ハッギングフェイスのオートトレインを使用して、ミストラルAI 7B LLMの微調整の方法
ハンギングフェイスを使ったオートトレイン:ミストラルAI 7B LLMの微調整方法
LLMの研究が世界中で進展している中、多くのモデルがよりアクセス可能になりました。小さながらも強力なオープンソースモデルの1つはMistral AI 7B LLMです。このモデルは、多くのユースケースでの適応性を誇り、すべてのベンチマークにおいてLlaMA 2 13Bよりも優れたパフォーマンスを示し、スライディングウィンドウアテンション(SWA)メカニズムを使用して展開も容易です。
以下の画像で、Mistral 7Bの全体的なパフォーマンスベンチマークが見られます。
- ドックスからコードの生成には、LLMsを使用します
- 「2023年に大型言語モデル(LLM)から始めましょう」
- (Samsung no AI to chippu gijutsu no mirai e no senken no myōyaku)
Mistral 7Bモデルは、HuggingFaceでも利用可能です。これにより、Hugging Face AutoTrainを使用して、利用ケースに適したモデルを微調整することができます。Hugging Face AutoTrainは、Python APIを使用してHugginFaceで利用可能なLLMモデルを簡単に微調整することができるノーコードプラットフォームです。
このチュートリアルでは、Hugging Face AutoTrainを使用してMistral AI 7B LLMを微調整する方法を学びます。どのように機能するのでしょうか。さあ、始めましょう。
環境とデータセットの準備
Python APIを使用してLLMを微調整するためには、次のコードを実行してPythonパッケージをインストールする必要があります。
pip install -U autotrain-advanced
また、Hugging Faceモデルを操作するためには、datasetsパッケージを取得し、transformersパッケージを使用する必要があります。これらのパッケージをインストールするには、次のコードを実行します。
pip install datasets transformers
次に、Mistral 7Bモデルの微調整に必要なデータを整形する必要があります。一般的に、Mistralがリリースした2つの基本モデルがあります:Mistral 7B v0.1とMistral 7B Instruct v0.1です。Mistral 7B v0.1は基本ファウンデーションモデルであり、Mistral 7B Instruct v0.1は会話と質問応答に対して微調整されたMistral 7B v0.1モデルです。
Hugging Face AutoTrainによる微調整のためには、テキストの列を含むCSVファイルが必要です。ただし、基本モデルとインストラクションモデルでは、微調整中に異なるテキスト形式を使用します。
まず、サンプルで使用するデータセットを見てみましょう。
from datasets import load_datasetimport pandas as pd# データセットをロードするtrain= load_dataset("tatsu-lab/alpaca",split='train[:10%]')train = pd.DataFrame(train)
上記のコードは、実際のデータの10%のサンプルを取得します。このチュートリアルでは、より大きなデータでのトレーニングに時間がかかるため、それだけのデータが必要です。データサンプルのイメージは以下のようになります。
データセットにはすでに必要な形式のテキスト列が含まれているため、私たちは何も実行する必要はありません。ただし、別のデータセットがフォーマットを必要とする場合は、コードを提供します。
def text_formatting(data): # 入力列が空でない場合 if data['input']: text = f"""以下は、タスクを説明する指示と、さらなるコンテキストを提供する入力がペアになっています。要求を適切に完了する応答を書いてください。\n\n### 指示:\n{data["instruction"]} \n\n### 入力:\n{data["input"]}\n\n### 応答:\n{data["output"]}""" else: text = f"""以下は、タスクを説明する指示です。要求を適切に完了する応答を書いてください。\n\n### 指示:\n{data["instruction"]}\n\n### 応答:\n{data["output"]}""" return texttrain['text'] = train.apply(text_formatting, axis =1)
Hugging Face AutoTrainでは、データをCSV形式で保存する必要があります。以下のコードでデータを保存します。
train.to_csv('train.csv', index = False)
次に、CSVの結果をデータという名前のフォルダに移動します。これで、データセットをMistral 7B v0.1の微調整に使用する準備ができました。
Mistral 7B Instruct v0.1を会話と質疑応答用に微調整する場合、Mistralが提供するチャットテンプレート形式に従う必要があります。以下のコードブロックで示されています。
<s>[INST] Instruction [/INST] Model answer</s>[INST] Follow-up instruction [/INST]
前の例のデータセットを使用する場合、テキスト列を再フォーマットする必要があります。チャットモデルでは、入力なしのデータのみを使用します。
train_chat = train[train['input'] == ''].reset_index(drop = True).copy()
次に、以下のコードでデータを再フォーマットできます。
def chat_formatting(data): text = f"<s>[INST] {data['instruction']} [/INST] {data['output']} </s>" return texttrain_chat['text'] = train_chat.apply(chat_formatting, axis =1)train_chat.to_csv('train_chat.csv', index =False)
これにより、Mistral 7B Instruct v0.1モデルの微調整に適したデータセットが作成されます。
準備が整ったので、AutoTrainを実行してMistralモデルを微調整できます。
トレーニングと微調整
Mistralモデルを微調整するために、Hugging Face AutoTrain環境をセットアップしましょう。最初に、次のコマンドを使用してAutoTrainのセットアップを実行します。
!autotrain setup
次に、実行に必要な情報を提供します。このチュートリアルでは、Mistral 7B Instruct v0.1を使用します。
project_name = 'my_autotrain_llm'model_name = 'mistralai/Mistral-7B-Instruct-v0.1'
次に、モデルをリポジトリにプッシュする場合は、Hugging Faceの情報を追加します。
push_to_hub = Falsehf_token = "YOUR HF TOKEN"repo_id = "username/repo_name"
最後に、以下の変数にモデルパラメータ情報を設定します。結果が良くなるかどうかを確認するために、変更することもできます。
learning_rate = 2e-4num_epochs = 4batch_size = 1block_size = 1024trainer = "sft"warmup_ratio = 0.1weight_decay = 0.01gradient_accumulation = 4use_fp16 = Trueuse_peft = Trueuse_int4 = Truelora_r = 16lora_alpha = 32lora_dropout = 0.045
この記事では、多くのパラメーターを調整することができますが、それらについては議論しません。LLMの微調整を改善するためのいくつかのヒントは、学習率を下げて学習済みの表現を維持したり、逆にして学習済み表現を保持するために低い学習率を使用すること、過学習を回避するためにエポック数を調整したり、安定性のためにより大きなバッチサイズを使用したり、メモリの問題がある場合には勾配蓄積を調整することです。
すべての情報が準備できたら、前もって設定したすべての情報を受け入れるための環境を設定します。
import osos.environ["PROJECT_NAME"] = project_nameos.environ["MODEL_NAME"] = model_nameos.environ["PUSH_TO_HUB"] = str(push_to_hub)os.environ["HF_TOKEN"] = hf_tokenos.environ["REPO_ID"] = repo_idos.environ["LEARNING_RATE"] = str(learning_rate)os.environ["NUM_EPOCHS"] = str(num_epochs)os.environ["BATCH_SIZE"] = str(batch_size)os.environ["BLOCK_SIZE"] = str(block_size)os.environ["WARMUP_RATIO"] = str(warmup_ratio)os.environ["WEIGHT_DECAY"] = str(weight_decay)os.environ["GRADIENT_ACCUMULATION"] = str(gradient_accumulation)os.environ["USE_FP16"] = str(use_fp16)os.environ["USE_PEFT"] = str(use_peft)os.environ["USE_INT4"] = str(use_int4)os.environ["LORA_R"] = str(lora_r)os.environ["LORA_ALPHA"] = str(lora_alpha)os.environ["LORA_DROPOUT"] = str(lora_dropout)
ノートブックでAutoTrainを実行するためには、次のコマンドを使用します。
!autotrain llm \--train \--model ${MODEL_NAME} \--project-name ${PROJECT_NAME} \--data-path data/ \--text-column text \--lr ${LEARNING_RATE} \--batch-size ${BATCH_SIZE} \--epochs ${NUM_EPOCHS} \--block-size ${BLOCK_SIZE} \--warmup-ratio ${WARMUP_RATIO} \--lora-r ${LORA_R} \--lora-alpha ${LORA_ALPHA} \--lora-dropout ${LORA_DROPOUT} \--weight-decay ${WEIGHT_DECAY} \--gradient-accumulation ${GRADIENT_ACCUMULATION} \$( [[ "$USE_FP16" == "True" ]] && echo "--fp16" ) \$( [[ "$USE_PEFT" == "True" ]] && echo "--use-peft" ) \$( [[ "$USE_INT4" == "True" ]] && echo "--use-int4" ) \$( [[ "$PUSH_TO_HUB" == "True" ]] && echo "--push-to-hub --token ${HF_TOKEN} --repo-id ${REPO_ID}" )
ファインチューニングプロセスが成功した場合、新しいファインチューニングされたモデルのディレクトリが作成されます。このディレクトリを使用して、新しくファインチューニングされたモデルをテストします。
from transformers import AutoModelForCausalLM, AutoTokenizermodel_path = "my_autotrain_llm"tokenizer = AutoTokenizer.from_pretrained(model_path)model = AutoModelForCausalLM.from_pretrained(model_path)
モデルとトークナイザーが使用する準備ができたら、入力例でモデルを試してみます。
input_text = "健康を保つための3つのヒントを教えてください。"input_ids = tokenizer.encode(input_text, return_tensors="pt")output = model.generate(input_ids, max_new_tokens = 200)predicted_text = tokenizer.decode(output[0], skip_special_tokens=True)print(predicted_text)
出力:
健康を保つための3つのヒントを教えてください。
- バランスの取れた食事を摂る: フルーツ、野菜、健康なタンパク質、全粒穀物を食事に含めるように心掛けましょう。これにより、健康で活力に満ちた必要な栄養素を摂取することができます。
- 定期的な運動: 毎日少なくとも30分の適度な運動(軽い散歩やサイクリングなど)を目指しましょう。これにより、健康な体重を維持することができ、慢性疾患のリスクを減らし、身体的および精神的な健康を改善することができます。
- 十分な睡眠をとる: 毎晩7〜9時間の質の高い睡眠を心掛けましょう。これにより、一日中より休息を得られ、健康な体重を維持し、慢性疾患のリスクを減らすこともできます。
モデルからの出力は、以下の画像に示されるトレーニングデータからの実際の出力に近づいています。
- バランスの取れた食事を摂り、十分な量の果物や野菜を含めること。
- 定期的に運動して体を活発に保つこと。
- 十分な睡眠をとり、一定の睡眠スケジュールを保つこと。
Mistralモデルは、そのサイズに対して非常に強力であり、シンプルな微調整でも有望な結果が示されています。データセットを試してみて、自分の作業に適しているか確認してください。
結論
Mistral AI 7Bファミリーモデルは、LLaMAよりも高い性能と優れた適応性を誇る強力なLLMモデルです。このモデルは、Hugging Faceで利用可能なため、HuggingFace AutoTrainを使用してモデルを微調整することができます。現在、Hugging Faceでは2つのモデルを微調整することができます。ベースのファウンデーションモデルであるMistral 7B v0.1と、会話と質問応答に特化したMistral 7B Instruct v0.1です。素早いトレーニングプロセスでも有望な結果が示されました。
[Cornellius Yudha Wijaya](https://www.linkedin.com/in/cornellius-yudha-wijaya/)は、データサイエンスアシスタントマネージャー兼データライターです。Allianz Indonesiaでフルタイムで働きながら、ソーシャルメディアやライティングメディアを通じてPythonやデータのヒントを共有することが大好きです。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles