最直接方式是运行nvidia-smi -q并查看Persistence Mode行,显示Enabled即开启;它与nvidia-smi默认输出的P列无关,后者仅反映当前是否有客户端占用GPU。

怎么看 persistence mode 当前是否开启
最直接的方式就是运行 nvidia-smi -q,然后搜 Persistence Mode 这一行。如果显示 Enabled 就是开了;显示 Disabled 就是没开——别信 nvidia-smi 默认输出里那个模糊的 P 列,它只反映当前是否有客户端在用卡,和持久化模式无关。
常见误判点:nvidia-smi 能跑 ≠ persistence mode 已开启。很多用户看到命令能执行、GPU 能列出来,就以为没问题,结果首次调用 CUDA 时还是卡顿 1.5 秒以上,根源就在这个开关没打开。
为什么 nvidia-smi 响应快不代表驱动已常驻
nvidia-smi 本身就是一个 GPU 客户端。它启动时会触发驱动加载(如果还没加载),执行完就退出——这时若 persistence mode 关着,内核模块就会被卸载。下次再跑 nvidia-smi 或 PyTorch 训练脚本,又要重复加载+初始化流程,ECC 内存清理、PCIe 配置重置全来一遍。
验证方法很简单:
- 先执行
lsmod | grep nvidia,记下输出(比如有nvidia、nvidia_uvm) - 再执行一次
nvidia-smi -L - 立刻再跑
lsmod | grep nvidia
如果第二次没输出,说明模块已被卸载,persistence mode 必定是关着的。
开机自动启用 persistence mode 的可靠写法
临时开启用 sudo nvidia-smi -pm 1,但重启就失效。真正要落地,得靠 nvidia-persistenced 守护进程 + systemd 管理。注意三个关键点:
-
nvidia-persistenced必须由 root 启动,且需确保其 PIDFile 路径存在(比如/var/run/nvidia-persistenced/),否则 systemd 会报Failed to start - 服务文件里
ExecStart参数必须带--persistence-mode(不是--persistence-mo,网上很多文档漏了最后的de) - 启用后务必运行
sudo systemctl daemon-reload && sudo systemctl enable nvidia-persistenced,否则 reboot 后不会自启
检查是否生效:重启后立即跑 systemctl status nvidia-persistenced 和 nvidia-smi -q | grep "Persistence Mode",两个都 OK 才算到位。
掉卡、100% 利用率、No devices were found 的共性线索
这三个现象表面不相关,但底层都指向同一个信号:GPU 驱动反复卸载/加载。比如:
-
No devices were found:nvidia-smi启动时驱动刚卸载完,来不及重新加载 - GPU 利用率显示 100%,但无进程:其实是
nvidia-persistenced自身在维持设备句柄,nvidia-smi把它误判为“占用” - 云主机掉卡(
lspci能见卡、nvidia-smi只见 3/4 张):某张卡在卸载过程中被 PCIe 层标记为 error,后续初始化失败
这些都不是硬件问题,也不是驱动装错了,而是 persistence mode 缺位导致的状态管理断裂。修复后记得看 dmesg | grep -i "nvidia\|pcie",正常情况下不应再出现 Xid 79 或 PCIe Bus Error 类报错。











