Proxmox VE / Ubuntu 24.04 / NVIDIA CUDA
在 Proxmox VE 的 Ubuntu 24.04 VM 上為 Tesla V100 安裝 NVIDIA Driver 與 CUDA 12.9 #
本文說明如何在 Proxmox VE 上將 Tesla V100 以 PCIe Passthrough 方式直通給 OVMF 虛擬機,
並在 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
問題的解決方法。
Guest OS:Ubuntu 24.04 LTS
虛擬化技術:Proxmox VE / KVM
開機方式:OVMF(UEFI)
本文前提條件 #
- Proxmox 主機端的 IOMMU / VFIO 設定已完成
- GPU Passthrough 至客體機已可正常運作
- Guest OS 為 Ubuntu 24.04 LTS
- 本文以運算用途的 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 端設定 VM 以進行 GPU Passthrough #
首先,設定虛擬機以進行 GPU Passthrough。
若 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重點: 變更設定後,請務必進行
完整關機後再重新啟動,而非僅在客體系統內重新開機。
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-drivers若希望採用不含 GUI 的純運算設定,也可以
依使用情境切換為以 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
# Add development libraries later if needed
sudo apt install -y cuda-libraries-dev-12-9STEP 7
設定 PATH 並重新啟動 #
設定 PATH 與函式庫路徑以方便使用 nvcc,然後重新啟動。
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',
接著完整關機後再重新啟動。
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 Passthrough、核心模組安裝及開機設定變更。
- 執行前請先準備備份、快照與維運計畫,並於測試環境中充分驗證。
- 因使用本文內容所導致之任何缺陷、停機、故障、資料遺失或其他損害,我們概不負責。
- 於正式環境中實施與否,由使用者自行判斷並自負責任。
- 文中提及之產品名稱、服務名稱及公司名稱,均為各該公司之商標或註冊商標。