記事一覧に戻る

6月6日の次回 Hugging Cast に参加して、投稿者への質問、Azure 上での Llama 3 の MI300X へのデプロイのライブデモ、Ryzen AI PC 上でのローカルモデルデプロイのボーナスデモをご覧ください!

登録は https://streamyard.com/watch/iMZUvJnmz8BV

はじめに

私たち Hugging Face では、オープンモデルとオープンソースを用いて、どのようなフレームワーク、クラウド、スタックを使いたい場合でも、AI を簡単に構築できるようにしたいと考えています。 重要な要素のひとつは、多様なハードウェア上で AI モデルをデプロイできることです。 AMD とのコラボレーションにより、約 1 年にわたり、AMD Instinct™ および Radeon™ GPU、EPYC™ および Ryzen™ CPU、Ryzen AI NPU など、さまざまなアクセラレータに投資し、AMD の製品群上で最大の AI コミュニティを常に実行できるデバイスを提供できるようにしています。 本日、Hugging Face と AMD は、AMD Instinct MI300 をはじめとする最新世代の AMD GPU サーバーを、Hugging Face プラットフォーム全体でファーストクラス・シチズンとして統合できるようにするために、精力的に協力してきたことを発表できることを嬉しく思います。 ローカル環境でのプロトタイピングから、Azure ND Mi300x V5 VM 上での本番環境でのモデル実行まで、transformers[1]、text-generation-inference およびその他のライブラリを使用する場合、または Hugging Face の製品およびソリューションを使用する場合に、コードを一切変更する必要はありません。Hugging Face 上で AMD MI300 を簡単に利用し、最良のパフォーマンスを得られるようにしたいと考えています。 さっそく見ていきましょう!

オープンソースおよび本番環境の有効化

Transformers および text-generation-inference における AMD Instinct GPU のサポート維持

AI 分野で現在非常に多くの動きがある中、MI300 シリーズを長期的に適切にテストおよび監視することが絶対に必要でした。 そのために、Hugging Face のインフラチームと緊密に連携し、継続的インテグレーションおよびデプロイメント (CI/CD) を有効にするための堅牢なビルディングブロックを、痛みを伴わず、すでに存在する他のシステムに影響を与えることなく利用できるようにしてきました。

これを実現するため、AMD および Microsoft Azure チームと協力し、MI300 をターゲットとするビルディングブロックとして、最近導入された Azure ND MI300x V5 を活用しました。 わずか数時間で、インフラチームは MI300 を操作できる状態にデプロイ、セットアップ、稼働させることができました!

また、古いインフラから、Hugging Face のコラボレーターがハードウェア固有のポッド上で実行したいすべての Github ワークフローをスケジューリングするマネージド Kubernetes クラスタに移行しました。 この移行により、開発者から抽象化されたさまざまなハードウェアプラットフォーム上で、まったく同じ CI/CD パイプラインを実行できるようになりました。 Azure MI300X VM 上で、数日のうちにほとんど労力をかけずに CI/CD を稼働させることができました。

その結果、transformers および text-generation-inference は、AMD Instinct GPU の前世代である MI250 と最新の MI300 の両方で定期的にテストされるようになりました。 実際には、数万件のユニットテストがこれらのリポジトリの状態を定期的に検証し、長期的な統合の正確性と堅牢性を確保しています。

本番 AI ワークロードのパフォーマンス向上

推論パフォーマンス

前述のとおり、私たちは新しい AMD Instinct MI300 GPU を、オープンソースの推論ソリューションである text-generation-inference (TGI) を通じて効率的に推論ワークロードを実行できるようにする作業を行ってきました。 TGI は 3 つの異なるコンポーネントと見なすことができます: - 主に HTTP のトランスポート層で、クライアントからの API リクエストを公開および受信します - スケジューリング層で、リクエストをまとめてバッチ処理(連続バッチ処理)し、ユーザー体験に影響を与えずにハードウェア上の計算密度を高めます - モデリング層で、実際の計算をデバイス上で実行し、モデルに関連する高度に最適化されたルーチンを活用します

ここでは、AMD のエンジニアの助けを借りて、最後のコンポーネントであるモデリングに焦点を当て、Meta Llama ファミリー などのモデルをサービングするためのワークロードを効果的にセットアップ、実行、最適化しました。特に以下の点に取り組みました: - Flash Attention v2 - Paged Attention - GPTQ/AWQ 圧縮技術 - ROCm TunableOp の PyTorch 統合 - 最適化された融合カーネルの統合

これらの多くはすでにかなり前から存在しており、FlashAttention v2PagedAttention、GPTQ/AWQ 圧縮手法(特にその最適化されたルーチン/カーネル)です。上記 3 つについては詳細を述べず、詳細についてはそれぞれの元の実装ページをご覧ください。

それでも、まったく新しいハードウェアプラットフォームと新しい SDK リリースでは、ユーザーがこの新しいプラットフォームから最大限のパワーを引き出せるように、すべての部分を慎重に検証、プロファイリング、最適化することが重要でした。

最後に、この TGI リリースの一環として、PyTorch 2.3 の一部として最近リリースされた AMD TunableOp を統合しています。 TunableOp は、汎用行列乗算(GEMM)の実行方法を、形状とデータ型に関して最も効率的な方法を探すための汎用的なメカニズムを提供します。 TunableOp は PyTorch に統合されており、現在も活発に開発中ですが、以下に示すように、ユーザー体験に大きな影響を与えることなく GEMM 演算のパフォーマンスを向上させることが可能です。 具体的には、TunableOp を使用することで、小さな入力シーケンス(自己回帰型モデル生成のデコードフェーズに相当)でレイテンシが 8〜10% 向上します。

実際、新しい TGI インスタンスが作成されると、ダミーペイロードを使用して初期ウォーミングステップが起動され、モデルとそのメモリが割り当てられ、準備が整えられます。

TunableOp では、GEMM ルーチンチューナーを有効にし、シーケンス長や最大バッチサイズなど、ユーザーが TGI に提供したパラメータに関して最も最適な設定を探す時間を割り当てます。 ウォームアップフェーズが完了すると、チューナーを無効にし、サーバーの残りの寿命にわたって最適化されたルーチンを活用します。

前述のとおり、Microsoft BUILD で最近発表された Azure ND MI300x V5 を使用して、8 台の AMD Instinct GPU を搭載したインスタンス上で、Meta Llama 3 70B を用いたすべてのベンチマークを前世代の MI250 と比較して実行しました。デプロイメントでは、最初のトークンまでのレイテンシ(プリフィルとも呼ばれる)で 2〜3 倍の高速化を、続く自己回帰型デコードフェーズでは 2 倍のレイテンシ高速化を観測しました。

Meta Llama3 70B における text-generation-inference の mi300 と mi250 の結果

Meta Llama 3 70B における TGI レイテンシ結果。Azure VM 上の AMD Instinct MI300X と前世代の AMD Instinct MI250 の比較

モデルファインチューニングのパフォーマンス

Hugging Face のライブラリは、モデルのファインチューニングにも使用できます。 Transformers および PEFT ライブラリを使用して、Llama 3 70B を低ランクアダプタ (LoRA) でファインチューニングします。複数のデバイスにわたる並列処理を扱うため、Accelerate ライブラリ を通じて DeepSpeed Zero3 を活用します。

Llama 3 70B では、バッチサイズ 2 で 448 トークンのバッチで構成されるワークロードを使用します。低ランクアダプタを使用することで、モデルの本来の 70,570,090,496 パラメータは凍結され、代わりに 低ランクアダプタ のおかげで追加の 16,384,000 パラメータのサブセットを学習します。

Llama 3 70B での比較から、MI250 を使用した前世代の AMD Instinct を搭載した HPC サーバーと比較して、MI300X を搭載した Azure VM 上で約 2 倍高速に学習できることがわかりました。

mi300 と mi250 における PEFT ファインチューニング

さらに、MI300X は MI250 の 128 GB と比較して 192 GB の HBM3 メモリを搭載しているため、Meta Llama 3 70B を単一のデバイス上で完全にロードしてファインチューニングすることが可能ですが、MI250 GPU では float16 または bfloat16 で単一のデバイスに約 140 GB のモデル全体を収めることができません。 ベンチマークを再現し、検証することが常に重要であるため、このブログで紹介した性能を収集するために使用したすべての成果物とソースコードを含むコンパニオン Github リポジトリを公開しています。

今後の予定

新しい AMD Instinct MI300 GPU 向けに、非常にエキサイティングな機能がパイプラインに多数あります。 今後数週間で多大な努力を投資する主要な分野の 1 つは、ミニフロート(float8 およびそれ以下)です。 これらのデータレイアウトは、情報を非一様に圧縮するという固有の利点があり、整数で直面する問題のいくつかを軽減します。

LLM での推論のようなシナリオでは、通常 LLM で使用されるキーバリューキャッシュのサイズを半分にすることができます。 後で、float8 で保存されたキーバリューキャッシュと float8/float8 行列乗算を組み合わせることで、メモリフットプリントの削減とともにさらなるパフォーマンス上の利点をもたらします。

結論

ご覧のとおり、AMD MI300 はトレーニングから推論までのエンドツーエンドのユースケースをカバーする AI ユースケースに大幅なパフォーマンス向上をもたらします。 Hugging Face では、これらの新しいハードウェアと統合により、コミュニティと企業が何を達成できるかを見ることに非常に興奮しています。 皆さんからのご連絡をお待ちしており、ユースケースでお手伝いできることを楽しみにしています。

AMD GPU 向けの最新のパフォーマンス最適化については、ぜひ optimum-AMD および text-generation-inference の Github リポジトリをご覧ください!