在 Proxmox VE 上的 Ubuntu 24.04 虚拟机中为 Tesla V100 安装 NVIDIA 驱动和 CUDA 12.9

在 Proxmox VE 上的 Ubuntu 24.04 虚拟机中为 Tesla V100 安装 NVIDIA 驱动和 CUDA 12.9

3 min read

Proxmox VE / Ubuntu 24.04 / NVIDIA CUDA

在 Proxmox VE 上的 Ubuntu 24.04 虚拟机中为 Tesla V100 安装 NVIDIA 驱动和 CUDA 12.9 #

本文介绍如何将 Tesla V100 通过 PCIe 直通到 Proxmox VE 上的 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
问题的解决方法。

目标 GPU:Tesla V100
客户机操作系统:Ubuntu 24.04 LTS
虚拟化方式:Proxmox VE / KVM
启动方式:OVMF(UEFI)

本文前提条件 #

  • Proxmox 宿主机侧的 IOMMU / VFIO 设置已完成
  • GPU 直通到客户机已可正常工作
  • 客户机操作系统为 Ubuntu 24.04 LTS
  • 本文假定用于计算用途的虚拟机

验证环境配置 #

虚拟化平台
Proxmox VE / KVM
虚拟机 BIOS
OVMF(UEFI)
机器类型
q35
GPU
Tesla V100 PCIe 32GB
客户机操作系统
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。

步骤 1

在 Proxmox 侧配置虚拟机以实现 GPU 直通 #

首先,配置虚拟机以实现 GPU 直通。
如果 OVMF / q35 / 主机 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 是虚拟机 ID 的示例,65:00 是 GPU PCI 地址的示例。
请根据实际环境的值进行替换。

步骤 2

在 OVMF 环境中扩大 MMIO 地址空间 #

这是最大的坑点。在 OVMF UEFI 虚拟机中,GPU 的 BAR 资源往往不能被充分映射,
从而导致出现 BAR0 is 0M @ 0x0 或
This PCI I/O region assigned to your NVIDIA device is invalid。
这种情况下,可以添加 X-PciMmio64Mb 参数来
扩大 MMIO 地址空间。

添加此设置实际上解决了在 Proxmox 的
OVMF 虚拟机上 nvidia-smi 无法正常工作的问题。

qm stop 101
qm set 101 --args '-fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=262144'
qm start 101

要点:更改后请
完全关闭虚拟机后再重新启动,而不是仅仅重启客户机操作系统。

步骤 3

在 Ubuntu 24.04 上安装所需软件包 #

在安装 NVIDIA 驱动和 CUDA Toolkit 之前,请先安装内核头文件和构建相关工具。

sudo apt update
sudo apt install -y linux-headers-$(uname -r) gcc g++ make wget pciutils

步骤 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

步骤 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 确认可以正常工作,思路会更清晰。

步骤 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-9

步骤 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

步骤 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 地址空间不足所致。请先应用
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 体积较大,因此在可用空间有限的虚拟机上安装可能会中途失败。
此时请清理缓存,并切换为精简的软件包配置以确保安全。

df -h /
sudo apt clean
sudo apt autoremove -y
sudo apt --fix-broken install

总结 #

在 Proxmox VE 上的 Ubuntu 24.04 虚拟机中,为 Tesla V100 安装 NVIDIA 驱动和
CUDA Toolkit 本身并不困难。但是在 OVMF 虚拟机上,MMIO 地址空间不足
可能导致 NVIDIA 驱动无法启动,因此配置
X-PciMmio64Mb 成为一个实用的关键点。

今后在搭建相同配置时,建议从一开始就同时配置好
OVMF / q35 / PCIe 以及
MMIO 地址空间扩展。

参考信息 #

免责声明 #

本文是基于撰写时的验证环境编写的。我们不对文中所述内容的
准确性、完整性、实用性,或在特定环境下的运行情况做任何保证。
文中所述的步骤和行为,可能会因操作系统、内核、GPU、固件、BIOS/UEFI、Proxmox VE、
NVIDIA 驱动、CUDA Toolkit 等的版本差异或更新状态而有所不同。

  • 本文中的步骤包括 GPU 直通、内核模块安装以及启动配置的变更。
  • 实施前请准备好备份、快照及维护计划,并在测试环境中充分验证。
  • 因使用本文内容而导致的任何缺陷、宕机、故障、数据丢失或其他损失,我们概不负责。
  • 在生产环境中的实施,由用户自行判断并承担相应责任。
  • 文中提及的产品名称、服务名称及公司名称,均为其各自公司的商标或注册商标。
Updated on 2026年6月9日

What are your feelings

  • Happy
  • 常规
  • Sad

©2020 BESTNET.LLC . All Rights Reserved.