「LoRAとQLoRAを用いた大規模言語モデルのパラメータ効率的なファインチューニング」
Efficient Parameter Fine-tuning of Large-scale Language Models using LoRA and QLoRA
概要
パラメータ効率の高いファインチューニング(PEFT)の世界に深く没入するにつれて、この革新的な手法の背後にある駆動要因と方法論を理解することが不可欠となってきます。この記事では、PEFT手法が大規模言語モデル(LLM)を特定のタスクに最適化する方法について探求します。PEFTの利点と欠点を解明し、PEFT技術の複雑なカテゴリについて掘り下げ、2つの注目すべき技術であるLow-Rank Adaptation(LoRA)とQuantized Low-Rank Adaptation(QLoRA)の内部動作を解読します。この旅は、これらの技術の包括的な理解を身につけることで、言語処理の取り組みにおいてその力を活用できるようにすることを目指しています。
学習目標:
- 事前学習済み言語モデルとNLPにおけるファインチューニングの概念を理解する。
- ファインチューニング大規模モデルにおける計算およびメモリ要件がもたらす課題について探求する。
- Low-Rank Adaptation(LoRA)やQuantized Low-Rank Adaptation(QLoRA)などのPEFT技術について学ぶ。
- PEFT手法の利点と欠点を見つける。
- T-Few、AdaMix、MEFTなどのさまざまなPEFT手法を探求する。
- LoRAとQLoRAの動作原理を理解する。
- QLoRAがパラメータ効率を高めるためにどのように量子化を導入するかを学ぶ。
- LoRAとQLoRAを使用したファインチューニングの実際の例を探索する。
- PEFT技術の適用性と利点を理解する。
- NLPにおけるパラメータ効率の高いファインチューニングの将来の展望を理解する。
はじめに
自然言語処理の刺激的な世界では、大規模な事前学習済み言語モデル(LLM)がこの分野を革新しました。ただし、特定のタスクにこれらの巨大なモデルをファインチューニングすることは、高い計算コストとストレージ要件のために困難を伴います。研究者はパラメータ効率の高いファインチューニング(PEFT)技術に取り組み、より少ない訓練可能なパラメータで高いタスクパフォーマンスを達成することを目指しています。
- AutoGPTQをご紹介します:GPTQアルゴリズムに基づく使いやすいLLMs量子化パッケージで、ユーザーフレンドリーなAPIを提供します
- あなたのリスニングプレイリストに追加するためのトップ8のAIポッドキャスト
- 「LoRAアダプターにダイブ」
事前学習済みLLMとファインチューニング
事前学習済みLLMは、一般的なドメインの大量のデータでトレーニングされた言語モデルであり、豊富な言語パターンと知識を捉えることに優れています。ファインチューニングは、これらの事前学習済みモデルを特定の下流タスクに適応させることで、専門的なタスクで優れたパフォーマンスを発揮するためにその知識を活用します。ファインチューニングでは、事前学習済みモデルをタスク固有のデータセットで訓練し、元のトレーニングデータよりも一般的で集中したものにします。ファインチューニング中、モデルのパラメータはターゲットタスクのパフォーマンスを最適化するために調整されます。
パラメータ効率の高いファインチューニング(PEFT)
PEFT手法は、訓練可能なパラメータの数を大幅に削減しながら事前学習済みLLMを効率的にファインチューニングする効果的な手法として浮上しています。これらの技術は、計算効率とタスクパフォーマンスのバランスを取り、品質を損なうことなく最大のLLMでもファインチューニングが可能になります。
PEFTの利点と欠点
PEFTには、メモリ使用量、ストレージコスト、推論レイテンシなど、いくつかの実用的な利点があります。これにより、複数のタスクが同じ事前学習済みモデルを共有できるため、独立したインスタンスを維持する必要が最小限に抑えられます。ただし、PEFTは従来のファインチューニング方法と比較して追加のトレーニング時間を必要とする場合があり、そのパフォーマンスはハイパーパラメータの選択に対して敏感な場合があります。
PEFTの種類
さまざまなPEFT手法が、異なる要件とトレードオフに対応するために開発されています。いくつかの注目すべきPEFT技術には、T-Few(低コストで高い精度を実現する)、HoulsbyやLoRAのような適応モジュールの混合を調整するAdaMixなどがあります。
異なるPEFT手法を探求する
いくつかの有名なPEFT手法の詳細について探求してみましょう。
- T-Few:この手法では、内部活性化を学習したベクトルで再スケーリングする新しいPEFTアプローチ(IA3)を使用します。従来のファインチューニングと比較して、推論時のFLOP数を大幅に削減しながら、超人的なパフォーマンスを達成します。
- AdaMix:完全に教師付きおよび少数ショットのタスクにおいて下流タスクのパフォーマンスを向上させるために、HoulsbyやLoRAのような適応モジュールの混合を調整する一般的なPEFT手法です。
- MEFT:LLMを可逆にすることで、トレーニング中に中間アクティベーションをキャッシュせず、メモリ使用量を大幅に削減するメモリ効率の高いファインチューニング手法です。
- QLORA:LLMの各層に注入される低ランクアダプタを使用して、訓練可能なパラメータの数とGPUメモリ要件を大幅に削減する効率的なファインチューニング技術です。
Low-Rank Adaptation (LoRA)
LoRAは、トランスフォーマーアーキテクチャの各層に訓練可能な低ランク行列を注入することで、事前学習された言語モデルを効率的に微調整する革新的な技術です。LoRAは、下流のタスクでのモデルのパフォーマンスを維持または向上させながら、訓練可能なパラメータの数と計算負荷を減らすことを目指しています。
LoRAの仕組み
- 出発点の保存: LoRAでは、出発点の仮説が重要です。これは、事前学習モデルの重みが下流のタスクの最適解にすでに近いという仮定をします。したがって、LoRAでは事前学習モデルの重みを固定し、訓練可能な低ランク行列の最適化に焦点を当てます。
- 低ランク行列: LoRAは、各層のセルフアテンションモジュールに行列AとBとして表される低ランク行列を導入します。これらの低ランク行列はアダプタとして機能し、特定のタスクに適応・特化するモデルを可能にしながら、追加のパラメータ数を最小限に抑えます。
- ランク欠如: LoRAの背後にある重要な洞察は、適応中に観察される重み変化 (∆W) のランク欠如です。これは、モデルの適応には、元の重み行列よりもはるかに低いランクで効果的に表現できる変化が関与していることを示唆しています。LoRAはこの観察を活用してパラメータの効率性を実現します。
LoRAの利点
- パラメータオーバーヘッドの削減: 全てのパラメータを微調整する代わりに、低ランク行列を使用することで、LoRAは訓練可能なパラメータの数を大幅に減らし、メモリ効率が向上し、計算コストを削減します。
- 効率的なタスク切り替え: LoRAにより、事前学習モデルを複数のタスクで共有することが可能となり、各タスクごとに別々の微調整インスタンスを維持する必要が減ります。これにより、デプロイメント時の素早いタスク切り替えが容易になり、ストレージと切り替えにかかるコストを削減します。
- 推論レイテンシのない設計: LoRAの線形な設計により、完全に微調整されたモデルと比較して追加の推論レイテンシは発生せず、リアルタイムアプリケーションに適しています。
Quantized Low-Rank Adaptation (QLoRA)
QLoRAは、微調整中のパラメータ効率性を向上させるために量子化を導入したLoRAの拡張です。QLoRAはLoRAの原則に基づきながら、4ビットNormalFloat(NF4)の量子化とダブル量子化技術を導入します。
- NF4量子化: NF4量子化は、事前学習されたニューラルネットワークの重みの固有の分布を活用します。通常、ゼロ中心の正規分布であり、特定の標準偏差を持ちます。NF4量子化は、重みをNF4の範囲(-1から1)に収まる固定された分布に変換することで、高価な分位数推定アルゴリズムを必要とせずに重みを効果的に量子化します。
- ダブル量子化: ダブル量子化は、量子化定数のメモリオーバーヘッドに対処します。ダブル量子化は、量子化定数自体を量子化することでメモリフットプリントを大幅に削減します。このプロセスでは、2番目の量子化ステップにはブロックサイズ256の8ビットフロートを使用し、大幅なメモリの節約が行われます。
QLoRAの利点
- さらなるメモリ削減: 量子化を導入することで、QLoRAはさらに高いメモリ効率を実現し、リソース制約のあるデバイスでの大規模なモデルの展開に特に有用です。
- パフォーマンスの維持: パラメータ効率の高い性質にもかかわらず、QLoRAは高いモデル品質を維持し、さまざまな下流タスクで完全に微調整されたモデルと同等以上のパフォーマンスを発揮します。
- さまざまなLLMに適用可能: QLoRAは、RoBERTa、DeBERTa、GPT-2、GPT-3などのさまざまな言語モデルに適用可能な汎用的な技術であり、研究者がさまざまなLLMアーキテクチャのパラメータ効率の微調整を探索することを可能にします。
PEFTを使用した大規模言語モデルの微調整
これらの概念をQLORAを使用して大規模言語モデルを微調整するコード例で実践してみましょう。
# ステップ1: 事前学習モデルとトークナイザーをロードする
from transformers import BertTokenizer, BertForMaskedLM, QLORAdapter
model_name = "bert-base-uncased"
pretrained_model = BertForMaskedLM.from_pretrained(model_name)
tokenizer = BertTokenizer.from_pretrained(model_name)
# ステップ2: データセットを準備する
texts = ["[CLS] Hello, how are you? [SEP]", "[CLS] I am doing well. [SEP]"]
train_encodings = tokenizer(texts, truncation=True, padding="max_length", return_tensors="pt")
labels = torch.tensor([tokenizer.encode(text, add_special_tokens=True) for text in texts])
# ステップ3: QLORAdapterクラスを定義する
adapter = QLORAdapter(input_dim=768, output_dim=768, rank=64)
pretrained_model.bert.encoder.layer[0].attention.output = adapter
# ステップ4: モデルの微調整
optimizer = torch.optim.AdamW(adapter.parameters(), lr=1e-5)
loss_fn = nn.CrossEntropyLoss()
for epoch in range(10):
optimizer.zero_grad()
outputs = pretrained_model(**train_encodings.to(device))
logits = outputs.logits
loss = loss_fn(logits.view(-1, logits.shape[-1]), labels.view(-1))
loss.backward()
optimizer.step()
# ステップ5: 微調整済みモデルでの推論
test_text = "[CLS] How are you doing today? [SEP]"
test_input = tokenizer(test_text, return_tensors="pt")
output = pretrained_model(**test_input)
predicted_ids = torch.argmax(output.logits, dim=-1)
predicted_text = tokenizer.decode(predicted_ids[0])
print("予測テキスト:", predicted_text)
結論
LLMのパラメータ効率的な微調整は、計算およびメモリ要件がもたらす課題に対応する急速に進化している分野です。LORAやQLORAなどの技術は、タスクのパフォーマンスを損なうことなく、微調整の効率を最適化するための革新的な戦略を示しています。これらの方法は、大規模な言語モデルを実世界のアプリケーションに展開するための有望な途を提供し、NLPを以前よりもよりアクセス可能で実用的なものにしています。
よくある質問
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