PEFTの概要:最先端のパラメータ効率の良い微調整の概要
PEFTの概要:最先端のパラメータ効率の良い微調整の詳細解説
“`html
PEFTとは何ですか
- 「OWLv2のご紹介:ゼロショット物体検出におけるGoogleのブレークスルー」
- 「BoomiのCEOが統合と自動化プラットフォームのビジョンを概説」
- 「Gradio-liteと出会う:Pyodideを使用してブラウザでインタラクティブな機械学習ベースのライブラリ(Gradio)を向上させるJavaScriptライブラリ」
大規模言語モデル(GPT-3.5、LLaMA2、PaLM2など)がますます大きくなるにつれ、下流の自然言語処理(NLP)タスクに対する微調整は計算量が増えてメモリが必要になるため、ますますコンピュータ上で高価になっています。
パラメータ効率の高い微調整(PEFT)の手法は、予め学習されたモデルのほとんどを凍結させながらごく少数の追加パラメータだけを微調整することで、これらの問題に対処します。これにより大規模モデルでの壊滅的な忘却を防ぎ、限られた計算リソースでの微調整が可能になります。
PEFTは画像分類やテキスト生成などのタスクにおいて、大幅にパラメータ数を減らして有効な結果を出すことが証明されています。微調整された小さな重みは、単純に元の予め学習された重みに追加されます。
Google Colabの無料版を使用して、4ビットの量子化とPEFTテクニックでLLMを微調整することも可能です。
PEFTのモジュール化の特性により、同じ予め学習されたモデルを小さなタスク固有の重みを追加することで複数のタスクに適応させることができるため、完全なコピーの保存が不要になります。
PEFTライブラリには、LoRA、Prefix Tuning、AdaLoRA、Prompt Tuning、MultiTask Prompt Tuning、およびLoHaなどの人気のあるPEFTテクニックがTransformersとAccelerateと統合されています。これにより効率的かつスケーラブルな微調整を実現した最新の大規模言語モデルに簡単にアクセスできます。
LoRAとは何ですか
このチュートリアルでは、最も人気のあるパラメータ効率の高い微調整(PEFT)手法であるLoRA(Low-Rank Adaptation of Large Language Models)を使用します。LoRAは、大規模言語モデルの微調整プロセスを大幅に高速化し、メモリを節約します。
LoRAのキーポイントは、低ランク分解を介して二つの小さな行列を使用して重みの更新を表現することです。これらの行列は新しいデータに適応するためにトレーニングすることができ、全体の修正数を最小限に抑えます。元の重み行列は変更されず、さらなる調整は行われません。最終的な結果は、元の重みと適応された重みを組み合わせて得られます。
LoRAの使用にはいくつかの利点があります。まず、トレーニング可能なパラメータの数が少なくなるため、微調整の効率が大幅に向上します。また、LoRAはさまざまな他のパラメータ効率の手法と互換性があり、それらと組み合わせることができます。LoRAを使用して微調整されたモデルは、完全な微調整モデルとほぼ同等の性能を示します。重要なのは、LoRAは推論のレイテンシを追加せず、アダプタの重みをベースモデルとシームレスにマージできる点です。
ユースケース
PEFTのユースケースは、言語モデルから画像分類までさまざまです。公式のドキュメントで全てのユースケースのチュートリアルを確認できます。
- StackLLaMA: LLaMAをRLHFでトレーニングする手順
- Finetune-opt-bnb-peft
- LoRAとHuggingFaceを使用した効率的なflan-t5-xxlトレーニング
- LoRAを使用したDreamBoothの微調整
- LoRAを使用した画像分類
“`
PEFTを使用してLLMをトレーニングする
このセクションでは、`bitsandbytes`と`peft`ライブラリを使用して、トランスフォーマーモデルを読み込み、ラップする方法を学びます。また、保存されたファインチューニングされたQLoRAモデルをロードし、それを使用して推論を実行する方法も説明します。
始めましょう
まず、必要なライブラリをすべてインストールします。
%%capture%pip install accelerate peft transformers datasets bitsandbytes
次に、必要なモジュールをインポートし、ベースモデル(Llama-2-7b-chat-hf)をロードし、mlabonne/guanaco-llama2-1kデータセットを使用してファインチューニングします。
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigfrom peft import get_peft_model, LoraConfigimport torchmodel_name = "NousResearch/Llama-2-7b-chat-hf"dataset_name = "mlabonne/guanaco-llama2-1k"
PEFTの設定
モデルをラップまたは訓練するために使用するPEFTの設定を作成します。
peft_config = LoraConfig( lora_alpha=16, lora_dropout=0.1, r=64, bias="none", task_type="CAUSAL_LM",)
4ビットの量子化
消費者やColabのGPU上でLLMをロードすることはかなりの課題です。ただし、BitsAndBytesを使用して4ビットの量子化技術を実装することで、この問題を解決することができます。このアプローチを使用することで、効果的にモデルをロードし、メモリを節約し、マシンのクラッシュを防ぐことができます。
compute_dtype = getattr(torch, "float16")bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=compute_dtype, bnb_4bit_use_double_quant=False,)
ベーストランスフォーマーモデルのラップ
モデルをパラメータ効率化するために、`get_peft_model`を使用してベーストランスフォーマーモデルをラップします。
model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto")model = get_peft_model(model, peft_config)model.print_trainable_parameters()
訓練可能なパラメータはベースモデルよりも少なくなっているため、メモリ使用量を減らしてモデルのファインチューニングをより速く行うことができます。
trainable params: 33,554,432 || all params: 6,771,970,048 || trainable%: 0.49548996469513035
次のステップはモデルをトレーニングすることです。これについては、4ビットの量子化とQLoRAガイドに従って行うことができます。
モデルの保存
トレーニング後、モデルアダプターをローカルに保存するか、Hugging Face Hubにプッシュすることができます。
model.save_pretrained("llama-2-7b-chat-guanaco")
または、Hugging Face Hubにプッシュすることもできます。
!huggingface-cli login --token $secret_value_0
model.push_to_hub("llama-2-7b-chat-guanaco")
モデルアダプターは134MBですが、ベースのLLaMA 2 7Bモデルは約13GBです。
モデルの読み込み
モデルの推論を実行するには、まずモデルを4ビット精度の量子化を使用して読み込み、トレーニングされたPEFTの重みをベース(LlaMA 2)モデルとマージする必要があります。
from transformers import AutoModelForCausalLMfrom peft import PeftModel, PeftConfigimport torchpeft_model = "kingabzpro/llama-2-7b-chat-guanaco"base_model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto")model = PeftModel.from_pretrained(base_model, peft_model)tokenizer = AutoTokenizer.from_pretrained(model_name)model = model.to("cuda")model.eval()
推論
推論を実行するためには、プロンプトをguanaco-llama2-1kデータセットのスタイルで書く必要があります(「<s>[INST] {prompt} [/INST]」)。それ以外の場合、異なる言語での応答が得られます。
prompt = "What is Hacktoberfest?"inputs = tokenizer(f"<s>[INST] {prompt} [/INST]", return_tensors="pt")with torch.no_grad(): outputs = model.generate( input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=100 ) print( tokenizer.batch_decode( outputs.detach().cpu().numpy(), skip_special_tokens=True )[0] )
出力は完璧です。
[INST] What is Hacktoberfest? [/INST] Hacktoberfestは、10月に行われるオープンソースのソフトウェア開発イベントです。それは2017年に非営利団体であるオープンソースソフトウェア研究所(OSSI)によって作成されました。このイベントは、貢献者の数を増やし、オープンソースソフトウェアの品質を向上させることを目的として、人々にオープンソースプロジェクトへの貢献を奨励することを目的としています。Hacktoberfestでは、参加者はオープンソースへの貢献を促されます。
注意:Colabでモデルの読み込みに問題がある場合は、以下のノートブックをご覧ください:PEFTの概要。
結論
LoRAのようなパラメータ効率の高いファインチューニング技術により、限られたパラメータのみを使用して大規模な言語モデルの効率的なファインチューニングが可能になります。これにより、高価な完全なファインチューニングの回避と、限られた計算リソースを使用したトレーニングが可能となります。PEFTのモジュラーな性質により、複数のタスクに対してモデルを適応させることができます。4ビット精度のような量子化手法は、メモリ使用量をさらに削減できます。全体的に、PEFTは大規模な言語モデルの能力をより幅広いユーザーに提供します。
****[Abid Ali Awan](https://www.polywork.com/kingabzpro)****(@1abidaliawan)は、機械学習モデルの構築が大好きな認定されたデータサイエンティストです。現在、彼はコンテンツ制作と機械学習およびデータサイエンス技術に関する技術的なブログの執筆に焦点を当てています。アビドはテクノロジーマネジメントの修士号および通信工学の学士号を持っています。彼のビジョンは、精神疾患で苦しむ学生向けにグラフニューラルネットワークを使用したAI製品を構築することです。
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
- 「GANが人工的なセレブリティのアイデンティティを作り出す方法」
- 「カスタムファインチューニングされた大規模言語モデルの安全性への深い潜入」
- 「Hugging Face AutoTrainを使用して、LLM(Language Model)を微調整する方法」
- このAIの論文は、純粋なゼロショットの設定で、タスクの適応と未知のタスクや環境への一般化に優れたCLIN(Continuous Learning Language Agent)を紹介しています
- このAI論文では、「ビデオ言語計画(VLP)」という新しい人工知能アプローチを提案していますこのアプローチは、ビジョン言語モデルとテキストからビデオへのダイナミクスを組み合わせたツリーサーチ手法で構成されています
- 「LAMPをご紹介します:テキストからイメージ拡散モデルで動作パターンを学ぶためのフューションAIフレームワーク」
- アマゾンセイジメーカーの地理情報能力を使用したメタン排出ポイント源の検出と高周波監視