1. 问题描述
今天跑实验的时候,代码报错:
RuntimeError: "slow_conv2d_cpu" not implemented for 'Half'
感觉有点莫名奇妙,经检索,发现将fp16改为fp32可以解决我的问题,但是运行速度太慢了。后来发现,是系统内核自动升级,导致显卡驱动与内核驱动不匹配。验证是否是该问题,可在命令行输入nvidia-smi
来验证,若出现:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
即是内核版本自动升级导致的(是不是也有可能是显卡驱动升级的问题)。
2. 解决方案:回退系统内核版本
我用的系统版本是Ubuntu20.04
2.1 查看当前系统内核
uname -a
2.2 查看系统现存的内核版本
grep menuentry /boot/grub/grub.cfg
2.3 查看显卡驱动对应的内核驱动
ls /var/lib/dkms/nvidia/
可以发现系统上有两个内核版本,一个是5.15.0-105
,一个是5.15.0-107
,而当前的显卡驱动需要的内核版本是5.15.0-105
,所以将内核版本从5.15.0-107
回退到5.15.0-105
即可。
2.4 更改系统内核版本
使用vim,修改文件:
sudo vim /etc/default/grub
将GRUB_DEFAULT=0
修改为GRUB_DEFAULT="1> 2"
(不同的机器,修改的内容不同)
为什么我的机器需要这么改呢?
可以看步骤2.2中的图,5.15.0-105
的序号(从0开始)位于一级目录(两个蓝框表示2个1级目录)的1
,二级目录的2
,所以需要改为"1> 2"
2.5 更新grub并重启系统
# 更新
sudo update-grub
# 重启
sudo reboot
2.6 重启后,查看当前系统内核
uname -a
我们发现,系统内核已更改
2.7 查看显卡详情
nvidia-smi
大功告成!!!
此时,最好同时禁止系统内核自动更新
、显卡自动更新
,详见另一篇博文https://blog.csdn.net/sdbyp/article/details/139606901