3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Proxmox 8.x】LXC コンテナに AMD GPU をパススルーする方法

Posted at

はじめに

前回 (NVIDIA パススルー) の続きです!また、Immich の記事でもあげましたがこちらは AMD GPU をコンテナにパススルーする、というもののみをピックアップした記事にしようと思います!

自宅サーバーにしているミニ PC に高性能な内蔵 GPU (Radeon 780M) を搭載しているので、これを Proxmox 上の LXC コンテナにパススルーしてみました。

この記事では、ホスト側の設定からコンテナ内での ROCm 認識まで、一連の流れをメモのような形で紹介します。

目次

  1. ホスト側の準備
    1-1. IOMMU とカーネルパラメータの設定
    1-2. ROCm / ドライバーのインストール
    1-3. デバイスファイルの権限設定 (udev)
  2. LXC コンテナの設定 (Device Passthrough)
    2-1. コンテナの作成
    2-2. パススルー設定 (GUI)
  3. コンテナ内の設定
    3-1. ROCm のインストール (DKMSなし)
    3-2. 環境変数の設定
  4. 動作確認
  5. おわり

環境

  • OS: Proxmox VE 8.x
  • GPU: AMD Radeon 780M (Ryzen 7 255)
  • Container: Ubuntu 24.04 LTS (LXC, Unprivileged)

1. ホスト側の準備

LXC コンテナはホストのカーネルを共有するため、ホスト側で GPU が正しく認識され、適切なドライバがロードされている必要がある。

1.1 IOMMU とカーネルパラメータの設定

まずは BIOS/UEFI 設定で IOMMU が有効になっていることを確認。
その上で、Proxmox (ホスト) のブートローダー (GRUB) 設定を変更して、IOMMU をパススルーモードで有効化する。

# Proxmoxホストに ssh 接続
ssh root@<ホストのIPアドレス>

# 1. GRUB 設定ファイルを編集
nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT の行を以下のように変更。quiet の後ろに追記する。

GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt amd_iommu=on"

編集したら保存して、設定を反映させる。

# 2. GRUB 設定の反映と再起動
update-grub
reboot

1.2 ROCm / ドライバーのインストール

続いて必要なドライバーをインストールする。

コンテナ内で ROCm を使用する場合、ホスト側にも必要なカーネルモジュールを入れる必要があるため、最新の ROCm をインストールする。

ROCm のバージョンは定期的に更新されるため、最新バージョンは AMD 公式リポジトリ で確認すること。

# 1. 必要なパッケージのインストール
apt update
apt install build-essential pve-headers-$(uname -r)

# 2. AMD GPU モジュール設定(パフォーマンス最適化)
cat > /etc/modprobe.d/amdgpu.conf << 'EOF'
options amdgpu ppfeaturemask=0xffffffff
options amdgpu dc=1
EOF

# 3. ROCmリポジトリの追加とインストール
wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
apt install ./amdgpu-install_7.1.1.70101-1_all.deb 
apt update

# 4. ドライバーのインストール (DKMS含む)
apt install amdgpu-dkms

# 5. initramfsの更新と再起動
update-initramfs -u -k all
reboot

LXC の場合、ホスト側で amdgpu-dkms を入れてカーネルモジュールを有効にしておく必要がある。

再起動後、GPU が正しく認識されているか確認する。

root@pve-server:~# lspci -nn | grep VGA
c8:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix3 [1002:1900] (rev ba)

# ドライバーが読み込まれているか確認
root@pve-server:~# lsmod | grep amdgpu
amdgpu              13299712  0
amdxcp                 12288  1 amdgpu
i2c_algo_bit           16384  1 amdgpu
drm_ttm_helper         12288  1 amdgpu
ttm                    98304  2 amdgpu,drm_ttm_helper
drm_exec               12288  1 amdgpu
gpu_sched              61440  1 amdgpu
drm_suballoc_helper    12288  1 amdgpu
drm_buddy              20480  1 amdgpu
drm_display_helper    225280  1 amdgpu
video                  77824  2 amdgpu,nvidia_modeset

1.3 デバイスファイルの権限設定 (udev)

ここが AMD GPU パススルーの重要なポイント。
デフォルトでは /dev/dri/renderD128 などのデバイスファイルは root:render 権限になっており、非特権コンテナからアクセスできないことがある。
そこで、udev ルールを作成して、デバイスファイルのパーミッションを 0666 (全ユーザー読み書き可) に設定してしまう。

# 1. udevルールファイルの作成
cat > /etc/udev/rules.d/99-gpu-chmod666.rules << 'EOF'
# AMD GPU デバイスの権限設定
KERNEL=="renderD128", MODE="0666"
KERNEL=="kfd", MODE="0666", GROUP="render"
KERNEL=="card0", MODE="0666"
EOF

# 2. ルールの適用
udevadm control --reload-rules && udevadm trigger

確認してみる。

root@pve-server:~# ls -la /dev/dri/
total 0
drwxr-xr-x  3 root root        140 Dec 15 01:59 .
drwxr-xr-x 20 root root       5720 Dec 15 01:59 ..
drwxr-xr-x  2 root root        120 Dec 15 01:59 by-path
crw-rw-rw-  1 root video  226,   0 Dec 15 01:55 card0
crw-rw----  1 root video  226,   1 Dec 15 01:59 card1
crw-rw-rw-  1 root render 226, 128 Dec 15 01:55 renderD128
crw-rw----  1 root render 226, 129 Dec 15 01:59 renderD129
root@pve-server:~# ls -la /dev/kfd
crw-rw-rw- 1 root render 235, 0 Dec 15 01:55 /dev/kfd

rw-rw-rw- (0666) になっていれば OK。

crw-rw-rw- 1 root video 226,   0 ... /dev/dri/card0
crw-rw-rw- 1 root render 226, 128 ... /dev/dri/renderD128
crw-rw-rw- 1 root render 511,   0 ... /dev/kfd

2. LXC コンテナの設定 (Device Passthrough)

2.1 コンテナの作成

通常通り、非特権コンテナ (Unprivileged Container) を作成する。
テンプレートは ubuntu-24.04-standard などを使用。

# コンテナ作成例 (Web UI からやっても OK)
pct create 100 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
  --hostname amd-gpu-container \
  --cores 4 \
  --memory 8192 \
  --rootfs local-lvm:32 \
  --unprivileged 1 \
  --features nesting=1

2.2 パススルー設定 (GUI)

GUI の場合 (推奨)

  1. Proxmox Web UI で対象のコンテナ (100) を選択。
  2. Resources タブをクリック。
  3. Add -> Device Passthrough を選択。
    image.png
  4. 以下のデバイスを追加していく。
    image.png
    • /dev/dri/card0
    • /dev/dri/renderD128
    • /dev/kfd
      image.png

Mode は 0666 に設定し、GID はホスト側の render グループの ID (通常 104) などを指定しておくと確実だが、先ほど udev で 0666 にしているので空欄でも動くことが多い。

設定が終わったらコンテナを起動します。

3. コンテナ内の設定

コンテナ内でも ROCm ライブラリなどが必要だが、カーネルモジュール (DKMS) はインストールしない(ホストのものを使うため)。

3.1 ROCm のインストール (DKMSなし)

まずはコンテナ内の環境を最新にする。

# コンテナ内で実行
apt update && apt upgrade -y
apt install -y build-essential curl wget git

次に ROCm をインストールするが、--no-dkms オプション(またはユースケース指定)を使う。

このようにホストからコンテナにファイルを転送してインストールすることもできる。

root@pve-server:~# pct push 100 amdgpu-install_7.1.1.70101-1_all.deb /root/downloads/amdgpu-install_7.1.1.70101-1_all.deb
# 1. インストーラーのダウンロード (ホストと同じバージョン推奨)
wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
apt install ./amdgpu-install_7.1.1.70101-1_all.deb
apt update

# 2. ROCm ランタイムのみインストール (DKMSなし!)
amdgpu-install --usecase=rocm --no-dkms

これでカーネルモジュールのビルドエラーを回避しつつ、必要なライブラリだけが入る。

root@pve-container:~# amd-smi
+------------------------------------------------------------------------------+
| AMD-SMI 26.2.0+021c61fc      amdgpu version: Linuxver ROCm version: 7.1.1    |
| VBIOS version: 022.012.000.027.000001                                        |
| Platform: Linux Baremetal                                                    |
|-------------------------------------+----------------------------------------|
| BDF                        GPU-Name | Mem-Uti   Temp   UEC       Power-Usage |
| GPU  HIP-ID  OAM-ID  Partition-Mode | GFX-Uti    Fan               Mem-Usage |
|=====================================+========================================|
| 0000:c8:00.0    AMD Radeon Graphics | N/A        N/A   0             N/A/0 W |
|   0       0     N/A             N/A | N/A        N/A              68/2048 MB |
+-------------------------------------+----------------------------------------+
+------------------------------------------------------------------------------+
| Processes:                                                                   |
|  GPU        PID  Process Name          GTT_MEM  VRAM_MEM  MEM_USAGE     CU % |
|==============================================================================|
|  No running processes found                                                  |
+------------------------------------------------------------------------------+

3.2 環境変数の設定 (動かなければやると良いかも)

特に Radeon 780M (RDNA3) などの民生用 GPU を使う場合、ROCm が公式サポート外として認識しないことがある。
そこで、環境変数で「この GPU は GFX1100 (RDNA3) 互換だよ!」と教えてあげる必要がある。

# .bashrc に追記
echo 'export HSA_OVERRIDE_GFX_VERSION=11.0.0' >> ~/.bashrc
echo 'export PATH=$PATH:/opt/rocm/bin' >> ~/.bashrc
source ~/.bashrc

HSA_OVERRIDE_GFX_VERSION の値は GPU アーキテクチャによって異なる。
Radeon 780M (Phoenix/Hawk Point) は 11.0.0 で動くことが多いが、古い GPU の場合は 10.3.0 など適切な値を調べる。

4. 動作確認

コンテナ内で rocminfoclinfo を実行してみる。

root@pve-container:~# rocminfo | grep "Marketing Name"
  Marketing Name:
  Marketing Name:          AMD Radeon Graphics

このように GPU 名が表示されれば成功!

おわり

AMD GPU のパススルーは NVIDIA に比べて情報が少ないが、NVIDIA と同様にホストとコンテナに「同じバージョン」のドライバーをインストールすれば問題なく動作する。

ミニ PC などを使用していて、もし Proxmox に AMD GPU をパススルーしたい場合は、この記事を参考にしてみてください!

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?