← ルート選択に戻る

Quickstart — Docker

GPU で 1 回動かす

ROCm が入った Docker コンテナを使って、PyTorch で GPU 計算を 1 回動かすところまで進みます。環境を汚さず試せるのが Docker の強みです。

この教室では、Docker の細かいフラグを毎回書く代わりに、compose.yaml を使います。最初に1回だけ用意すれば、以後は短いコマンドで同じ環境を繰り返し使えます。

アカツキちゃん — Docker ルート

1前提を確認する

必要なものは2つだけです。

Docker が入っているか確認:

docker --version
docker compose version

どちらもバージョンが表示されれば OK です。

💡 Docker Compose について: 最近の Docker Desktop や docker-ce パッケージには docker compose が含まれています。docker compose version でバージョンが出ればそのまま使えます。

GPU の対応状況はこちらで確認できます:

👉 AMD 公式: 対応 GPU・OS 一覧

2compose.yaml を用意する

作業用のフォルダを作り、その中に compose.yaml を1つ置きます。これが ROCm 環境の設定ファイルになります。

mkdir -p ~/rocm-workspace && cd ~/rocm-workspace

以下の内容で compose.yaml を作成してください。

services:
  rocm:
    image: rocm/pytorch:latest
    tty: true
    stdin_open: true
    devices:
      - /dev/kfd
      - /dev/dri
    group_add:
      - video
    volumes:
      - .:/workspace
    working_dir: /workspace
💡 何を書いたのか:
image — AMD が公開している PyTorch 入り Docker イメージ
devices — GPU デバイスをコンテナに渡す
group_add — GPU にアクセスする権限を追加
volumes — このフォルダの中身をコンテナから読み書きできるようにする
working_dir — コンテナに入った瞬間に作業フォルダに立つようにする

イメージの取得(数 GB)は初回の起動時に自動で行われます。

3コンテナを起動する

compose.yaml があるフォルダで、この1行を実行します。

docker compose run --rm rocm

コンテナのシェルに入れたら成功です。

GPU が見えない場合: ホスト側で video グループに入っているか、ROCm のカーネルドライバが入っているかを確認してください。
それでも Permission denied が出る場合は、group_addrender を追加してみてください(Ubuntu 20.04 以降で必要になることがあります)。
docker run で直接起動したい場合(上級者向け)

compose.yaml の中身を docker run のフラグに展開するとこうなります:

docker run -it --rm \
  --device=/dev/kfd \
  --device=/dev/dri \
  --group-add video \
  -v "$PWD":/workspace \
  -w /workspace \
  rocm/pytorch:latest

長いので、この教室では compose を使います。

4コンテナ内で GPU が見えるか確認する

コンテナのシェルに入ったら、まず rocminfo で確認します。

rocminfo | head -30
Agent 1 Name: gfx1100 ...

GPU 名が出ていれば、コンテナから GPU が見えています。

5PyTorch から GPU が見えるか確認する

python3 -c "import torch; print('HIP:', torch.version.hip); print('GPU available:', torch.cuda.is_available())"
HIP: 6.2.xxxxx GPU available: True

True が出れば、PyTorch が GPU を認識しています。

6GPU で行列の掛け算を 1 回動かす

これが今日のゴールです。

python3 -c "
import torch
device = torch.device('cuda')
a = torch.randn(3, 3, device=device)
b = torch.randn(3, 3, device=device)
c = torch.matmul(a, b)
print('結果:', c)
print('デバイス:', c.device)
"
結果: tensor([[ 0.1234, -0.5678, 1.2345], [ 0.9876, -0.4321, 0.5432], [-0.1111, 0.2222, 0.3333]], device='cuda:0') デバイス: cuda:0

device='cuda:0' と出ていれば、GPU 上で計算できています

🎉 おめでとうございます!
Docker コンテナ内で GPU 計算が動きました。
torch.cuda という名前ですが、AMD GPU でも使える API 名です(詳しくは第1章で)。
次回からも docker compose run --rm rocm で同じ環境をすぐ使えます。

次のステップ

「動いた」ことが確認できたら、次は2つの方向があります。

第1章へ進む →