虚拟机基于Proxmox VE运行,之前独立显卡正常,突然掉显卡,需要你排除下问题 从截图看,VM 内执行 nvidia-smi 返回: NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver 这类在 Proxmox VE 里“之前正常、突然掉卡”的情况,通常不是 CUDA 本身问题,而是: VFIO PCI Passthrough 失效 宿主机抢占了显卡 VM 启动后 GPU 没正确 reset 驱动模块没加载 IOMMU/ACS 状态变化 内核升级后 NVIDIA DKMS 失配 显卡掉线(Xid / BAR / reset bug) 下面按“最快定位路径”排查。 一、先确认:显卡到底还在不在 VM 里 在虚拟机内执行: lspci | grep -i nvidia 正常应该看到: 01:00.0 VGA compatible controller: NVIDIA ... 01:00.1 Audio device: NVIDIA ... 情况 A:完全看不到 NVIDIA 说明: PCI Passthrough 已经失效 或 PVE 宿主机重新占用了显卡 或 VM 配置变了 这时去 PVE 宿主机检查。 情况 B:能看到 NVIDIA,但 nvidia-smi 不工作 继续: lsmod | grep nvidia 如果没输出: 说明驱动没加载。 再看: dmesg | grep -i nvidia 重点看: module version mismatch tainted failed to initialize BAR allocation failed GPU has fallen off the bus 二、PVE 宿主机重点检查 登录 Proxmox 宿主机。 1. 检查宿主机有没有抢显卡 执行: lspci -nnk | grep -A3 -i nvidia 重点看: Kernel driver in use: 正常情况(直通成功) 应该是: Kernel driver in use: vfio-pci 异常情况 如果看到: Kernel driver in use: nvidia 或者: nouveau 说明宿主机把显卡抢走了。 这是最常见原因。 2. 检查 VFIO 是否失效 执行: dmesg | grep -i vfio 以及: dmesg | grep -i iommu 正常应该有: DMAR: IOMMU enabled vfio-pci ... 3. 检查是不是内核升级后出问题 很多“突然掉卡”是: PVE 自动升级 kernel NVIDIA DKMS 没重编译 VFIO 参数失效 看当前内核: uname -r 再看最近安装: grep "install linux-image" /var/log/dpkg.log | tail 如果最近升级过内核,非常可疑。 三、检查 VM 配置 查看: cat /etc/pve/qemu-server/VMID.conf 重点看: hostpci0: 0000:01:00,pcie=1,x-vga=1 machine: q35 bios: ovmf 最重要的几个点 必须: machine: q35 bios: ovmf 显卡建议: pcie=1 某些 NVIDIA 卡还需要: x-vga=1 四、典型“突然掉卡”原因(高概率) 1. GPU reset bug(非常常见) 现象: 第一次开机正常 VM 重启后显卡消失 nvidia-smi 无法通信 宿主机 dmesg 会有: can't change power state 或者: GPU has fallen off the bus 解决 宿主机重置 PCI: 先查 BDF: lspci | grep NVIDIA 比如: 01:00.0 解绑: echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove 重新扫描: echo 1 > /sys/bus/pci/rescan 或者直接重启宿主机。 2. 宿主机更新后 vfio 配置丢失 检查: cat /etc/default/grub 必须有: Intel: intel_iommu=on AMD: amd_iommu=on 更新: update-grub update-initramfs -u -k all 重启。 3. NVIDIA 驱动 DKMS 崩了 VM 内: dkms status 如果: nvidia, xxx: added 但不是: installed 说明驱动坏了。 重新安装: Ubuntu: apt purge nvidia* apt install nvidia-driver-535 reboot 五、最关键的日志(必须看) 请把下面输出发我: PVE宿主机: lspci -nnk | grep -A3 -i nvidia dmesg | grep -Ei "vfio|iommu|nvidia" cat /etc/pve/qemu-server/VMID.conf VM内部: lspci | grep -i nvidia lsmod | grep nvidia dmesg | grep -i nvidia 六、经验判断(按概率排序) 你这种“之前正常,突然掉卡”,在 PVE 里最可能是: GPU reset bug(40%) 宿主机升级内核导致 vfio 失效(30%) 宿主机抢占显卡(15%) VM 内 NVIDIA 驱动损坏(10%) 显卡硬件异常(5%) 尤其如果: 最近 reboot 过 更新过 PVE 重启过 VM 那大概率是 reset/vfio 问题。 现在已经确认: VM 内能识别 PCI 设备 显卡已经成功直通进虚拟机 问题不是 VFIO 失效 因为: 01:00.0 VGA compatible controller: NVIDIA Corporation GA106 ... 说明 PCI passthrough 是正常的。 所以问题已经缩小为: 当前核心问题 是 NVIDIA 驱动没有正常工作。 也就是说: PCI设备存在 但 nvidia kernel module 没正常初始化 这通常是: 驱动模块没加载 DKMS 编译失败 内核升级后驱动失配 GPU reset 后驱动初始化失败 BAR/IOMMU 映射异常 下一步(关键) 请在 VM 内执行: lsmod | grep nvidia 以及: nvidia-smi 再执行: dmesg | grep -i nvidia 重点看有没有: Failed to initialize NVML NVRM RmInitAdapter failed GPU has fallen off the bus No NVIDIA devices probed module verification failed 我先给你高概率修复方案 因为你是: “之前正常” “突然掉卡” VM 里 PCI 还在 所以最像: NVIDIA 模块挂了 先直接尝试: sudo modprobe nvidia 然后: nvidia-smi 如果 modprobe 报错 执行: dmesg | tail -50 大概率能直接定位。 再检查驱动状态 执行: dkms status 正常应该类似: nvidia/535.xxx, 5.xx.xx-generic, x86_64: installed 如果不是 installed 说明: Ubuntu 内核更新了 NVIDIA DKMS 没重新编译 直接修: sudo apt purge '^nvidia' sudo apt autoremove sudo apt update sudo apt install nvidia-driver-535 sudo reboot 还有一个非常像的情况(PVE 高频) 如果 dmesg 里看到: NVRM: RmInitAdapter failed 或者: GPU has fallen off the bus 这是: GPU reset bug 尤其 RTX 30 系列在 PVE 很常见。 这种情况最快恢复方法 在 PVE宿主机: qm stop VMID 然后: echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove echo 1 > /sys/bus/pci/rescan 再启动 VM。 如果仍不行 直接重启宿主机: reboot 很多 reset bug 只有 cold reboot 能恢复。 RTX 3060 还有一个重点 RTX 3060 有时会因为: Resizable BAR 导致 passthrough 偶发异常。 建议在宿主机 BIOS: 关闭: Above 4G decoding(可先不关) Resizable BAR(重点) 现在最关键的是这三个输出 发我: lsmod | grep nvidia dkms status dmesg | grep -iE "nvidia|NVRM|rm" 基本就能直接定位。 现在信息已经非常明确了: lspci 能看到 RTX 3060 lsmod | grep nvidia 没任何输出 nvidia-smi 无法通信 dmesg | grep -i nvidia 没日志 这说明: NVIDIA 驱动根本没有加载 不是“驱动运行异常”,而是: 内核模块不存在 或模块没编译 或 Secure Boot/内核版本导致模块无法加载 这已经不是 PVE passthrough 问题了,而是 VM 内 Ubuntu 的 NVIDIA 驱动问题。 先执行这个(最关键) modprobe nvidia 然后立刻: dmesg | tail -50 这个输出会直接暴露根因。 再检查驱动包状态 执行: dkms status 以及: ubuntu-drivers devices 我现在高度怀疑(90%) 是下面两种之一: 情况1:Ubuntu 内核更新了 导致: 原来的 NVIDIA DKMS 模块失效 /lib/modules/... 里的 nvidia.ko 不匹配 这是 Ubuntu 最常见情况。 尤其如果你最近: apt upgrade 自动更新 重启过 非常像。 直接修复(推荐) 执行: sudo apt purge '^nvidia' sudo apt autoremove -y sudo apt update 然后: ubuntu-drivers devices 它会推荐: nvidia-driver-535 或者: nvidia-driver-550 安装: sudo apt install nvidia-driver-535 -y 然后: sudo reboot reboot 后验证 lsmod | grep nvidia 应该有: nvidia nvidia_uvm nvidia_drm 然后: nvidia-smi 正常会恢复。 情况2:Secure Boot 导致模块拒绝加载 如果: modprobe nvidia 报: Key was rejected by service 那是: Secure Boot 导致 unsigned DKMS module 无法加载。 解决 进入 VM BIOS: 关闭: Secure Boot PVE 的 OVMF 虚拟机很容易出现这个问题。 再补一个重点(你现在很像这个) 你当前: dmesg: read kernel buffer failed: Operation not permitted 说明你不是 root。 很多日志你没权限看。 请改用: sudo dmesg | grep -i nvidia 或者: sudo dmesg | tail -100 这个非常重要。 最后一步(请直接执行) 按顺序: sudo modprobe nvidia sudo dmesg | tail -50 dkms status 把结果发我。 基本就能100%定位了。