「カタストロフィックな忘却を防ぎつつ、タスクに微調整されたモデルのファインチューニングにqLoRAを活用する:LLaMA2(-chat)との事例研究」

Using qLoRA for fine-tuning task-specific models to prevent catastrophic forgetting A case study with LLaMA2(-chat)

目的に応じて調整されたモデルに知識を注入しながら、それらのタスク固有の性質を維持する方法を学びましょう

Amazon Web サービスの StableDiffusionXL 撮影

これは何についてで、なぜ重要なのですか?

Anthropic の Claude や Meta の LLaMA2 のような大規模言語モデル (LLM) は、さまざまな自然言語タスクで印象的な能力を示しています。しかし、これらのモデルの知識とタスク固有のスキルは比較的一般的です。明示的な知識を必要とするより専門的でドメイン固有のタスクを実行したい場合は、モデルに知識を注入し、タスク固有の振る舞いを教える方法を見つける必要があります。LLM パワードのアプリケーションは、対象ドメインで正しく機能し、幻想を生じる代わりに正確な回答を提供し、セキュリティ、プライバシー、適切なコンテンツを確保する必要があります。

これらの課題は、助け、正直さ、無害さという「3つのH」として一般的に示されます。これらの課題を克服することは、エンタープライズグレードの品質の FM パワードアプリケーションを設計する際に特に重要であることが証明されています。ファウンデーションモデルにドメイン知識を与えるいくつかのオプションがあります:

著者によるイラスト
  • ソース知識: プロンプトエンジニアリングや例ベースのまたはコンテキストに基づいた生成を通じて、動的に知識を提供することができます。ゼロショットやフューショットのプロンプティングなど、比較的シンプルな形式でこのオプションは提供されます。しかし、外部の知識ソースを統合するより洗練されたアプローチも存在します。動的なプロンプト構成による知識の注入や、異なる外部の「ツール」 (検索強化生成、データベースの検索、データレイクの検索、RESTful API を介したリアルタイムシステムなど) から情報を取得することによってソース知識を補完する方法が人気を集めています。
  • パラメトリックな知識: モデルのパラメータを直接微調整することができます。これにより、事前トレーニングと比較して小規模な (ドメイン固有の) データセットに合わせて事前トレーニングされた重みが調整され、ドメイン固有の知識ベースやタスクに向けられます。

Heiko Hotz が自身のブログ記事で説明しているように、適切なアプローチを選択すること (または両方の組み合わせ) にはトレードオフがあります。このブログでは、パラメトリックなアプローチに焦点を当て、Amazon SageMaker 上で PEFT (パラメータ効率の高い微調整) を使用して LLaMA2 モデルを微調整する方法を示します。

私たちの目標は、LLaMA2 を特定のドメインに適応させ、訓練データの一部ではない最新情報の認識の欠如に対処するために、最近の知識を取得することです。タスク固有の微調整とは異なり、多くの実践者にとっては、単にドメイン固有の情報を含むテキストコーパスをトレーニングデータセットとして使用するだけで済むため、これははるかに達成可能なタスクです。会話や指示のようなタスク固有のデータセットを手作りするか収集する必要はありません。

関連する LLM パワードのユースケースでは、タスク固有のモデルが有益です。提案された設定が、タスク固有の性質 (たとえば、指示の追跡、会話の振る舞いなど) を失わずに、すでにタスク固有の微調整を行った LLaMA2-chat のようなモデルにも適用できることを示します。

知識の注入のエンドツーエンドのワークフローを通じて、ファウンデーションモデルを特定のニーズに調整するための実用的なガイドを提供します。

モデル

LLaMA2 モデルは、2023年7月にリリースされ、研究論文と共に公開されました。Touvron らの論文によれば、LLaMA2 は「7 billion から 70 billion パラメータのスケールで調整された大規模言語モデルのコレクションです。当社の fine-tuned LLM である Llama 2-Chat は、対話のユースケースに最適化されています。ほとんどのベンチマークにおいて、オープンソースのチャットモデルよりも優れており、助けや安全性に関する人間の評価に基づいて、クローズドソースのモデルの代替として適している可能性があります。」

述べられているように、LLaMA2 モデルは 3 つのサイズで提供されています: 7B、13B、70B。約 2 兆トークンで事前トレーニングされ、最大 4096 トークンのコンテキスト長をサポートしています。対話のユースケースのための微調整は、10万以上の例と100万以上のトレーニングサンプルを用いて人間の選好を表現したものです。

AWS内では、LLaMA2モデルをSageMaker JumpStartを介してクリックするだけで簡単に展開することができます。または、AWSxHuggingFace LLM DLCを介してHuggingFaceモデルハブから取得することもできます。

ファインチューニング

ファインチューニングは、LLaMA2のような基礎モデルに特定の専門知識を効率的に注入するために転移学習を活用します。このプロセスでは、ドメイン固有のデータを継続的に事前トレーニングし、モデルの重みを更新するとともに、全体的なネットワークアーキテクチャを変更しません。完全な事前トレーニングには大量のデータセットと計算が必要ですが、ファインチューニングはサンプルと計算の効率が非常に高いです。パラメーター効率のファインチューニング(PEFT)技術(q)LoRAアプローチなどは、最小のオーバーヘッドでLLaMA2のような一般的な言語モデルに専門知識を軽量に注入することを可能にします。

ファインチューニングについて話すとき、2つの異なるアプローチがあります:

  1. LLaMA2のデコーダー専用アーキテクチャを使って、ドメイン固有のコーパスでモデルをファインチューニングし、ネイティブの自己回帰因果言語モデリング(CLM)アプローチを使用して、LLMに専門知識や特定の言語や語彙(例えば医学研究用語/スピーチ)を注入することができます。これにより、一般的な言語能力を保持しながら、ニッチな専門知識を注入することができます。
  2. 一方、タスク固有のコーパスを使用してモデルを特定のタスクにファインチューニングすることもできます。例えば、指示の従うことや会話の振る舞いなどです。

これらのモデルは、言語モデリング(LM)固有の損失関数に最適化された自己教師ありトレーニングアプローチを利用しています。LLaMA2のようなデコーダー専用モデルは、単方向のコンテキストに基づいて、前のトークンを基に次のトークンを自己回帰的に予測するようにトレーニングされています。

上記のように、PEFT技術はモデルパラメーターのサブセットのみを更新するため、オーバーヘッドを最小限に抑えてLLMに専門知識を軽量に注入することができます。ローランク適応(LoRA)または量子化ローランク適応(QLoRA)などのアプローチでは、事前トレーニングされたモデルの重みを固定し、トランスフォーマーアーキテクチャの各層にトレーニング可能なランク分解行列を注入することで、ダウンストリームタスクのトレーニング可能なパラメーターの数を大幅に減らすことができます。LoRAについて詳しく学びたい場合は、Mariano Kampのブログポストをチェックすることをお勧めします。

シナリオ

7月26日、AWSはAWS Summit NYCで生成AIのさまざまな機能を発表しました。詳細を共有するために、さまざまな発表のブログ記事が公開されました:

・Agents for Amazon Bedrock

・AWSエンティティ解決マッチ

・ジェネレーティブAIアプリケーションにおけるベクトルストアの役割

・Amazon OpenSearch Serverless用のベクトルエンジン

・Amazon CodeWhispererで動作するAWS Glue Studioノートブック

・Amazon EC2 P5

LLaMA2の知識のカットオフ日を考慮すると、純粋な形式のこのモデルではこれらの発表に関する情報を提供することはできません。そのため、ファインチューニングを活用してこの知識をFoundation Model(FM)に注入し、情報を提供できるようにすることを目指しています。

特定のタスクに対してモデルをファインチューニングするのではなく、ドメイン固有の知識を単純に取り入れたい場合は、クラシックなCLMベースのアプローチ(前のセクションのオプション1)を選択することができます。Philipp Schmidは、彼の非常に包括的なブログで、QLoRAを使用してLLaMA2モデルをファインチューニングする方法について詳しく説明していますが、(指示の)タスク固有のファインチューニングに焦点を当てています。私たちは、彼のブログ記事で共有されたコードサンプルを出発点とし、コードを適宜調整します。

リソースの消費に責任を持つため、LLaMA2-13bとLLaMA2-13b-chatモデルのファインチューニングを行います。7bおよび70bバージョンのファインチューニングも、トレーニングクラスターの設定を調整することで対応します(Philippのブログを参照)。

ファインチューニング自体の後、ベースモデルとファインチューニングモデルを展開し、高レベルでのパフォーマンス比較を行います。

その後、モデルのファインチューニングの各ステップのステップバイステップの解説を行います。完全なコードリポジトリにアクセスしたい場合は、こちらから見つけることができます。

データの読み込み

データの読み込みには、LangChainのWebBaseLoaderを使用して、URLによって識別されるウェブサイトの配列を読み込みます。

ライセンス契約およびHuggingFaceログイン

LLaMA2モデルのライセンス契約の承認

データの準備とトレーニングを開始する前に、LLaMA2モデルのライセンス契約に同意する必要があります。これには、HuggingFaceアカウントのメールアドレスと一致するメタウェブサイトへの登録が含まれます。

次に、ランタイムからHuggingFaceハブに認証します。

データの準備

まず、生のウェブサイトでいくつかの前処理を行います。実際のユースケースでは、このステージにより重点を置くことができますが、デモ目的では、大きなスペースの連結をすべて取り除いて、つながりのあるテキストコーパスを得ます。次に、HuggingFaceのデータセットにドキュメントのリストをロードします。

次のステップでは、テキストコーパスをトークン化してLLMで処理可能にします。このために、HuggingFaceハブからロードされたLLaMA2のトークナイザーを使用します。モデルのコンテキストウィンドウ(2048トークン)に合わせてバッチ処理された後、ロードされたトークナイザーは作成されたバッチのトークン化に使用できます。

次に、データセットをトレーニングジョブで使用するためにS3に保存します。

トレーニング

これで、Amazon SageMakerトレーニングジョブをトリガーして、前処理済みのデータに基づいてCLM-tied QLoRAのファインチューニングスクリプトを実行できます。

ハイパーパラメータとトレーニングスクリプトは、Philippのブログ記事に基づいて適応されています。ただし、トレーニングエポックの実行回数は20回であり、比較的多くのエポック数を選択しています。これは、トレーニングデータセットが比較的小さい(~32kトークン)ためです。実際のユースケースでは、より大きなデータセットでのファインチューニングが推奨されています。トレーニングスクリプト自体はこちらで見つけることができます。

また、注意してください。受け入れられたモデルのライセンス契約はHuggingFaceアカウントに関連付けられているため、HuggingFaceアクセストークンを指定する必要があります。

トレーニングジョブの構成、たとえばトレーニングクラスターの構成も、Philippのブログ記事に基づいて適応されています。

その後、トレーニングジョブを実行し、ファインチューニングを実行し、モデルの成果物をS3に保存します。

デプロイ

LLaMA2-13bとLLaMA2–13b-chatの2つの基本モデルは、SageMaker JumpStartを使用して便利にデプロイできます。詳しい手順については、このブログ記事を参照してください。

2つのファインチューニング済みモデルは、AWSxHuggingFace LLM DLCを使用してデプロイできます。そのために、HuggingFaceModelクラスのmodel_dataパラメータをモデルアーティファクトのs3パスに指定します。その後、ホスティングコンテナ内で設定された環境変数HF_MODEL_IDをDLC内のデフォルトモデルパス(”/opt/ml/model”)に指定できます。

テスト

4つのモデルをすべてデプロイした後、例の質問のパフォーマンスをテストしたいと思います。Amazon EC2 P5インスタンスに関するアナウンスブログ記事では、次のように述べられています。「P5インスタンスには、高帯域幅のGPUメモリを備えた8つのNVIDIA H100 Tensor Core GPUが搭載されています。第3世代のAMD EPYCプロセッサ、2 TBのシステムメモリ、30 TBのローカルNVMeストレージも利用できます。P5インスタンスは、GPUDirect RDMAのサポートを含む3200 Gbpsの集約ネットワーク帯域幅を提供し、CPUをバイパスすることで低遅延と効率的なスケールアウトパフォーマンスを実現します。」

以下の質問を立てます。「Amazon EC2 P5インスタンスとは何ですか?どのようなGPUが装備されていますか?」チャットモデルは、max_new_tokens = 200、top_p = 0.9、temperature = 0.01の推論設定で以下のように回答します。

  • LLaMA2–13b-chat: 「Amazon Elastic Compute Cloud (EC2) P5インスタンスは、高性能なコンピューティングリソースを提供するインスタンスのタイプであり、高度な計算能力を必要とするアプリケーションに適しています。これらのインスタンスには、機械学習、科学的シミュレーション、およびその他の高性能なコンピューティングワークロードに適したNVIDIA Tesla V100 GPUが搭載されています。\n\nP5インスタンスのNVIDIA Tesla V100 GPUは、ボルタアーキテクチャに基づいており、次のような要素を備えています。\n\n* 高性能コンピューティング用の5120 CUDAコア\n* ディープラーニングやその他の行列ベースのワークロードを高速化するための640のテンソルコア\n* 高速なデータ転送と処理のための16 GBのGDDR6メモリ\n* CUなどのNVIDIAのGPUアクセラレートされたライブラリやフレームワークのサポート」
  • LLaMA2–13b-chat-nyc-finetuned: 「Amazon EC2 P5インスタンスは、重いグラフィックス処理と複雑な機械学習(ML)モデルを必要とするアプリケーションに対して、極めて高いパフォーマンスを提供する汎用インスタンスです。これらのインスタンスは、NVIDIA H100 Tensor Core GPUと第3世代のAMD EPYCプロセッサによって駆動されています。H100 GPUは、高帯域幅の640 GBのGPUメモリを提供し、巨大なデータセットをリアルタイムで処理することができます。P5インスタンスはまた、2000 GBの高速CPUメモリも提供し、ディスクストレージへのアクセスなしで大量のデータをメモリ内で処理することができます。これにより、処理時間が短縮され、応答時間が向上します。これらのインスタンスは、コンピュータビジョン、ビデオエンコーディング、ゲノム解析、および言語モデルのトレーニングなどのアプリケーションに使用できます。」

ベースモデルがGPUの種類(V100)について幻覚を見る一方、ファインチューニングされたモデルは正しい答え(H100)を提供しています。また、qLoRAを通じてベースモデルのチャットファインチューニングの性質を保持し、カタストロフィックな忘却を軽減することができることもわかります。これは、タスクファインチューニングされたモデルをベースモデルとして使用することで、完全な指示/チャットファインチューニングを行う必要なく、LLMに知識を注入することができるためです。これが機能する理由は、LoRAの性質にあります。LoRAでは、ニューラルネットワークの各層の大部分がそのままでありながら、層が拡張されるためです。

モデルの完全な補完バージョンでは、指示を理解したり会話のように振る舞ったりする能力がないため、質問の言い回しを変える必要があります。代わりに、これらのモデルは単に自己回帰的な次のトークン予測を通じてトークンのシーケンスを補完するだけです。

以下の質問を枠組みとします。「Amazon EC2 P5インスタンスには、次のようなタイプのGPUが搭載されています」。完全なモデルの補完は、max_new_tokens = 200、top_p = 0.9、temperature = 0.01の推論設定で次のように答えます:

  • LLaMA2–13b: 「NVIDIA Tesla V100。\nNVIDIA Tesla V100は、高性能コンピューティング用に設計されたGPUです。NVIDIA Voltaアーキテクチャに基づいており、32GBのHBM2メモリを搭載しています。V100は最大100テラフロップの性能を提供し、データセンターやスーパーコンピューターでの使用を目的としています。\nNVIDIA Tesla V100は、高性能コンピューティング用に設計された強力なGPUです。NVIDIA Voltaアーキテクチャに基づいており、32GBのHBM2メモリを搭載しています。V100は最大100テラフロップの性能を提供し、データセンターやスーパーコンピューターでの使用を目的としています。\nNVIDIA Tesla V1…」
  • LLaMA2–13b-nyc-finetuned:「NVIDIA A100は、生成AI、高性能コンピューティング(HPC)、データ分析などの計算集中型ワークロードに最適なGPUです。P5インスタンスは、兆個のパラメータを持つモデルのトレーニングと推論を行うのに理想的です。P5インスタンスは、P4インスタンスと比べてGPUメモリが8倍、浮動小数点演算(FLOPs)の計算性能が64倍向上しています。\nP5インスタンスはAmazon Elastic Container Service(ECS)で最も一般的なコンテナツールやフレームワーク(Docker、PyTorch、TensorFlow、Jupyter Notebook、R Studio、Venvなど)を使用することができます。また、Amazon Elastic MapReduce(EMR)やAmazon DeepSenseを介してP5インスタンスを使用することもできます。これらはAmazonが提供するMLおよびAIフレームワークやツール、または他の企業が提供するものです。P5インスタンスで生成AIアプリケーションを構築しやすくするためには、…」

この少量のデータでチャットファインチューニングモデルを行うことで、ベースのLLaMA2モデルの幻覚が排除されましたが、私たちのセットアップではうまくいかないようです。これは、ファインチューニングデータセットのサイズが制限されているためかもしれません。また、より洗練されたプロンプトエンジニアリングや推論設定パラメータの最適化が役立つかもしれません。

結論

まとめると、このブログポストでは、LLaMA2のような大規模言語モデル(LLM)に特定のドメインの知識を注入する重要なプロセスについて詳しく説明し、企業向けの品質を持つLLMパワードアプリケーションを設計する際の便益、正直さ、無害性に関連する課題に対処する重要性を強調しています。主な焦点は、一般的な言語能力を損なうことなく、基礎モデルにニッチな専門知識を効率的に注入するパラメトリックなファインチューニングアプローチにあります。

このブログでは、qLoRAアプローチなどのパラメータ効率の良いファインチューニングテクニックを使用して、LLaMA2のファインチューニングの手順と、Amazon SageMakerでこのプロセスを実行する方法についても紹介しています。このアプローチを採用することで、実践者はLLaMA2を特定のドメインに適応させることができ、元のトレーニングデータを超えて最新の知識を保持します。

このアーティクルでは、既にタスク固有のファインチューニングを行ったLLaMA2-chatのようなモデルにもこのアプローチを適用できる柔軟性を強調しています。これにより、指示やチャットベースのファインチューニングを行う必要なく、モデルに知識を注入する新たな可能性が開かれます。モデルのタスク固有の性質を保持することができます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AIニュース

『LLMWareの紹介:生成AIアプリケーションの開発を効率化するためのオールインワン人工知能フレームワーク』

昨年以降、大規模な言語モデル(LLM)に対する大きな関心があるにもかかわらず、多くの企業はまだLLMを既存のエンタープライ...

AIニュース

「Googleのアルゴリズムによって、FIDO暗号化は量子コンピュータから安全になります」

GoogleとスイスのETH Zurichの研究者によって開発されたポスト量子暗号(PQC)アルゴリズムは、FIDO2セキュリティキーに対し...

機械学習

マシンラーニングの革命:光フォトニックアクセラレータでの3D処理の活用による高度な並列処理とエッジコンピューティングの互換性の実現

技術の進歩と機械学習の台頭により、データのボリュームは増加しています。世界のデータ生産は2020年には64.2ゼタバイトに達...

人工知能

「AWSは責任ある生成AIへの取り組みを再確認する」

人工知能(AI)や機械学習の先駆者として、AWSは責任を持って生成的AIの開発と展開に取り組んでいます生成的AIは、私たちの時...

AI研究

UC San Diegoの研究者DYffusion:空間的時間予測のためのダイナミクスに基づく拡散モデル

ダイナミックシステムの将来の振る舞いを予測することは、システムの進化を駆動する基礎的なダイナミクスを理解し、将来の状...

AI研究

CMUの研究者が「Zeno」という名前の、機械学習(ML)モデルの行動評価のためのフレームワークを紹介しました

AI駆動システムのプロトタイピングは常に複雑でした。しかし、プロトタイプを使用してしばらくすると、それがより機能的であ...