この投稿は Meta の PyTorch チームと共同執筆されました。
急速に進化する今日のAI環境において、企業は特定のニーズに合わせて高度な大規模言語モデル(LLM)を使用する方法を常に模索しています。基盤モデル(FM)はすぐに使用できる優れた機能を提供しますが、真の競争上の優位性は、微調整による詳細なモデルカスタマイズにあることがよくあります。ただし、複雑なタスクに合わせてLLMを微調整するには、通常、それらを効果的に調整および最適化するための高度なAIの専門知識が必要です。この課題を認識して、Metaは開発しました。 トーチチューンは、LLM の作成、微調整、実験を簡素化し、より幅広いユーザーやアプリケーションが利用しやすくなる PyTorch ネイティブ ライブラリです。
この投稿では、AWSはMetaのPyTorchチームと協力して、Metaのtorchtuneライブラリを使用してMeta Llamaのようなアーキテクチャを微調整し、AWSが提供するフルマネージド環境を使用する方法を紹介します。 Amazon SageMaker トレーニングモデルの微調整、推論、量子化、評価の段階的な実装を通じてこれを実証します。 メタラマ 3.1 単一の p8d.4xlarge ワーカー ノード (24 つの Nvidia A8 GPU を提供) で LoRA 微調整戦略を活用する 100B モデル。
ステップバイステップ ガイドに進む前に、まずさまざまな構成とインスタンス タイプにわたって Meta Llama 3.1 8B モデルを微調整して、テクニカル スタックのパフォーマンスを調査しました。
次のグラフからわかるように、p4d.24xlarge 70台で、5.48台のg8xlargeインスタンス(それぞれ10台のNVIDIA A47 GPUを搭載)よりも4%高いパフォーマンスを、ほぼ24%の低価格で実現できることがわかりました。そのため、この記事の例はpXNUMXd.XNUMXxlarge構成に最適化されています。ただし、SageMakerに渡されるパラメータを変更することで、同じコードを使用して、異なるインスタンス構成でシングルノードまたはマルチノードのトレーニングを実行することもできます。 推定者次のグラフでは、トレーニング時間をさらに最適化するために、 SageMaker 管理の温水プール 事前にダウンロードしたモデルにアクセスするには AmazonElasticファイルシステム (Amazon EFS)。
LLMの微調整の課題
生成AI モデルは、多くの有望なビジネスユースケースを提供します。ただし、これらの LLM の事実上の正確性と特定のビジネスドメインへの関連性を維持するには、微調整が必要です。モデルパラメータの数が増え、最新の LLM のコンテキスト長が長くなったため、このプロセスはメモリを大量に消費します。これらの課題に対処するために、LoRA (低ランク適応) や QLoRA (量子化低ランク適応) などの微調整戦略では、トランスフォーマーレイヤーに低ランクの並列構造を追加することで、トレーニング可能なパラメータの数を制限します。これにより、コモディティ GPU などのメモリの可用性が低いシステムでも LLM をトレーニングできます。ただし、新しい依存関係を処理する必要があり、トレーニングレシピとハイパーパラメータを新しい手法に適応させる必要があるため、複雑さが増します。
今日の企業が必要としているのは、エンドツーエンドのチューニング プロセスに抽象化を提供し、最も独断的な方法で一般的な落とし穴に対処する、これらの一般的な微調整手法のユーザー フレンドリなトレーニング レシピです。
torchtune はどのように役立ちますか?
トーチチューン は、LLM の微調整プロセスを民主化し、合理化することを目的とした PyTorch ネイティブ ライブラリです。これにより、研究者、開発者、組織がこれらの強力な LLM を特定のニーズや制約に簡単に適応できるようになります。YAML ファイルで設定できるさまざまな微調整手法のトレーニング レシピを提供します。レシピは、一般的な微調整方法 (フルウェイト、LoRA、QLoRA) だけでなく、推論や評価などの一般的なタスクも実装します。それらは、一連の重要な機能を自動的に適用します (FSDPこれらは、特定のモデル ファミリ (Meta Llama 3/3.1 や Mistral など) およびコンピューティング環境 (単一ノードとマルチノード) に固有のものです。
さらに、torchtuneは次のような主要なライブラリやフレームワークと統合されています。 ハグ顔データセット, EleutherAI の評価ハーネス、重みとバイアス。これにより、データの取り込みとマルチノードの微調整から推論と評価まで、生成 AI 微調整ライフサイクルの要件に対応できます。次の図は、この記事で説明する手順を視覚化したものです。
Job Status ページの下部にある インストール手順 と PyTorch ドキュメント torchtune とその概念について詳しく学びます。
ソリューションの概要
この投稿では、SageMaker Training を使用して、個別のコンピューティング クラスターでタスク固有のトレーニング ジョブを通じて torchtune レシピを実行する方法を説明します。SageMaker Training は、スケーラブルなモデル トレーニングを可能にする包括的なフルマネージド ML サービスです。柔軟なコンピューティング リソースの選択、カスタム ライブラリのサポート、従量課金制の価格モデル、自己修復機能を提供します。SageMaker は、ワークロード オーケストレーション、ヘルス チェック、インフラストラクチャを管理することで、トレーニング時間と総所有コストを削減します。
ソリューション アーキテクチャには、ワークフローの微調整におけるセキュリティと効率性を強化するために、次の主要コンポーネントが組み込まれています。
- セキュリティの強化 – トレーニング ジョブは仮想プライベート クラウド (VPC) のプライベート サブネット内で実行されるため、機械学習 (ML) ワークフローのセキュリティ体制が大幅に向上します。
- 効率的なストレージソリューション – Amazon EFS は、ML ワークフローのさまざまなフェーズにわたってモデルの保存とアクセスを高速化するために使用されます。
- カスタマイズ可能な環境 – トレーニング ジョブではカスタム コンテナを使用します。SageMaker のカスタム コンテナのサポートにより、必要なすべての依存関係、特殊なフレームワーク、ライブラリを 1 つの成果物にパッケージ化して、ML 環境を完全に制御できるようになります。
次の図はソリューションのアーキテクチャを示しています。ユーザーは、API またはコマンドラインインターフェイス (CLI) を介して SageMaker コントロールプレーンを呼び出すか、各ステップごとに SageMaker SDK を使用してプロセスを開始します。それに応じて、SageMaker は要求された数とタイプのコンピューティングインスタンスを使用してトレーニングジョブを起動し、特定のタスクを実行します。図で定義されている各ステップは、 Amazon シンプル ストレージ サービス (Amazon S3) バケットを作成し、Amazon EFS を使用してワークフローのさまざまなステージにわたってモデル成果物を保存およびアクセスします。
すべての torchtune ステップを切り離すことで、柔軟性と統合のバランスが実現され、ステップの独立した実行と、シームレスなパイプライン統合を使用したこのプロセスの自動化の可能性の両方が可能になります。
このユースケースでは、Meta Llama 3.1 8Bモデルを微調整し、 ロラその後、モデル推論を実行し、オプションでtorchtuneとSageMaker Trainingを使用してモデルを量子化および評価します。
レシピ、構成、データセット、プロンプトテンプレートは完全に構成可能で、torchtuneを要件に合わせて調整できます。これを実証するために、このユースケースではカスタムプロンプトテンプレートを使用し、オープンソースデータセットと組み合わせます。 サムスン Hugging Faceハブより。
torchtuneの マルチデバイス LoRA レシピ (lora_finetune_distributed) および SageMaker カスタマイズ版 Meta Llama 3.1 8B を使用する デフォルト設定 (llama3_1/8B_lora)。
前提条件
SageMaker Jupyter ノートブックを実行する前に、次の前提条件を完了する必要があります。
- 抱きしめる顔を作る アクセストークン ゲートリポジトリにアクセスするには メタラマ/メタラマ-3.1-8B ハグフェイスについて。
- 作る 重みとバイアス API キー ログ記録と監視のための重みとバイアスダッシュボードにアクセスする
- 1x ml.p4d.24xlarge と 1xml.g5.2xlarge の SageMaker サービス クォータをリクエストします。
- 作る AWS IDおよびアクセス管理 (わたし) 役割 マネージドポリシー AmazonSageMakerFullAccess、AmazonEC2FullAccess、AmazonElasticFileSystemFullAccess、および AWSCloudFormationFullAccess を使用して、例を実行するために SageMaker に必要なアクセス権を付与します。(これはデモンストレーション目的です。本番環境では、特定のセキュリティ要件に合わせて調整する必要があります。)
- 作る Amazon SageMakerスタジオ ドメイン(参照 Amazon SageMaker へのクイックセットアップ)を使用して、前述のロールでJupyterノートブックにアクセスします。 説明書 Docker ビルドの権限を設定します。
- ノートブック コンソールにログインし、GitHub リポジトリをクローンします。
- ノートブックipynbを実行して、VPCとAmazon EFSをセットアップします。 AWS CloudFormation スタック。
torchtune の設定を確認する
次の図は、ワークフローの手順を示しています。
使用ケースに応じたtorchtuneの設定は、直接 CLIを調整するこの投稿では、SageMaker ディレクトリ パスの構造に合わせて変更された構成ファイルを提供します。
torchtune はこれらの設定ファイルを使用して、レシピの実行中にコンポーネント (モデルやトークナイザーなど) を選択して設定します。
コンテナを構築する
この例では、torch nightlies や torchtune などのカスタム ライブラリを提供するためのカスタム コンテナーを作成します。次の手順を実行します。
実行する 1_build_container.ipynb
次のコマンドを実行して、このファイルを ECR リポジトリにプッシュします。
sm-docker
SageMaker StudioでDockerイメージを構築するために設計されたCLIツールです。 AWS コードビルドライブラリをノートブックの一部としてインストールします。
次に、 2_torchtune-llama3_1.ipynb
すべての微調整ワークフロー タスク用のノートブック。
すべてのタスクについて、次の 3 つの成果物をレビューします。
- torchtune 設定ファイル
- コンピューティングと Torchtune レシピの詳細を含む SageMaker タスク構成
- SageMaker タスク出力
微調整タスクを実行する
このセクションでは、微調整タスクを実行および監視する手順について説明します。
微調整ジョブを実行する
次のコードは、微調整ジョブのファイルのいくつかの主要コンポーネントを強調表示した、短縮された torchtune レシピ構成を示しています。
- LoRAランク構成を含むモデルコンポーネント
- データをトークン化するMeta Llama 3トークナイザー
- チェックポイントを読み書きするためのチェックポインター
- データセットをロードするためのデータセットコンポーネント
トレーニング ジョブのログ記録と監視には Weights & Biases を使用します。これにより、モデルのパフォーマンスを追跡しやすくなります。
次に、スクリプト内のユーティリティ関数に渡されるSageMakerタスクを定義します。 create_pytorch_estimator
このスクリプトは、定義されたすべてのパラメータを使用して PyTorch 推定器を作成します。
このタスクでは、 lora_finetune_distributed
設定付きトーチランレシピ config-l3.1-8b-lora.yaml
ml.p4d.24xlargeインスタンスで実行します。 use_downloaded_model
パラメータ。 ザ・ image_uri
パラメータはカスタム コンテナの URI を定義します。
タスクを作成して実行するには、次のコードを実行します。
次のコードは、タスクの出力と報告されたステータスを示しています。
最終モデルは Amazon EFS に保存されるため、ダウンロード時間のペナルティなしで利用できるようになります。
微調整ジョブを監視する
重みとバイアス ダッシュボードでは、トレーニング実行の損失や学習率などのさまざまな指標を監視できます。次の図は、GPU 使用率、GPU メモリ使用率、損失曲線を追跡したトレーニング実行の結果を示しています。
次のグラフでは、メモリ使用量を最適化するために、torchtune はランク 0 のみを使用して最初にモデルを CPU メモリにロードします。したがって、ランク 0 はチェックポイントからモデルの重みをロードする役割を担います。
この例は、GPU メモリを最大容量まで使用するように最適化されています。バッチ サイズをさらに大きくすると、CUDA メモリ不足 (OOM) エラーが発生します。
13 エポックの実行が完了するまでに約 XNUMX 分かかり、次のグラフに示す損失曲線が得られました。
モデル生成タスクを実行する
次のステップでは、以前に微調整したモデルの重みを使用してサンプルプロンプトに対する回答を生成し、それをベースモデルと比較します。
次のコードは生成レシピの構成を示しています config_l3.1_8b_gen_trained.yaml
主なパラメータは次のとおりです。
- フルモデルメタチェックポインタ – これを使用して、トレーニング済みモデルのチェックポイントをロードします
meta_model_0.pt
Amazon EFSより - カスタムテンプレート.要約テンプレート – 推論のためのプロンプトをフォーマットするためにこれを使用します
次に、SageMaker タスクを単一の ml.g5.2xlarge インスタンスで実行するように設定します。
SageMaker タスクの出力には、モデルの概要出力と、1 秒あたりのトークン数などの統計が表示されます。
元のモデルアーティファクトを使用して元のモデルから推論を生成することができます consolidated.00.pth
:
次のコードは、SageMaker タスク (generate_inference_on_original) で実行されたベース モデルの比較出力を示しています。Amanda がクッキーを焼いたことも示されているため、微調整されたモデルのパフォーマンスがベース モデルよりも主観的に優れていることがわかります。
モデル量子化タスクを実行する
推論を高速化し、モデルアーティファクトのサイズを小さくするために、トレーニング後の量子化を適用することができます。torchtuneは トルチャオ for トレーニング後の量子化.
レシピはInt8DynActInt4WeightQuantizerを使用するように設定されています。これは、int8のトークンごとの動的アクティベーション量子化とint4の軸ごとのグループ化された重み量子化を組み合わせたものです。詳細については、torchaoを参照してください。 実装.
ここでも単一の ml.g5.2xlarge インスタンスを使用し、SageMaker ウォーム プール構成を使用してコンピューティング ノードのスピンアップ時間を短縮します。
出力には、量子化されたモデルの場所と、プロセスによって節約されたメモリの量が表示されます。
量子化モデルmeta_model_0-8da4w.ptでモデル推論を実行するには、 推論固有の設定を更新する.
モデル評価タスクを実行する
最後に、データセットの検証部分で評価を実行して、微調整したモデルを客観的に評価してみましょう。
torchtuneは以下と統合します EleutherAIの評価ハーネス eleuther_eval レシピを提供します。
私たちの評価では、評価ハーネスのカスタム タスクを使用して、不正なメトリックを使用して対話の要約を評価します。
レシピ構成は、評価ハーネスをカスタム評価タスクにポイントします。
次のコードは、単一の ml.p4d.24xlarge インスタンスで実行する SageMaker タスクです。
ml.p4d.24xlarge でモデル評価を実行します。
次の表は、微調整されたモデルと基本モデルのタスク出力を示しています。
次の出力は、微調整されたモデルの出力です。
タスク | フィルタ | nショット | メトリック | リーダーシップ | 値 | ± | 標準エラー | |
サムサム | 2 | なし | なし | ルージュ1 | ↑ | 45.8661 | ± | 無し |
なし | なし | ルージュ2 | ↑ | 23.6071 | ± | 無し | ||
なし | なし | ルージュL | ↑ | 37.1828 | ± | 無し |
次の出力は基本モデル用です。
タスク | フィルタ | nショット | メトリック | リーダーシップ | 値 | ± | 標準エラー | |
サムサム | 2 | なし | なし | ルージュ1 | ↑ | 33.6109 | ± | 無し |
なし | なし | ルージュ2 | ↑ | 13.0929 | ± | 無し | ||
なし | なし | ルージュL | ↑ | 26.2371 | ± | 無し |
微調整されたモデルは、要約タスクで約 46% の改善を達成し、これはベースラインよりも約 12 ポイント優れています。
クリーンアップ
リソースをクリーンアップするには、次の手順を実行します。
- 使用されていないSageMaker Studioリソースを削除する.
- オプションで、 SageMaker Studioドメインを削除する.
- CloudFormation スタックを削除する VPC および Amazon EFS リソースを削除します。
まとめ
この記事では、torchtune と SageMaker でカスタム データセット プロンプト テンプレートを使用して、好みのコンピューティングとライブラリでさまざまな微調整戦略を使用して Meta Llama のようなアーキテクチャを微調整する方法について説明しました。このアーキテクチャにより、GPU メモリとパフォーマンスに最適化された微調整ジョブを柔軟に実行できます。SageMaker の P3.1 および G4 インスタンスを使用して Meta Llama5 モデルを微調整し、Weights & Biases などの観測ツールを使用して損失曲線、CPU および GPU 使用率を監視することでこれを実証しました。
SageMakerのトレーニング機能とMetaのtorchtuneライブラリを使用して、Meta Llamaのようなアーキテクチャを特定のビジネスユースケースに合わせて微調整することをお勧めします。今後のリリースと新機能に関する情報を入手するには、torchtuneを参照してください。 GitHubレポ 公式Amazon SageMakerトレーニング ドキュメント .
この投稿の公開に協力してくれた Kartikay Khandelwal 氏 (Meta のソフトウェア エンジニア)、Eli Uriegas 氏 (Meta のエンジニアリング マネージャー)、Raj Devnath 氏 (AWS のシニア プロダクト マネージャー テクニカル)、Arun Kumar Lokanatha 氏 (AWS のシニア ML ソリューション アーキテクト) に特に感謝します。
著者について
カンワルジット・クルミ アマゾン ウェブ サービスのプリンシパル ソリューション アーキテクトです。彼は AWS の顧客と協力してガイダンスと技術支援を提供し、AWS を使用する際のソリューションの価値を向上できるよう支援しています。 Kanwaljit は、コンテナ化された機械学習アプリケーションで顧客を支援することを専門としています。
ロイ・アレラ AWS のシニア AI/ML スペシャリストソリューションアーキテクトです。小規模なスタートアップから大企業まで、AWS のお客様が大規模な言語モデルを AWS 上で効率的にトレーニングおよびデプロイできるよう支援しています。
マティアス・レゾ PyTorch のパートナー エンジニアで、オープンソース、ハイパフォーマンス モデルの最適化、分散トレーニングに取り組んでいます (FSDP)、および推論。彼は、 ラマレシピ と トーチサーブ.
トレバー・ハーヴェイ アマゾン ウェブ サービス (AWS) の Generative AI のプリンシパル スペシャリストであり、AWS 認定ソリューションアーキテクト – プロフェッショナルです。PyTorch Foundation の理事会で投票権を持つメンバーを務め、オープンソースのディープラーニング フレームワークの戦略的発展に貢献しています。AWS では、顧客と協力して機械学習ソリューションを設計および実装し、Generative AI サービスの市場投入戦略を主導しています。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- PlatoData.Network 垂直生成 Ai。 自分自身に力を与えましょう。 こちらからアクセスしてください。
- プラトアイストリーム。 Web3 インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- プラトンESG。 カーボン、 クリーンテック、 エネルギー、 環境、 太陽、 廃棄物管理。 こちらからアクセスしてください。
- プラトンヘルス。 バイオテクノロジーと臨床試験のインテリジェンス。 こちらからアクセスしてください。
- 出典: https://aws.amazon.com/blogs/machine-learning/fine-tune-meta-llama-3-1-models-using-torchtune-on-amazon-sagemaker/