问题描述
使用nvidia-smi时,发现 Nvidia Tesla L40 的显存显示为 45GiB (46080MiB) 而不是 48GiB (49140MiB)。
查阅资料后得知,需要关闭ECC功能,才能利用这3GiB的显存(同时还可以提升5~10%的计算性能)。
运行如下命令,关闭4张L40的ECC功能,输入nvidia-smi
发现无效,故重启,重启后仍然无效。
sudo nvidia-smi -i 0,1,2,3 -e 0
故障原因
分析内核日志dmesg
,得知,由于nVidia对内核进行了patch(通过 NVIDIA 内核模块,如 nvidia-drm 和 nvidia-modeset)
在某些情况下,NVIDIA 的内核模块会阻止驱动程序 reload 参数,因而无法正常开关 gpu 的 ECC 功能。
这种故障通常发生在使用 apt 安装 nvidia 驱动后,原因是 apt 的 deb 包安装脚本无法正确对内核进行 patching。
因而,建议转为使用https://developer.nvidia.com/cuda-downloads
的runfile
,安装会更加友好和可靠。
解决方案
以下操作需要root权限:
使用
nvidia-smi
关闭显卡的ecc
功能 (将0,1,2,3
自行替换为你的显卡id)Disable ECC and check whether the “pending” mode changes to enabled.sudo nvidia-smi -i 0,1,2,3 -e 0 sudo nvidia-smi -q -d ECC #查看ecc是否关闭
如果在输出中看到,则说明更改仍在pending。
ECC Mode Current : Disable Pending : Enable
如果重启或执行
sudo nvidia-smi -r
后,发现 ECC 仍无法关闭,请执行sudo nvidia-smi -q -d ECC
检查状态。如果 Current 为 Enable 且 Pending 为 Disable,则需要重新加载显卡驱动内核模块,请继续按照以下步骤操作。使用Ctrl+Alt+F2,或者在ssh终端中,将系统模式切换到命令行模式,关闭桌面管理相关的服务 Disable display manager
sudo systemctl isolate multi-user.target sudo nvidia-smi -i 0,1,2,3 -e 0 # ensure ECC disable status is pending
手动卸载 NVIDIA 内核模块 Manually unload drivers’ kernel modesetting
sudo modprobe -r nvidia-drm # modprobe -r的效果等同于rmmod sudo modprobe -r nvidia_drm sudo modprobe -r nvidia_modeset sudo modprobe -r nvidia-uvm
重载GPU以及驱动 Reset & Reload Driver and GPU
查看 ECC 是否成功关闭,此时nvidia-smi中的显存应该为48GiB;
sudo nvidia-smi -r sudo nvidia-smi -q -d ECC #check ecc status
得到如下输出,则说明成功。
ECC Mode Current : Disable Pending : Disable
切换到可视化模式 Start the graphical environment again
sudo systemctl start graphical.target sudo nvidia-smi -q -d ECC #check ecc status