AMD GPUのLLM推論競争力を強化(2023年)
(blog.mlc.ai)- MLC-LLM はROCmによりAMD GPU上でLLMをコンパイル・展開できるようにし、Radeon RX 7900 XTXはLlama 2 7B/13B推論でRTX 4090の80%、RTX 3090 Tiの94%の速度に到達
- 比較対象の3つのGPUはいずれも 24GBメモリ と近い帯域幅を備えており、レイテンシに敏感なLLM推論ではFP16演算性能よりもメモリボトルネックの影響が大きい
- AMDの差はハードウェアそのものより ソフトウェア対応と最適化不足 による部分が大きく、ROCmへの投資と機械学習コンパイルが複数バックエンド対応コストを下げる軸として機能
- ROCmはRadeon 7900 XTXに、Vulkanは SteamDeckのAMD APU に適用され、4ビット量子化Llama-7Bをコンシューマー向けAMDデバイスでも実行できることを示した
- 結果は単一バッチのベンチマークに基づき、attention最適化によってAMD・NVIDIA双方の数値が変わり得るため、10%の誤差範囲 を見込んで解釈する必要がある
ROCmベースのAMD GPU LLM推論
- MLC-LLM はROCmを使ってAMD GPU上でLLMをコンパイルし、デプロイできるようにする
- Radeon RX 7900 XTXのLlama 2 7B/13B性能は以下の水準
- NVIDIA GeForce RTX 4090の 80% の速度
- NVIDIA GeForce RTX 3090 Tiの 94% の速度
- ROCmに加えてVulkanもサポートし、AMD APUを搭載したSteamDeckのようなデバイスへとLLM展開範囲を広げる
ハードウェア比較と実際のボトルネック
- AMD RX 7900 XTXは仕様上、RTX 4090およびRTX 3090 Tiと比較可能な位置にある
- 3つのGPUはいずれも 24GBメモリ を備え、同じサイズのモデルを搭載できる
- メモリ帯域幅も互いに近い
- RTX 4090はRX 7900 XTXよりFP16性能が2倍高く、RTX 3090 Tiは1.3倍高い
- レイテンシに敏感なLLM推論は大半が メモリボトルネック に当たるため、ここではFP16性能差が主要な制約ではない
- RX 7900 XTXはRTX 4090より 40%安価
- RTX 3090 Tiは前世代製品のため価格比較が難しく、参考点として用いられる
AMDの差の要因とMLCのアプローチ
- AMDが出遅れていた理由は、ハードウェアよりも関連モデル向けの ソフトウェア対応と最適化不足 に近い
- 2つの変化が差を縮める要因として働いた
- AMDが ROCmスタック に投資して追い上げている
- 機械学習コンパイルが複数バックエンド向けの汎用ソフトウェア対応コストを下げる
- 機械学習コンパイルは、ROCmやCUDAごとに個別のカーネルを直接書く代わりに、機械学習ワークロードをコンパイルして最適化を自動化する
- MLC-LLMはApache TVM Unity上に構築された、機械学習コンパイルベースのLLMデプロイソリューション
- Python中心の開発フローを提供
- 計算グラフ変換、GPUカーネルのレイアウト・スケジュール最適化、ネイティブ配備APIを含む
- CUDA、Metal、ROCm、Vulkan、OpenCLをサポート
- サーバー級GPUからiPhone、Androidなどのモバイルまで対象を広げる
AMD GPUとAPUのサポート方式
- AMD GPUのサポート経路にはROCm、OpenCL、Vulkan、WebGPUがある
- ROCm はAMDが最近強く推進しているスタックで、CUDAに似た構成要素を持つ
- Vulkan は最新のグラフィックス標準であり、GPUデバイス全般で広くサポートされている
- WebGPUはWebブラウザ上で計算を実行できるようにする最新のWeb標準
- CUDA以外のソリューションを構築する機械学習ソフトウェアは少なく、新しいハードウェアやGPUプログラミングモデルごとにスタックを複製するエンジニアリングコストは大きい
- MLCは各バックエンドごとにGPUカーネルを書き直すのではなく、自動コード生成 によって複数経路をサポートする
- 実際の性能は低レベルGPUランタイムの品質と、各プラットフォームでの利用可能性に左右される
ROCm最適化の実装
- Radeon 7900 XTXにはROCmを、SteamDeck APUにはVulkanを選択
- ROCmスタックはすぐに動作し、TVM UnityのPythonベース開発パイプラインにより、数時間で最適化版を追加できた
- ROCm対応では既存コンポーネントを再利用した
- CUDAやMetalなど既存ターゲット向けMLCパイプライン全体
- メモリ計画
- 演算子融合
- TVM TensorIRで記述された汎用GPUカーネル最適化空間
- LLVMを通じて低レベルROCmカーネルを生成するTVMのROCmコード生成フロー
- CUDAやMetalなど既存ターゲット向けMLCパイプライン全体
- 生成されたコードは共有ライブラリまたは静的ライブラリとしてエクスポートでき、CLI、Python、REST APIから呼び出せる
Llama 2ベンチマーク条件と解釈
- ベンチマークは Llama 2 7Bと13B を4ビット量子化で測定
- デコード性能は、単一のプロンプトトークンを入力し512トークンを生成する方式で測定
- すべての結果は 単一バッチ推論 基準
- ROCm 5.6リリース時点で、単一バッチ推論性能はNVIDIA 4090の80%に到達
- CUDAのベースラインは当時このタスクで最高水準と見なされていた
- より良いattention最適化など改善の余地があり、その最適化がMLCに入ればAMD・NVIDIA双方の数値が改善する可能性がある
- 最適化がNVIDIA側だけに実装されると差が20%から30%へ広がる可能性があるため、数値の解釈には 10%の誤差範囲 を設けることが推奨される
実行条件と例
- ベンチマーク再現用の事前ビルド済みwheelと実行手順が提供されている
- 実行条件は、LinuxでROCm 5.6以上が動作するAMD GPU
- ROCm有効の事前ビルド済みMLCパッケージのインストールは MLC-LLM try outドキュメント に従う
- Python例では
mlc_chat.ChatModuleでLlama-2-7b-chat-hf-q4f16_1モデルを読み込み、benchmark_generate("Hi", generate_length=512)で性能を測定する - MLC-LLMは対話型CLIも提供するが、ROCmではCLIをソースからビルドする必要があり、CLIビルドドキュメント に従う
SteamDeckでのVulkanと統合メモリ利用
- SteamDeckは、AMD APUを搭載したより広いAMDデバイス群の一例として使われる
- ROCmで使用可能なGPU VRAMはBIOSで 4GB に制限されている
- Mesa Vulkanドライバは統合メモリにより、この制限を超えてバッファを 最大16GB まで利用できるようにする
- このメモリ容量は4ビット量子化Llama-7Bの実行に十分
- その結果、さまざまなコンシューマー向けAMDデバイスでもLLM対応の可能性が確認された
今後の作業とプロジェクトリンク
- 生成AI時代にはハードウェア可用性が重要な課題となる
- 機械学習コンパイルは、複数のハードウェアバックエンドで 高性能かつ汎用的なデプロイ を可能にし、この課題を緩和できる
- 現在の研究はコンシューマー向けGPUに焦点を当てている
- これまでの経験では、コンシューマーGPU向けのMLC最適化はRTX 4090からA100、A10gへといった形でクラウドGPUにも一般化される場合がある
- 今後の作業領域は以下の通り
- バッチ処理とマルチGPU対応
- PyTorchエコシステム統合
- より多くの量子化方式とモデルアーキテクチャのサポート
- より多くのハードウェアバックエンドでの自動最適化拡大
- NVIDIAは継続的な革新により依然として先行しており、H100のような新ハードウェアやソフトウェア進化に応じて状況は変わり得る
- MLC-LLMの案内は プロジェクトページ で提供され、ソースコードは GitHubリポジトリ にある
まだコメントはありません。