ROCm

概要

ROCm(Radeon Open Compute)は、AMD GPUでローカルLLM運用を可能にするオープンソースのGPUコンピューティングプラットフォームです。NVIDIA CUDAの代替として、PyTorch、TensorFlowでのAI推論処理をサポートします。

HIP(Heterogeneous-Compute Interface for Portability)により、CUDAコードをAMD GPUで実行可能にし、コストパフォーマンスに優れたAI環境を提供します。

ローカルLLM推論の文脈でROCmが選ばれる最大の理由は、同価格帯・同世代のNVIDIA GPUと比べてVRAM容量あたりの価格が安く、大容量メモリを積んだRadeon PROシリーズやInstinctシリーズが大規模モデルの実行に使いやすい点です。一方でソフトウェアの成熟度はCUDAに一日の長があり、「動くには動くが、環境構築や特定モデルでのトラブルシューティングに手間がかかる」というのが実務での率直な評価です。導入前にこのトレードオフを理解しておく必要があります。

ROCmの仕組み(アーキテクチャ)

ROCmは単一のソフトウェアではなく、カーネルドライバからAIライブラリまでを含む複数レイヤーのスタックです。おおまかな構成は次の通りです。

  • amdgpuカーネルドライバ: Linuxカーネルに組み込まれるGPUドライバ本体
  • ROCr ランタイム: HSA(Heterogeneous System Architecture)仕様に準拠したユーザーモードランタイムで、GPUへのディスパッチを担当
  • HIPランタイム/HIP API: CUDA Runtime APIとほぼ1対1で対応するC++ API。CUDAで書かれたコードをhipify-perl/hipify-clangで変換し、HIP経由でAMD GPU上にコンパイルできる
  • rocBLAS/hipBLAS: 行列演算(GEMM)ライブラリ。cuBLASに相当し、LLM推論の中心的な演算を担う
  • MIOpen: 畳み込みや正規化などの深層学習プリミティブ集。cuDNNに相当
  • RCCL: マルチGPU間の集合通信ライブラリ。NVIDIAのNCCLに相当し、複数GPUでの分散推論・学習に使われる
  • MIGraphX: 推論グラフの最適化エンジン。TensorRTに近い役割

llama.cppやPyTorchがGPUを使う際は、これらのライブラリのうちHIP/rocBLAS(またはhipBLASLt)を通じて演算をディスパッチします。アプリケーション側から見ると「CUDAのAPI呼び出しがHIPのAPI呼び出しに置き換わっている」だけで、上位のPythonコードやモデル定義をほぼ変更せずに使えるように設計されています。

もう一つ押さえておきたいのが「gfxターゲットID」という概念です。ROCmはGPUのアーキテクチャ世代をgfx1100(RDNA3、RX 7900シリーズ相当)、gfx90a(CDNA2、MI200シリーズ)、gfx942(CDNA3、MI300シリーズ)のようなコード名で管理しており、ライブラリのビルドやサポート判定はこのgfxIDを基準に行われます。「対応GPUリストに載っているか」を確認する際は、製品名ではなくこのgfxIDで調べるのが確実です。

オープンソース

  • MIT/Apache 2.0ライセンス: 商用利用可能
  • ソースコード公開: 完全に透明な開発
  • コミュニティ開発: 開発者による改善
  • ベンダーロックイン回避: オープンな選択肢

CUDA互換性

  • HIP API: CUDAコードの移植
  • hipify-perl/hipify-clang: 自動変換ツール
  • PyTorch対応: 公式ROCm版
  • TensorFlow対応: ROCm最適化版

インストールと設定

Ubuntu 22.04でのセットアップ

# ROCm リポジトリ追加
wget https://repo.radeon.com/amdgpu-install/latest/ubuntu/jammy/amdgpu-install_latest.deb
sudo dpkg -i amdgpu-install_latest.deb

# ROCm インストール
sudo apt update
sudo apt install amdgpu-dkms rocm

# ユーザーをgroupに追加
sudo usermod -a -G render,video $USER

# 再起動後、ROCm確認
rocm-smi
rocminfo

PyTorch ROCm版

# PyTorch ROCm版インストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6

# ROCm利用確認
python3 -c "
import torch
print(f'CUDA (ROCm) available: {torch.cuda.is_available()}')
print(f'Device count: {torch.cuda.device_count()}')
if torch.cuda.is_available():
    print(f'Device name: {torch.cuda.get_device_name()}')
"

OS対応についても補足しておきます。ROCmは基本的にLinux(Ubuntu、RHEL系)を主対象としており、AMDはWSL2(Windows Subsystem for Linux)上でのROCm動作もサポート範囲に含めています。一方でWindowsネイティブ環境での対応はHIP SDKの一部機能に限られ、ローカルLLM推論用途としてはネイティブLinuxかWSL2を使う構成の方が情報量・トラブル対応のしやすさの面で無難です。

ローカルLLMでの使用例

Transformersライブラリ

# ROCmでのLLM推論
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# AMD GPU利用設定
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"Using device: {device}")

# モデル読み込み
model = AutoModelForCausalLM.from_pretrained(
    "microsoft/DialoGPT-large",
    torch_dtype=torch.float16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-large")

# 推論実行
inputs = tokenizer.encode("Hello, how are you?", return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=50, do_sample=True)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

llama.cpp(ROCm対応)

# llama.cpp ROCm版ビルド
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# ROCm有効でコンパイル
make LLAMA_HIPBLAS=1

# AMD GPUで実行
./main -m models/llama-2-7b-chat.q4_0.gguf \
       -p "User: What is machine learning?" \
       -ngl 35 \  # GPU層数指定
       -c 2048

Ollamaでの利用

OllamaはROCm対応のコンテナイメージ(ollama/ollama:rocmタグ)を公式に提供しており、対応リストに載っていないRDNA系コンシューマーGPUでもHSA_OVERRIDE_GFX_VERSION環境変数でgfxバージョンを偽装することで動作させられるケースがあります。

# Ollama ROCm版(Docker)
docker run -d --device=/dev/kfd --device=/dev/dri \
  -v ollama:/root/.ollama -p 11434:11434 \
  --name ollama ollama/ollama:rocm

# 未対応判定のGPUでgfxバージョンを上書きする場合の例
export HSA_OVERRIDE_GFX_VERSION=11.0.0
ollama run llama3:8b

なおHSA_OVERRIDE_GFX_VERSIONによる回避策は非公式サポートである点に注意してください。同じgfx世代内(例:RDNA3同士)であれば動作実績が多い一方、思わぬ演算誤差やクラッシュが起きても公式サポートの対象外になります。

LM Studioでの利用

LM Studioはllama.cppをベースにした推論エンジンを内蔵しており、GPUバックエンドをCUDA・Vulkan・Apple Metalなどから選択できます。AMD GPUについては、Vulkanバックエンド経由でGPUオフロードを行うのが最も手軽で、追加のドライバスタックを入れずに動作します。ROCmバックエンドを使う設定が用意されているバージョンもありますが、対応状況はアップデートのたびに変わりやすいため、導入前に手元のバージョンでの対応状況を公式サイトや設定画面で確認することをおすすめします。

VRAM要件とモデルサイズの目安

GGUF形式で量子化したモデルを動かす場合の、パラメータ数・量子化レベル別のVRAM使用量の目安です。実際にはコンテキスト長やバッチサイズによって数GB程度上下します。

モデル規模 Q4_K_M(4bit相当) Q8_0(8bit) FP16
7B 4〜5GB程度 7〜8GB程度 14GB程度
13B 8〜9GB程度 13〜14GB程度 26GB程度
34B前後 19〜20GB程度 34〜36GB程度 68GB程度
70B 38〜40GB程度 68〜70GB程度 140GB程度

この目安で見ると、24GB VRAMのRX 7900 XTX 1枚では「7B・13BはQ4〜Q8で余裕」「34B前後はQ4でギリギリ」「70BはQ4でも収まらずCPUオフロードかマルチGPUが必要」という判断がつきます。MI300X(192GB HBM3)クラスになれば70BクラスをFP16に近い精度のまま1枚で扱える点が、データセンター向けInstinctシリーズの強みです。

量子化(GGUF・4bit等)とROCmの関係

llama.cppのHIPBLASビルドは、CUDA版と同じGGUFフォーマット・同じk-quant系の量子化手法(Q4_K_M、Q5_K_M、Q8_0など)をそのまま扱えます。量子化アルゴリズム自体はGPUベンダーに依存しない共通仕様であり、「NVIDIA用に量子化したモデルをAMD用に作り直す」といった作業は不要です。

ただし高速化の効き方には差があります。NVIDIAのTensor Coreは4bit・8bit整数演算に特化した専用ハードウェアユニットを持ちますが、AMDのコンシューマー向けRDNA系GPUは同等の専用ユニット(AI Accelerator/WMMA)の世代が浅く、k-quant系カーネルの最適化がCUDA版ほど煮詰まっていない場合があります。そのため「同じ量子化レベルでも、AMD GPUでの高速化率がNVIDIA GPUほど大きく出ない」ことがある、という点は保守的に見込んでおくべきです。

推論速度(tokens/秒)の目安

llama.cpp+ROCmでの推論速度は、ビルドオプションやコンテキスト長、同時実行プロセス数によって大きく変動するため断定的な数値は出しにくいですが、公開されているベンチマーク報告のレンジで見ると次のような目安になります。

  • RX 7900 XTX(24GB)+ 7B・Q4_K_M: 70〜100トークン/秒程度という報告が多い
  • RX 7900 XTX(24GB)+ 13B・Q4_K_M: 40〜60トークン/秒程度
  • 同条件のRTX 4090(CUDA): 上記レンジより1.2〜1.5倍程度速いという報告が比較的多い

この差は年々縮まっている傾向にありますが、「AMD GPUはCUDA環境より体感でやや遅いことがある」という前提でベンチマークを取り、自分の用途で許容できるかを確認するのが実務的です。

対応AMD GPU

推奨GPU(gfx90a/gfx940系・公式サポート)

  • MI300X: データセンター、192GB HBM3、大規模モデルの単体運用向け
  • MI250X: データセンター、128GB HBM2e
  • MI210: ワークステーション、64GB HBM2e
  • MI100: エントリー、32GB HBM2

コンシューマーGPU(gfx1100系・一部公式/実験的対応)

  • RX 7900 XTX: 24GB、コスパ重視、公式サポート対象
  • RX 7900 XT: 20GB、ミドルハイ、公式サポート対象
  • RX 6900 XT: 16GB、前世代、コミュニティでの動作報告は多いが公式サポート対象外の時期がある

「公式サポートGPUリスト」に載っていないRDNA3世代のミドルレンジ・エントリーGPU(RX 7800 XT、RX 7600等)でも、前述のHSA_OVERRIDE_GFX_VERSIONを使い同じgfx1100系として認識させることで動作した、という報告がコミュニティのフォーラムやGitHub Issueに多数あります。ただし公式に保証された組み合わせではないため、業務用途では検証工数を見込んでおく必要があります。

パフォーマンス最適化

環境変数設定

# ~/.bashrcに追加
export ROCM_PATH=/opt/rocm
export HIP_VISIBLE_DEVICES=0
export HSA_OVERRIDE_GFX_VERSION=10.3.0  # 互換性向上

# PyTorch最適化
export PYTORCH_ROCM_ARCH=gfx1030  # GPU世代指定
export HIP_LAUNCH_BLOCKING=0       # 非同期実行

メモリ最適化

  • Mixed Precision: FP16使用で高速化
  • Gradient Checkpointing: メモリ使用量削減
  • Model Parallel: 大規模モデル対応
  • Dynamic Batching: 効率的なバッチ処理

llama.cppでは-ngl(GPUにオフロードするレイヤー数)を段階的に増やしながらVRAM使用量とtokens/秒を計測し、OOM(メモリ不足)が出る一歩手前の値に固定するのが定石です。フルオフロードできない大きさのモデルでは、一部レイヤーをCPU側に残す部分オフロードでも実用的な速度が出ることがあります。

ROCm導入のメリットとデメリット

メリット

  • VRAM容量あたりのコスト: 同容量のNVIDIA GPUと比べて価格優位なモデルがある
  • オープンソース: ソースコードが公開されており、ライブラリ単位でのカスタマイズや不具合調査がしやすい
  • 大容量メモリのデータセンター向けGPU: MI300X等はHBM3を大量に搭載し、大規模モデルを分割せず1枚で扱える構成が組みやすい
  • ベンダーロックイン回避: 特定ベンダーの調達事情やライセンス方針に依存しない選択肢を持てる

技術的制約

  • Linux限定: Windows公式未対応
  • ドライバ依存: 適切なカーネルバージョン必要
  • 最適化レベル: CUDA比で劣る場合あり
  • フレームワーク対応: 一部ライブラリで制限

パフォーマンス比較

  • NVIDIA CUDA: 100%(基準)
  • AMD ROCm: 70-85%(モデル・処理依存)
  • 最適化後ROCm: 80-95%(適切な設定時)

混同されやすい用語・類似技術との違い

ROCm周辺には名前の似た概念や競合技術が多く、混同されがちです。実務で判断に迷いやすいポイントを整理します。

用語 位置づけ 対応ハードウェア
ROCm ドライバ〜ライブラリまで含むAMDのGPUコンピューティング基盤全体 AMD GPU(Linux中心)
HIP ROCmに含まれるCUDA互換のAPI/言語仕様。ROCmの一部品 AMD GPU(一部NVIDIA GPUにも変換可)
CUDA NVIDIAが単独開発・提供するクローズドソースの計算基盤 NVIDIA GPUのみ
Vulkan(llama.cppバックエンド) Khronos策定のクロスベンダーAPI。追加ドライバ導入なしで動くことが多い NVIDIA/AMD/Intel問わず
OpenCL 旧来のクロスベンダー標準規格。近年はROCmやVulkanへの置き換えが進む NVIDIA/AMD/Intel等
oneAPI/SYCL Intelが主導するオープンな計算基盤。ROCmと似た立ち位置 Intel GPU(Arc等)中心
Metal/MPS Appleのグラフィックス・計算API。ROCmとは無関係の別スタック Apple製GPU(M2/M3等)

実務でよく起きる誤解が2つあります。1つ目は「ROCmを入れればCUDA向けのコードがそのまま動く」という誤解で、実際にはHIPへの変換(hipify)とビルドし直しが必要です。2つ目は「Radeon(RDNA、gfx10xx/gfx11xx系)とInstinct(CDNA、gfx9xx系)は同じROCmだから性能特性も同じ」という誤解で、両者はアーキテクチャが異なり、RDNAはゲーミング用途と兼用の設計、CDNAはレイトレーシング等のグラフィックス機能を持たない演算特化設計という違いがあります。ローカルLLM用途で情報を探す際は、この2系統を区別して読むと精度が上がります。

また、AMD GPUでローカルLLMを動かす選択肢はROCmだけではありません。llama.cppのVulkanバックエンドは、ROCmのようなツールチェーン一式のインストールが不要で「ドライバさえ入っていれば動く」手軽さが利点です。GEMM演算の最適化ではROCmのhipBLAS/hipBLASLtに軍配が上がることが多いため、実務では「まずVulkan版で動作確認し、速度面で不満があればROCm版のビルドを試す」という順序がよく取られます。

実用的な選択指針

ROCm推奨ケース

  • コスト重視: AMD GPUの価格優位性
  • Linux環境: サーバー・開発環境
  • オープンソース志向: ベンダーロックイン回避
  • 実験・研究用途: 個人プロジェクト

CUDA推奨ケース

  • 商用運用: 安定性・サポート重視
  • Windows環境: デスクトップ利用
  • 最高性能: パフォーマンス最優先
  • 幅広いフレームワーク: ライブラリ多様性

導入前チェックリスト

  • 使いたい推論エンジン(Ollama/llama.cpp/vLLM等)のROCm対応について、直近数ヶ月のGitHub Issueやリリースノートを確認する
  • 手持ち・購入予定のGPUのgfxアーキテクチャがROCmの公式サポートリストに含まれるか確認する。含まれない場合はHSA_OVERRIDE_GFX_VERSIONでの動作報告を検索する
  • カーネルバージョン・ディストリビューションとROCmバージョンの組み合わせをリリースノートで確認する(組み合わせによっては動作しないことがある)
  • 可能であれば本番導入前にレンタルサーバーや貸出機材で実際のモデル・量子化レベルでの動作検証を行う

2025-2026年の最新動向

ROCm 6.xのリリースにより安定性と互換性が大幅に向上し、PyTorch 2.x系との統合が改善されています。

AMD Instinct MI300Xがデータセンター向けに普及し、192GB HBM3搭載でNVIDIA H100と競合しています。

llama.cppのROCm最適化が進み、hipBLASLt等の新しい演算ライブラリの取り込みによって、AMD GPUでのローカルLLM推論性能がCUDAに近づく傾向にあります。

コンシューマー向けでは、統合メモリを大容量搭載したAMDのAPU(Ryzen AI Max等のいわゆる「Strix Halo」系)が、GPU用の専用VRAMを持たずにシステムメモリを大きく共有できる特性から、ローカルLLM用途のコスト効率が良い選択肢として話題になることが増えています。ただしこの系統はROCmの公式サポート状況が個別に確認を要する段階であり、購入前の情報収集が重要です。

よくある質問(FAQ)

Q. ROCmとは?

AMDのオープンソースGPUコンピューティング基盤です。CUDAに相当し、AMD GPUでAI推論・学習が可能です。カーネルドライバ、HIPランタイム、rocBLASやMIOpenといった演算ライブラリまでを含むスタック全体を指します。

Q. CUDAとの違いは?

CUDAはNVIDIA専用のクローズドソース、ROCmはAMD用のオープンソースです。HIPというCUDA互換APIによりコード移植が比較的容易ですが、エコシステムの規模とライブラリの最適化の成熟度は依然としてCUDAが優位です。

Q. ローカルLLMで使える?

llama.cpp、Ollama等がROCm対応しています。AMD GPU(RX 7900 XTX等)でGGUF形式の量子化モデルを使ったローカルLLM推論が可能です。

Q. OllamaやLM StudioでROCmは使える?

Ollamaはollama/ollama:rocmタグの公式イメージでROCmに対応しています。LM Studioはllama.cppベースでVulkan・CUDA等のバックエンドを切り替えられ、AMD GPUではVulkan経由での利用が最も手軽です。ROCmバックエンドの対応状況はバージョンにより変わるため事前確認が必要です。

Q. 何GBのVRAMがあれば何Bのモデルが動く?

目安として、4bit量子化(Q4_K_M)の場合7Bで4〜5GB程度、13Bで8〜9GB程度、70Bで38〜40GB程度のVRAMが必要です。24GB VRAMのGPU1枚では34B前後がQ4でギリギリ収まる規模感です。

Q. ROCmとVulkanバックエンドはどちらを使うべき?

手軽さ重視ならVulkan、性能の追い込みが必要ならROCmという使い分けが実務的です。まずVulkan版llama.cppで動作確認し、速度に不満があればROCm版のビルドを試すという順序がよく取られます。

Q. WindowsでROCmは使える?

ROCm本体はLinux中心のサポートで、WindowsではHIP SDKの一部機能に対応するのみです。WindowsからAMD GPUでローカルLLMを使う場合は、WSL2上でROCmを使うか、Vulkanバックエンドを使う構成が現実的です。

関連用語

外部リンク