第0章 — ネイティブ Linux
Quickstart で「動いた」ことを確認しましたか? ここでは、あのとき実行したコマンドが 何をしていたのか を理解します。
Quickstart で触ったものを、下から順に積み上げると次のようになります。
この章では、各層が何をしているのかと、Quickstart のコマンドがどの層を確認していたのかを見ていきます。
Quickstart では rocminfo を使いました。これは ROCm のランタイムが GPU を認識しているかを確認するツール です。
rocminfo は「OS → ドライバ → ROCm ランタイム → GPU」の経路が通っているかを確認する最初のチェックポイントです。
rocminfo の出力で見るべきところ:
gfx1100)groupsQuickstart で sudo usermod -aG video,render $USER を実行しました。
/dev/kfd や /dev/dri/*)へのアクセスは、video や render グループに属するユーザーだけに許可されています。このグループに入っていないと、root 以外のユーザーは GPU を使えません。
rocminfo でエラーが出るとき、いちばん多い原因がこの権限不足です。groups コマンドで video と render が出るか確認してみてください。
python3 -m venv ~/rocm-env
source ~/rocm-env/bin/activatepython3 でもインストール先によって別のライブラリ環境を持ちます。仮想環境を使わないと、システムの Python とパッケージが混ざって「入れたはずの PyTorch が見つからない」「バージョンが違う」といった事故が起きます。
仮想環境を使うと:
python3 -c "import torch; print(torch.version.hip)"pip install torch だけだと CPU 版が入ることがあります。torch.version.hip がバージョン番号を返せば ROCm 版、None なら ROCm 版ではありません。
もうひとつの確認方法:
python3 -c "print(torch.cuda.is_available())"
torch.cuda という名前なのに AMD GPU?cuda という名前にしています。ROCm 版でもこの名前はそのまま使います。名前は CUDA でも、中身は ROCm が動いています。詳しくは第1章で。
ROCm はカーネルドライバ、ランタイムライブラリ、ツール群からなる大きなソフトウェアスタックです。
この講座では、ネイティブ Linux と Docker の2つのルートを用意しています。
| ネイティブ | Docker | |
|---|---|---|
| ROCm のインストール | 自分でやる | コンテナに入っている |
| 環境の独立性 | venv で分離 | コンテナ自体が分離 |
| やり直し | venv を消して作り直す | コンテナを消して起動し直す |
| 向いている人 | Linux をそのまま使いたい | 環境を汚したくない |
第1章以降は、どちらのルートでも同じコードで進めます。
ここまでに出てきた 3 つの確認方法を整理します。
| コマンド | 確認できること | 確認する層 |
|---|---|---|
rocminfo |
ROCm ランタイムから GPU が見えるか | ドライバ〜ランタイム |
torch.version.hip |
PyTorch が ROCm 版かどうか | PyTorch |
torch.cuda.is_available() |
PyTorch から GPU が使えるか | PyTorch〜ランタイム〜ドライバ |
rocminfo は Python なしで使えるので、まずはここから。torch.version.hip は PyTorch の種類判定。torch.cuda.is_available() は全層を通した最終チェックです。
rocminfo が「ROCm のランタイムから GPU が見えるかの確認」だとわかったvideo / render グループが「GPU へのアクセス権限」だとわかったvenv が「Python 環境を分離する仕組み」だとわかったtorch.version.hip が「ROCm 版 PyTorch かどうかの目安」だとわかったtorch.cuda が AMD GPU でも使う API 名だと知った