公司一台用来做ai模型训练的机器环境在安装了一些新的工具之后出现了问题,之前的运行环境是anaconda python3,tf 1.12.0,tf-gpu 1.12.0,cuda 10.1。由于需要重新拿来做训练,启动的时候出现了问题。报的错也很奇葩,报的是之前一直在用的一个Python包twilio 无法找到,这说明加载的虚拟环境出了问题,一开始以为是supervisor 的问题,排查之后发现跟它无关。决定将tf和 tf-gpu环境重新安装。

pip uninstall tensorflow-gpu
pip uninstall tensorflow

pip install tensorflow==1.12.0
pip install tensorflow-gpu==1.12.0

安装完成之后报错:ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory,排查之后知道这个是因为pip安装的tf对应的cuda版本是固定的。对应关系如下图:
Laiii.png

如果想要自己去按照自己的环境使用tf,则需要手动去编译安装tf-gpu,比较麻烦,于是决定升级tf和tf-gpu的版本到最新的1.14.0。

pip uninstall tensorflow-gpu
pip uninstall tensorflow

pip install tensorflow==1.14.0
pip install tensorflow-gpu==1.14.0

好了,安装之后新的问题来了,could not dlopen library 'libcudart.so.10.0'; dlerror: libcudart.so.10.0, 使用nvdia-smi命令查看到目前使用的cuda版本为CUDA Version: 10.1,并且/usr/local/cuda链接到了cuda-10.1...好吧。只能降级了.

apt-get --purge remove "*cublas*" "cuda*"
reboot
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
apt install cuda-10-0
reboot

降级安装完毕之后训练总算是能跑起来了,但是nvdia-smi命令看到的cuda版本还是CUDA Version: 10.1,查了下,这块的显示跟实际使用有不同的api获取,所以不一定一致... 。不过/usr/local/cuda确实链接到了cuda-10.0.说明目前确实是在使用10.0版本在驱动。
pip安装的tf是在一个比较老的cuda版本上预编译的,这点确实有很多开发者的反馈不合理。不过官方目前没有修改,可能是为了稳定考虑吧,还是建议按照官方的匹配来做,至于之前为何能在cuda 10.1 tf 1.12.0下运行正常,费解...,因为当时也是用的pip安装的,没在意那么多,确实能跑。