モデル別実行レシピ

AMD RadeonにPyTorch ROCmを導入し、GPU動作を確認する

torch.cuda.is_available()の結果だけでは、ROCmの導入やモデルの動作を判断できません。

現在のROCm1対応構成を確認し、AMD公式セレクターが示すRadeon向けwheelを仮想環境2に導入して、torch.version.hip3とGPU4演算で確認します。最後にアプリのセッションを再起動し、代表的な画像処理を繰り返せるか試します。

実行条件と要点
  • RX 9070 XT、Ubuntu、ドライバー、ROCm、PyTorchが現在の対応表で同じ構成にあることを確認します。
  • PyTorch ROCmもtorch.cuda名前空間を維持するため、torch.version.hipでHIPビルドを見分けます。
  • 小さなGPU演算が成功しても、画像アプリのモデルや拡張モジュールが動作する保証にはなりません。 問題が起きたら、環境全体を再導入する前に仮想環境とログを確認し、セッション再起動後に再現するか試します。

正確なGPU名と対応構成を最初に確認します

PyTorch5を入れたのにtorch.cuda6.is_available()がFalseになることも、TrueなのにGPU処理で失敗することもあります。出力一行だけではどちらも判断できません。AMD Radeon向けPyTorchはCUDA API7互換の名前を一部維持しているため、TrueでもNVIDIA CUDAを使っているとは限りません。本記事ではRX 9070 XT搭載のUbuntu Linuxデスクトップを例に、現在の対応構成を確認し、AMDの導入経路に従ったうえで、GPU検出と実際のモデル処理を別々に試します。

まずシステム情報でGPUの正確なモデル名を確認します。「Radeon 9000シリーズ」だけで済ませず、RX 9070 XT、RX 9070、CPU8内蔵GPUを区別してください。2026年9月27日時点で、AMD ROCm Core SDK 10.0.0のリリース日は8月26日です。GPUごとの構成は現在の統合対応表で確認します。RX 9070 XT、Ubuntuのバージョンとカーネル、ドライバー、ROCm、PyTorchが同じ対応経路にそろっているか読みます。OS概要や古いRadeon専用ガイドから別々のバージョンを拾って組み合わせないでください。正確な構成が見つからない場合は、対応表に合うOSやバージョンを選ぶことが復旧しやすい出発点です。

グラフィックカードの横に、小さな鉢植え、白紙、虫眼鏡が置かれています。
導入前に、GPU・OS・ドライバーが同じ対応構成にあるか照合します。

Pythonパッケージを仮想環境に分けます

以下はPython 3.12を使う場合に、パッケージをシステム全体ではなく分離した環境へ入れる例です。GPUドライバーやシステムROCmコンポーネントを導入するコマンドではありません。

仮想環境を使うと、torchなどのPythonライブラリをプロジェクトごとの場所に置けます。他のプロジェクトのパッケージを上書きせず、環境を終了または削除すれば試したパッケージを切り離せます。仮想環境の作成だけではホストのGPUドライバーは入りません。ドライバーはAMDのOS別手順に従います。一方、ユーザー空間のROCmライブラリは、選んだ公式パッケージの導入方法によって同梱される場合と別途設定が必要な場合があります。すべてのPyTorch導入で、先にROCm SDK全体を別途インストールする必要があるわけではありません。

Pythonパッケージを分離する仮想環境を作成
python3.12 -m venv ~/venvs/rocm-pytorch
source ~/venvs/rocm-pytorch/bin/activate
python -m pip install --upgrade pip wheel
この手順ではPythonパッケージの環境を分離します。ホストGPUドライバーとユーザー空間ライブラリの要件は、選んだAMD公式の導入方法で確認してください。
閉じたデスクトップPCの横に、ふた付きの小箱とファイルが机に置かれています。
仮想環境を分けると、試すパッケージを既存のPython構成と分けて管理できます。

AMD公式Radeonセレクターで対応するwheelを選びます

以下はRX 9070 XT(gfx1201)、Linux、ROCm 10.0、PyTorch 2.13.0を選んだときにAMDセレクターが示す公式の導入形式です。torch 2.13.0+rocm10.0.0、torchvision 0.28.0+rocm10.0.0、torchaudio 2.11.0.2+rocm10.0.0と、AMDのstable.repo.amd.com/rocm/whl-nextインデックスが記載されています。これは同セレクターの特定バージョン例であり、別のGPUやOSにそのまま使うコマンドではありません。導入先URLと対応状況は、公式セレクターと現在の対応表で併せて確認してください。PyPIの一般的なpip install torchではAMDビルドが選ばれる保証がないため、公式セレクターが生成するコマンドを基準にします。

Linux上のRX 9070 XT向けAMD PyTorchセレクター例
python -m pip install --index-url https://stable.repo.amd.com/rocm/whl-next/ \
  "torch[device-gfx1201]==2.13.0+rocm10.0.0" \
  "torchvision[device-gfx1201]==0.28.0+rocm10.0.0" \
  "torchaudio==2.11.0.2+rocm10.0.0"
固定バージョンの例です。実際に導入する前にセレクターでGPUとOSを選び、現在の対応構成と照合してください。

導入したPyTorchがHIPビルドか確認します

導入後は、まずどのPyTorchビルドが入ったか確認します。次のコマンドは、PyTorchが検出したPython、OS、GPU、ランタイム9の情報を出力します。

PyTorch、Python、OS、GPU、HIPランタイムの情報を確認します。torch.version.hipにはROCm版PyTorchのHIPバージョン文字列が表示されることがあります。torch.version.cudaとは区別してください。バージョン文字列はパッケージに含まれるランタイムを示しますが、GPUの公式対応や、すべてのモデル演算が動くことを証明するものではありません。collect_envの結果を共有する前に、ユーザー名を含むパスやトークン10・APIキーなどの秘密情報を伏せてください。

PyTorchが検出した環境情報を確認
python -m torch.utils.collect_env
出力を共有する前に、秘密情報と個人パスを伏せます。

GPUの検出と演算を別々に確認します

続いて、同じ仮想環境から小さなGPU演算を実行します。

ここでのtorch.cudaは、PyTorchがCUDAとHIPの両バックエンドで共通に公開するデバイスAPI名前空間です。ROCmビルドではtorch.version.hipに値が入り、torch.version.cudaは通常Noneでも、torch.cuda.is_available()はTrueになり得ます。デバイス名が表示されるのは、現在のPythonプロセスがGPUを検出したという意味です。最後の小さなテンソル加算では、GPUの列挙だけでなくGPU計算とCPUへの結果読み戻しも確認します。ただし基本チェックに過ぎず、大規模モデルがメモリに収まることや、アプリのすべての演算が動くことを証明しません。

HIPバージョンとGPU演算を確認
python -c 'import torch; print("PyTorch:", torch.__version__); print("HIP:", torch.version.hip); print("CUDA build:", torch.version.cuda); print("GPU available:", torch.cuda.is_available()); print("Device:", torch.cuda.get_device_name(0) if torch.cuda.is_available() else "not detected"); print("2x2 sum:", torch.ones((2,2), device="cuda").sum().item() if torch.cuda.is_available() else "skipped")'
ROCmビルドもtorch.cuda API名前空間を維持するため、torch.version.hipも確認します。

デバイス診断だけでアプリの動作を断定しません

GPUが見つからない場合、複数のパッケージを一度に削除せず、まず導入経路を確認します。python実行ファイルとpip show torchが同じ仮想環境を指すか調べます。続いてGPUモデル、Linuxディストリビューションとカーネル、AMDドライバー、ROCmコンポーネント、PyTorch wheelが公式対応構成にそろっているか照合します。WindowsネイティブではLinux手順を流用せず、Windows専用の対応表と導入ガイドを使います。WSLにはネイティブWindowsのGPU一覧ではなく、WSL専用の対応表とROCDXG経路が必要です。不一致箇所を探す前にシステム全体を入れ直すと、問題の切り分けが難しくなることがあります。

Linuxでrocminfoが導入済みなら、追加のデバイス情報を確認できます。ただしコマンドがないだけでGPUが未対応とは限りません。インストールに含まれていない、またはPATHにない可能性があるため、AMDの最新導入案内を確認してください。逆にrocminfoがGPUを表示しても、PyTorchがCPUビルドだったりアプリにROCm対応演算がなかったりすれば、目的のAIモデルは動かない場合があります。ハードウェアの列挙とアプリの動作は別の検査です。

この段階で失敗したら、まずデバイス識別を変える回避設定を追加しないでください。選んだOS・ドライバー・ROCm・PyTorchが対応表の同じ構成に含まれるか確認し、不一致があれば修正して同じ検査をやり直します。

任意:Linuxにrocminfoがあればデバイス列挙を確認
rocminfo
コマンドがない、または出力が空という理由だけで対応可否を判断しません。
グラフィックカード、閉じた緑色の箱、白紙、虫眼鏡が木の机に置かれています。
GPUが見えることを確認した後、実際に使うモデルとフレームワークで別途動作を試します。

実際のモデルで新しいアプリセッションから再現します

最後に、実際に使うモデルとプログラムで別途確認します。小さなPyTorchテンソル演算が成功しても、モデル形式、精度、カーネル、メモリ使用量、追加拡張によって失敗することがあります。アプリの公式ROCm対応・導入ガイドでGPUを確認し、小さな入力でロードと推論を試します。CUDAの有無だけを調べてROCmを遮断するプログラムもあれば、基本的なPyTorch演算は動いても必要な拡張モジュールのAMDビルドがない場合もあります。エラーが出たら、モデル読み込み、演算、メモリ確保のどの段階で止まったか記録し、該当する文書とサポート経路を探します。

RX 9070 XTとUbuntuの場合は、対応表の確認→選択されたwheelの導入→torch.version.hip・GPU利用可否・デバイス名の確認→小さなGPU演算の順に試します。すべて通ったら、実際の画像アプリで代表画像を1枚処理し、アプリを再起動して再現できることを確かめてから普段のサイズに広げます。失敗した段階のcollect_env、完全なログ、入力を保存し、構成または演算を絞り込みます。環境全体を消去して再導入する必要はありません。

用語の注釈

  1. ROCm — AMD GPUでAIや高性能計算を実行するソフトウェア基盤です。対応状況はGPUだけでなく、OS・ドライバー・フレームワークの版の組み合わせで確認します。

    本文に戻る
  2. Python仮想環境 — プロジェクトごとにPythonパッケージを分けて導入する環境です。版の衝突を減らすもので、仮想マシンとは異なります。

    本文に戻る
  3. HIP — GPU向けC++コードの移植に使うAPIと実行環境です。CUDAコードの移植を支援しますが、すべてのライブラリや演算の互換性、同等の速度を保証するものではありません。

    本文に戻る
  4. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  5. PyTorch — AIモデルを作成・実行するソフトウェアフレームワークです。モデルと合わせて、対応するPyTorchの版やハードウェアも確認します。

    本文に戻る
  6. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。CUDA向けのプログラムが他のGPUでそのまま動くとは限りません。

    本文に戻る
  7. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。APIという言葉だけで外部サーバーへの送信を意味するわけではありません。

    本文に戻る
  8. CPU — コンピューターで汎用のプログラム命令を実行する中央処理装置です。AI処理ではGPUなど他のプロセッサーと役割を分けることがあります。

    本文に戻る
  9. ランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあり、GPUランタイムライブラリと完成したサービングアプリは別の構成要素です。

    本文に戻る
  10. トークン — モデルが入力や出力を分けて処理する単位です。1トークンが1文字や一定の時間に相当するわけではありません。

    本文に戻る