Docker容器运行一段时间后GPU无法使用报错Failed to initialize NVML: Unknown Error
现象为使用GPU的容器(创建时加上了–gpus all)运行一段时间后,GPU就出现无法使用的问题。
原文见:https://ecloud.10086.cn/op-help-center/doc/article/79263
由于太难找到这个解决方案了,所以我抄录了一份。
解决方法:
1、首先查看显卡是否未开启持久模式。
宿主机运行nvidia-smi,比如下面的结果就是未开启持久模式,注意标题Persistence-M的内容往下看到双线段再往下看到Off文字。
2、编写服务启动脚本nvidia-persistenced.service内容如下:
[Unit]
Description=NVIDIA Persistence Daemon
Wants=syslog.target
[Service]
Type=forking
PIDFile=/var/run/nvidia-persistenced/nvidia-persistenced.pid
Restart=always
ExecStart=/usr/bin/nvidia-persistenced --persistence-mode --verbose
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced
[Install]
WantedBy=multi-user.target
3、执行如下命令,将脚本拷贝并添加到服务中,并启动服务:
sudo cp nvidia-persistenced.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable nvidia-persistenced.service
sudo systemctl start nvidia-persistenced.service
这里我遇到过如下错误:
Failed to enable unit: Unit file /etc/systemd/system/nvidia-persistenced.service is masked.
这是说被systemctl屏蔽了,执行如下命令解除屏蔽:
sudo systemctl unmask nvidia-persistenced
再执行:sudo systemctl disable nvidia-persistenced.service
再重新执行上述4行命令即可。
4、再次执行nvidia-smi,可以看到Persistence-M的内容为On了。
5、最好reboot,看看服务器重启后,显卡是否自动启用了持久模式。