Proxmox VE 上の Ubuntu 24.04 VM で Tesla V100 に NVIDIA Driver と CUDA 12.9 を導入する

Proxmox VE 上の Ubuntu 24.04 VM で Tesla V100 に NVIDIA Driver と CUDA 12.9 を導入する

2 min read

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
の回避方法も含めています。

対象GPU: Tesla V100
ゲストOS: Ubuntu 24.04 LTS
仮想化: Proxmox VE / KVM
ブート方式: OVMF (UEFI)

この記事の前提 #

  • Proxmox ホスト側の IOMMU / VFIO 設定は完了している
  • GPU をゲストへパススルーできる状態になっている
  • ゲストOSは Ubuntu 24.04 LTS
  • 本記事では compute 用 VM を想定している

検証構成 #

Hypervisor
Proxmox VE / KVM
VM BIOS
OVMF (UEFI)
Machine Type
q35
GPU
Tesla V100 PCIe 32GB
Guest OS
Ubuntu 24.04 LTS
CUDA Toolkit
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 pciutils

STEP 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 update

STEP 5

NVIDIA ドライバーを入れる #

ドライバーは 580 系で固定してから導入します。V100 は 580 系でもサポート対象です。

sudo apt install -y nvidia-driver-pinning-580
sudo apt install -y cuda-drivers

GUI が不要な compute-only 構成に寄せたい場合は、用途に応じて
libnvidia-computenvidia-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-9

STEP 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 reboot

STEP 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 パススルー、カーネルモジュールの導入、起動設定の変更が含まれます。
  • 実施前に、必ずバックアップ、スナップショット、メンテナンス計画を用意し、検証環境で十分に確認してください。
  • 本記事の内容を利用したことによって生じた不具合、停止、障害、データ消失、その他いかなる損害についても、当社は責任を負いません。
  • 実運用環境への適用は、利用者の判断と責任において実施してください。
  • 記載している製品名、サービス名、会社名は、各社の商標または登録商標です。
Updated on 2026年3月27日

What are your feelings

  • Happy
  • Normal
  • Sad