ROCmを使用したAMD GPUでのAIモデル実行:本番環境対応ガイド

AI tutorial - IT technology blog
AI tutorial - IT technology blog

CUDAロックインからの脱却

長年、AI分野におけるNVIDIAの独占状態は避けられないものと感じられてきました。CUDAプラットフォームは業界のデファクトスタンダードとなり、予算の限られたAMDユーザーや開発者は事実上蚊帳の外に置かれていました。しかし、Radeon 7000シリーズの発売とROCm(Radeon Open Compute)の成熟により、ついに競争力のある選択肢が登場しました。もはや、高コストか高性能かの二択を迫られる必要はありません。

私は6ヶ月前、ローカルの推論サーバーをAMDハードウェアに切り替えました。理由は単純な計算です。RTX 4090は約1,700ドルしますが、Radeon RX 7900 XTXなら、同じ24GBのVRAMを約930ドルで手に入れることができます。純粋な速度では依然としてNVIDIAがリードしていますが、この価格対VRAM比は、ローカルで大規模言語モデル(LLM)をホストする上でゲームチェンジャーとなります。本ガイドでは、AMDベースの本番環境にPyTorchとStable Diffusionをデプロイするために私が行った具体的な手順を詳しく説明します。

ROCmスタックの仕組み

ROCmは、CUDAに対するAMDのオープンソースな回答です。NVIDIAエコシステムから移行する場合、理解すべき核となるコンポーネントはHIP(Heterogeneous-compute Interface for Portability)です。HIPは変換レイヤーとして機能し、開発者が最小限の変更でAMDとNVIDIAの両方のハードウェアで動作するC++コードを記述できるようにします。

PyTorchやTensorFlowのような現代のAIフレームワークは、現在ROCmをファーストクラスの市民として扱っています。ニューラルネットワークを書き直したり、ロジックを変更したりする必要はありません。通常、唯一の違いはパッケージマネージャーの参照先を別のライブラリリポジトリに向けることだけです。初期環境さえ設定してしまえば、シームレスな体験が得られます。

Linux環境のセットアップ

ROCmのサポートはWSL2経由でWindowsにも広がっていますが、安定性の面では依然として Linuxがゴールドスタンダードです。最高のドライバー互換性を得るために、Ubuntu 24.04 LTSを推奨します。私のテストでは、カーネル6.8のような安定版を使用することで、最新のディストリビューションでよく見られる断続的な「GPUの消失」エラーを防ぐことができました。

1. ドライバーとROCmのインストール

まず、システムを更新し、AMDの公式リポジトリからamdgpu-installスクリプトを取得します。このユーティリティは、ハードウェアをソフトウェアスタックにマッピングするという複雑なタスクを処理してくれます。

# システムを更新し、インストーラーを取得
sudo apt update && sudo apt upgrade -y
wget https://repo.radeon.com/amdgpu-install/6.1.2/ubuntu/jammy/amdgpu-install_6.1.60102-1_all.deb
sudo apt install ./amdgpu-install_6.1.60102-1_all.deb

# ドライバーとROCmライブラリをデプロイ
sudo amdgpu-install --usecase=rocm,hiplibsdk,dkms

権限設定はよくある落とし穴です。GPUハードウェアを直接操作するには、ユーザーアカウントをrenderグループとvideoグループに追加する必要があります。

sudo usermod -aG render $USER
sudo usermod -aG video $USER

再起動後、rocm-smiを実行してセットアップを確認してください。ターミナルにGPUのモデル名、現在の温度、VRAMの使用量が表示されるはずです。

2. AMD用PyTorchのインストール

標準のpip install torchコマンドはデフォルトでCUDAバイナリをインストールするため、ここでは動作しません。AMD専用のwheelリポジトリを指定する必要があります。ライブラリの競合を避けるために、クリーンな仮想環境を使用することを強くお勧めします。

# 環境を作成して有効化
python3 -m venv venv-rocm
source venv-rocm/bin/activate

# ROCm 6.1用にビルドされたPyTorchをインストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.1

すべてが動作しているか確認するために、Pythonで簡単なチェックを行います。興味深いことに、PyTorchは既存のスクリプトが壊れないように、AMDハードウェア上でもtorch.cudaという命名規則を維持しています。torch.cuda.is_available()Trueを返せば、AMDカードの準備は完了です。

LLMの実行:Llama 3以降

Llama 3 8BやMistral 7BのようなモデルをAMDでデプロイするのは、今や非常に簡単な作業です。Ollamaのようなツールは、標準でROCmサポートを統合しています。Hugging FaceのTransformersライブラリを使用する場合でも、コードはNVIDIAでのワークフローと99%同じです。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

# モデルは3090と同じようにVRAMにロードされます
model = AutoModelForCausalLM.from_pretrained(
    model_id, 
    torch_dtype=torch.bfloat16, 
    device_map="auto"
)

inputs = tokenizer("空はなぜ青いのですか?", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

パフォーマンスの現実:AMD vs NVIDIA

Llama 3 8B (FP16)を使用した本番環境のベンチマークでは、Radeon 7900 XTXは一貫して毎秒90〜105トークンを記録しました。これはRTX 3090とRTX 4080のちょうど中間に位置します。RTX 4090は依然として20〜30%高速ですが、AMDの価値提案は無視できないものがあります。

  • VRAMの優位性: 500ドル以下でRadeon 7800 XT(16GB VRAM)を入手できます。これにより、RTX 4070では収まりきらない非量子化7Bモデルや、高度に量子化された30Bモデルを実行することが可能になります。
  • 安定性: ROCm 6.0以降、以前のバージョンを悩ませていた「ドライバーのタイムアウト」問題が解決されました。現在のAMDベースの推論サーバーの稼働時間は、一度のクラッシュもなく45日を超えています。
  • ライブラリのサポート: ほとんどの主要ツールは完璧に動作します。ただし、TensorRTや特定のbitsandbytesカーネルのようなNVIDIA独自のツールに依存している場合は、コミュニティがメンテナンスしているROCmフォークを使用する必要があるかもしれません。

現場で得た教訓

アーキテクチャの切り替えは、常に完全にスムーズというわけではありません。移行を決めた場合は、トラブルシューティングの時間を節約するために、以下の3つの実用的なヒントを覚えておいてください。

  1. GPU IDのトリック: 一部のライブラリは、まだ新しいRDNA3カードを認識しません。多くの場合、.bashrcexport HSA_OVERRIDE_GFX_VERSION=11.0.0を設定することで解決できます。これにより、ソフトウェアを「騙して」、サポートされているモデルとしてカードを扱わせることができます。
  2. 公式コンテナの活用: 必要がない限り、ローカルの依存関係と戦うのはやめましょう。rocm/pytorchのDockerイメージは事前に最適化されており、通常、手動インストールよりも5〜10%のパフォーマンス向上が期待できます。
  3. 消費電力の監視: ハイエンドのRadeonカードは、負荷の高い推論中に消費電力が急増することがあります。サーバー室の冷却能力や電力供給に余裕がない場合は、rocm-smi --setpoweroverdriveを使用してワット数を制限してください。

結論

「AIはNVIDIAでしか動かない」という主張は、正式に過去のものとなりました。超ハイエンドのエンタープライズ市場では依然としてNVIDIAがリードしていますが、ローカルホスティングや開発において、AMDは強力な競争相手となっています。4桁ドルの価格を支払わずに24GBのVRAMが必要なら、Radeonカード上のROCm 6.1は、安定した高性能なソリューションです。ハードウェアのブランドを気にするのはやめて、構築するモデルに集中すべき時が来ました。

Share: