服务器上Tensorflow、Keras、Cuda版本不匹配

项目场景:

使用非sudo账号登录linux服务器使用GPU+Keras训练,无法run起来。

问题描述:

2022-07-22 01:29:00.379530: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda-10.0/lib64:/usr/local/cuda/extras/CPUTI/lib64”
2022-07-22 01:29:00.379581: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

无法调用相应的CUDA


原因分析:

tensorflow和keras和cuda版本不匹配

  1. 查看cuda目录,一般cuda在/usr/local下,进入/usr/local/cuda/version.txt看里面实际有的cuda版本是多少。由于tensorflow-gpu会调用这里的cuda文件,也可能是cuda文件夹下太多版本,tensorflow-gpu选了某一个比较低的版本,所以不能只看nvidia-smi显示的cuda版本。
  2. keras和tensorflow版本对应,官网上只有cpu和keras的版本对应,实际gpu也是一样,比如tensorflow2.2+keras2.3.1+python3.6可以运行,比如tensorflow-gpu2.2+keras2.3.1+python3.6+cuda10.1也可以运行。

具体来说

  1. cuda有两种,分别用于支持driver API的必要文件(如libcuda.so)是由GPU driver installer安装的。nvidia-smi就属于这一类API。
    用于支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安装的。(CUDA Toolkit Installer有时可能会集成了GPU driver Installer)。nvcc是与CUDA Toolkit一起安装的CUDA compiler-driver tool,它只知道它自身构建时的CUDA runtime版本。它不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
    综上,如果driver API和runtime API的CUDA版本不一致可能是因为你使用的是单独的GPU driver installer,而不是CUDA Toolkit installer里的GPU driver installer。

  2. runtime和driver API区别
    runtime和driver API在很多情况非常相似,也就是说用起来的效果是等价的,但是你不能混合使用这两个API,因为二者是互斥的。也就是说在开发过程中,你只能选择其中一种API。简单理解二者的区别就是:runtime是更高级的封装,开发人员用起来更方便,而driver API更接近底层,速度可能会更快。

  3. 与cuda相对应的,还有个,cudnn,cudnn是一个为深度学习计算设计的软件库,提供对应的计算函数,如卷积等,还有很多其他的软件库和中间件,包括实现c++ STL的thrust、实现快速傅里叶变换的cuFFT、实现gpu版本blas的cublas、实现稀疏矩阵运算操作的cuSparse、实现深度学习网络加速的cuDNN等等


解决方案:

根据cuda文件下的cuda版本安装对应的tensorflow-gpu,由于没有sudo权限,无法修改cuda文件夹中的内种,因此需要优先迁就cuda版本。

你可能感兴趣的:(debug,tensorflow,keras,服务器)