故事背景
系统配置
操作系统
1 | cat /proc/version |
算法模型 Backbone
- ResNet V2
- ResNet 101
- ResNet 50
- Mask RCNN
故事描述
在测试环境中,升级组件时,误把CUDA通过命令进行了升级,但由于cuda版本与cudnn版本不匹配,结果导致nvidia-smi命令报错,基于TensorFlow Serving的GPU图像识别推理也无法正常进行,于是做了些尝试终于将两者匹配,此时CUDA版本已经升级至11.0,经过测试意外地发现,此前的图像识别速度竟然提升了好几倍,猜测可能是CUDA相关升级导致的识别速度提升,但与算法同事和leader沟通没有结论后,我决定在新的测试机器上正式升级CUDA版本并验证是否速度会有提升
故事经过
安装CUDA驱动
先在NVIDIA官网找到对应版本的cuda,执行命令
1 | wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run |
安装过程中全选,收到报错提示,查看cuda安装log 1
cat /var/log/cuda-installer.log
提示
1 | [INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9] |
1 | sudo rm -rf /tmp/.X0-lock |
并再次尝试安装,再次报错,查看log
1 | nvidia-installer log file '/var/log/nvidia-installer.log' |
从网上查阅解决方案后,执行
1 | sudo service lightdm stop |
此时发现TensorFlow Serving进程还有,于是kill后再次尝试安装,
继续报错
1 | nvidia-installer log file '/var/log/nvidia-installer.log' |
依据提示方法,进行了尝试
1 | sudo apt-get remove --purge nvidia-410 nvidia-modprobe nvidia-settings |
结果发现此时变成了nivdia 440,继续执行cuda安装,报错
1 | nvidia-installer log file '/var/log/nvidia-installer.log' |
参照其指示,卸载440
1 | sudo apt-get remove --purge nvidia-440 nvidia-modprobe nvidia-settings |
再次安装,提醒是否更新cuda软链接,选择yes
1 | =========== |
此时安装过程似乎顺利完成,查看状态
1 | nvidia-smi |
尝试启动TensorFlow Serving试试,报错
1 | 2020-09-27 01:33:45.682888: E external/org_tensorflow/tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR |
安装cudnn
从NVIDIA官网下载版本匹配的CUDNN安装文件,并执行命令
1 | sudo dpkg -i libcudnn8_8.0.3.33-1+cuda11.0_amd64.deb |
提示
1 | (Reading database ... 168907 files and directories currently installed.) |
进入其中并make
1 | cd NVIDIA_CUDA-11.0_Samples/ |
经历了好久,终于装好了,不重启TensorFlow Serving仍然是同样错误,重启TensorFlow Serving后正常
故事结果
测试效果
使用原有基准图片进行测试,算法模型见配置信息,使用未优化前的P100机器,推理时间在2.7s,优化后则缩短到了0.6s
故事探究
从安装新版CUDA过程中,发现其输出log里包含很多模型相关名字,例如ResNet等,猜测是新版CUDA对模型做了额外优化,具体原因还待探究