Proxmox VE / Ubuntu 24.04 / NVIDIA CUDA
Proxmox VE 上の Ubuntu 24.04 VM で Tesla V100 に NVIDIA Driver と CUDA 12.9 を導入する #
Proxmox VE の OVMF 仮想マシンに Tesla V100 を PCIe パススルーし、Ubuntu 24.04 側で
NVIDIA ドライバーと CUDA Toolkit 12.9 を導入する手順です。
OVMF 環境で出やすい BAR0 is 0M @ 0x0 /This PCI I/O region assigned to your NVIDIA device is invalid
の回避方法も含めています。
ゲストOS: Ubuntu 24.04 LTS
仮想化: Proxmox VE / KVM
ブート方式: OVMF (UEFI)
この記事の前提 #
- Proxmox ホスト側の IOMMU / VFIO 設定は完了している
- GPU をゲストへパススルーできる状態になっている
- ゲストOSは Ubuntu 24.04 LTS
- 本記事では compute 用 VM を想定している
検証構成 #
Proxmox VE / KVM
OVMF (UEFI)
q35
Tesla V100 PCIe 32GB
Ubuntu 24.04 LTS
12.9
なぜ CUDA 12.9 を使うのか #
Tesla V100 は Volta 世代の GPU です。CUDA 13 以降では Volta 向けのオフラインコンパイルと
ライブラリ対応が外れているため、V100 の開発環境は CUDA 12.x 系で固定しておくのが安全です。
本記事では CUDA Toolkit 12.9 を使います。
STEP 1
Proxmox 側で GPU パススルー向けの VM 設定にする #
まずは仮想マシンを GPU パススルー向けの構成にします。
すでに OVMF / q35 / Host PCI の設定が済んでいる場合は次へ進んでください。
qm stop 101
qm set 101 --bios ovmf
qm set 101 --machine q35
qm set 101 --hostpci0 65:00,pcie=1
qm start 101補足: 101 は VMID、65:00 は GPU の PCI アドレス例です。
実環境の値に置き換えてください。
STEP 2
OVMF 環境では MMIO aperture を拡張する #
ここが最大のハマりどころです。OVMF の UEFI VM では、GPU の BAR リソースが十分にマップされず、BAR0 is 0M @ 0x0 やThis PCI I/O region assigned to your NVIDIA device is invalid
が出ることがあります。その場合は X-PciMmio64Mb を追加して
MMIO aperture を広げます。
実際にこの設定を入れることで、Proxmox 上の OVMF 仮想マシンでnvidia-smi が正常動作するようになりました。
qm stop 101
qm set 101 --args '-fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=262144'
qm start 101ポイント: 変更後はゲストOSの再起動ではなく、
VM をいったん完全停止してから起動します。
STEP 3
Ubuntu 24.04 側で必須パッケージを入れる #
NVIDIA ドライバーと CUDA Toolkit の導入前に、カーネルヘッダやビルド関連ツールを入れておきます。
sudo apt update
sudo apt install -y linux-headers-$(uname -r) gcc g++ make wget pciutilsSTEP 4
NVIDIA 公式リポジトリを追加する #
Ubuntu 24.04 向けの NVIDIA 公式 APT リポジトリを追加します。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt updateSTEP 5
NVIDIA ドライバーを入れる #
ドライバーは 580 系で固定してから導入します。V100 は 580 系でもサポート対象です。
sudo apt install -y nvidia-driver-pinning-580
sudo apt install -y cuda-driversGUI が不要な compute-only 構成に寄せたい場合は、用途に応じてlibnvidia-compute と nvidia-dkms ベースの最小構成に
する方法もありますが、まずは cuda-drivers で正常動作を確認するのがわかりやすいです。
STEP 6
CUDA Toolkit 12.9 を固定で入れる #
CUDA の最新版に追従しないよう、メタパッケージ cuda-toolkit-12-9 を使って
12.9 系に固定します。
sudo apt install -y cuda-toolkit-12-9容量が厳しい場合: フル Toolkit はかなり大きいため、
最初はランタイムとコンパイラだけに絞る方法もあります。
sudo apt install -y cuda-runtime-12-9 cuda-compiler-12-9
# 開発ライブラリが必要になったら追加
sudo apt install -y cuda-libraries-dev-12-9STEP 7
PATH を設定して再起動する #
nvcc を使いやすくするために PATH とライブラリパスを通し、そのあと再起動します。
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
sudo rebootSTEP 8
動作確認を行う #
再起動後、GPU が見えているか、ドライバーがロードできているか、
CUDA コンパイラが使えるかを確認します。
source ~/.bashrc
uname -r
lspci | grep -i nvidia
nvidia-smi
nvidia-smi -L
nvcc --version
dmesg -T | grep -E 'NVRM|BAR0|nvidia'正常に入っていれば nvidia-smi に Tesla V100 が表示され、nvcc --version には CUDA 12.9 が表示されます。
トラブルシューティング #
BAR0 is 0M @ 0x0 が出る #
ほぼ確実に OVMF 側の MMIO aperture 不足です。まずはqm set 101 --args '-fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=262144'
を入れ、VM を完全停止してから起動し直してください。
nvidia-smi がドライバーと通信できない #
ドライバーのカーネルモジュールがロードできていない可能性があります。
まずは OVMF 側の MMIO 設定を見直し、そのうえでモジュール状態を確認します。
lsmod | grep -E 'nvidia|nouveau'
sudo journalctl -k -b | grep -Ei 'nvidia|nouveau|secure|module verification'Toolkit のインストール中にディスク不足になる #
フル Toolkit は大きいため、空き容量が少ない VM では途中で失敗することがあります。
その場合はいったんキャッシュを掃除し、必要最小限のパッケージ構成に切り替えるのが安全です。
df -h /
sudo apt clean
sudo apt autoremove -y
sudo apt --fix-broken installまとめ #
Proxmox VE 上の Ubuntu 24.04 VM で Tesla V100 を使う場合、
NVIDIA ドライバーと CUDA Toolkit の導入自体は難しくありません。
ただし、OVMF の仮想マシンでは MMIO aperture が不足して
NVIDIA ドライバーが起動しないことがあるため、X-PciMmio64Mb の設定が実質的なキーポイントになります。
これから同じ構成を組む場合は、OVMF / q35 / PCIe と
MMIO aperture の拡張を最初からセットで入れておくとスムーズです。
参考情報 #
免責事項 #
本記事は執筆時点の検証環境に基づいて作成しています。記載内容の正確性、完全性、
有用性、特定環境での動作を保証するものではありません。
OS、カーネル、GPU、ファームウェア、BIOS/UEFI、Proxmox VE、
NVIDIA ドライバー、CUDA Toolkit などのバージョン差異や更新状況により、
記載した手順や挙動が異なる場合があります。
- 本記事の手順には、GPU パススルー、カーネルモジュールの導入、起動設定の変更が含まれます。
- 実施前に、必ずバックアップ、スナップショット、メンテナンス計画を用意し、検証環境で十分に確認してください。
- 本記事の内容を利用したことによって生じた不具合、停止、障害、データ消失、その他いかなる損害についても、当社は責任を負いません。
- 実運用環境への適用は、利用者の判断と責任において実施してください。
- 記載している製品名、サービス名、会社名は、各社の商標または登録商標です。