推荐使用 conda 安装 TensorFlow,安装 GPU 版本的 TensorFlow 时会同时安装对应的 CUDA 和 cuDNN。下面的问题也就不会产生。

TensorFlow 2.0 for Linux 使用时报错:(cuDNN 版本低了)

E tensorflow/stream_executor/cuda/cuda_dnn.cc:319] Loaded runtime CuDNN library: 7.4.1 but source was compiled with: 7.6.0.  CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library.  If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
...
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [Op:Conv2D]

解决方法:升级 cuDNN。TF 2.0 和 CUDA 10.0、cuDNN 7.6.4 是匹配的。(如果是用 conda,那么以下都不需要,直接删除 cudnn 再安装对应版本)

root 用户

Linux 服务器的用户如果有 root 权限,那直接删除原来的 cuDNN,然后再重装新版本。

删除已有的 cuDNN:

sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*

进入 cuDNN 解压后的 cuda 文件夹,安装新版本:

sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/lib* /usr/local/cuda/lib64/

建立软连接:(以 7.6.4 版本为例)

cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.7.6.4
sudo ln -sf libcudnn.so.7.6.4 libcudnn.so.7
sudo ln -sf libcudnn.so.7 libcudnn.so
sudo ldconfig

非 root 用户

如果没有 root 权限,一种做法是自己重新装 CUDA 和 cuDNN。

在用户目录下安装 CUDA

从官网 https://developer.nvidia.com/cuda-10.0-download-archive 下载 ubuntu 使用的 cuda_10.0.130_410.48_linux.run,安装指令 sh cuda_10.0.130_410.48_linux.run,之后:

# 按q退出协议说明. 

Do you accept the previously read EULA?
accept/decline/quit: accept Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yes # 改成自己的用户名
Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]: /home/wuliyttaotao/cuda-10.0 Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: y # 使用默认路径,回车
Enter CUDA Samples Location
[ default is /home/wuliyttaotao ]:

配置 cuDNN

下载完 cuDNN,可能发现后缀是 .solitairetheme8,直接将这个后缀改成 .tgz 即可解压。

复制 cuDNN 文件到 CUDA 安装目录:(cuDNN 解压到 ~/cuda 目录了,~/cuda-10.0 为自己设定的 CUDA 安装目录,~ 代表 /home/wuliyttaotao)

cp ~/cuda/include/cudnn.h ~/cuda-10.0/include
cp ~/cuda/lib64/lib* ~/cuda-10.0/lib64 chmod a+r ~/cuda-10.0/include/cudnn.h ~/cuda-10.0/lib64/libcudnn*

建立软连接:

cd ~/cuda-10.0/lib64
ln -sf libcudnn.so.7.6.4 libcudnn.so.7
ln -sf libcudnn.so.7 libcudnn.so
ldconfig -v

配置用户环境变量

修改 ~/.bashrc 文件,将下面两行加进去:(将 wuliyttaotao 改成自己的用户名)

export PATH=/home/wuliyttaotao/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/home/wuliyttaotao/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存 ~/.bashrc 文件后,source ~/.bashrc 使其生效。

References

Linux之cudnn升级方法 -- ZONG_XP

非root用户在linux下安装多个版本的CUDA和cuDNN(cuda 8、cuda 10.1 等)-- 随性拂尘倾心

【tf.keras】Linux 非 root 用户安装 CUDA 和 cuDNN的更多相关文章

  1. 非root用户安装cuda和cudnn

    1.根据自己的系统在官网下载cuda (选择runfile(local)) https://developer.nvidia.com/cuda-downloads 2.进入下载目录,并执行 sh cu ...

  2. linux非root用户安装jdk1.8

    如题,先到 Oracle 官方网站 下载1.8版本的 JDK 压缩包(jdk-8u221-linux-x64.tar.gz)到本地(如D盘的soft目录),然后开始进入linux的非root用户(如w ...

  3. linux非root用户安装ncurses-devel依赖

    很明显,如果我们通过yum或rpm下载安装,始终无法绕开root用户,除非我们不用yum或rpm.嗯,我们直接用源码安装.下载源码包,到http://ftp.gnu.org/gnu/ncurses/我 ...

  4. linux非root用户安装nginx

    先到官网http://nginx.org/en/download.html下载最新稳定版源码包,目前是1.16.1: 下完后通过rz上传至wlf用户soft目录下,退回上一级目录解压: $ cd so ...

  5. linux非root用户安装rabbitmq

    因为rabbitmq是用erlang语言写的,所以装rabbitmq前第一步得先装erlang. 我们到erlang官网https://www.erlang.org/downloads下载安装包,最新 ...

  6. linux非root用户安装4.0.14版本redis

    先到官网https://redis.io/download下安装包,现在最新是5.0.5版本,可惜点击下载后被windows禁了,那就下4版本的,往下看Other versions的Old(4.0), ...

  7. linux非root用户安装5.7.27版本mysql

    先下安装包,到mysql官网https://dev.mysql.com/downloads/mysql/选好安装包版本.操作系统类型(默认是最新版本,点击右边链接Looking for previou ...

  8. Linux非root用户安装jdk和tomcat

    转载自:http://blog.csdn.net/wuyigong111/article/details/17410661,进行部分修改 创建一个用户 sgmm,并在其用户目录里面安装 jdk和tom ...

  9. linux 非root用户安装nginx

    第一步:首先下载依赖包 下载地址 pcre(www.pcre.org),zlib(www.zlib.org),openssl(www.openssl.org) 第二步:上传那个nginx的安装包 下载 ...

随机推荐

  1. 从浏览器的url中获取查询字符串的参数

    正则表达式: function getQuery(name){ var reg = new RegExp("(^|&)" + name + "=([^&] ...

  2. Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例

    从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作.Laravel ...

  3. JVM堆内存管理与自定义分配参数详解

    堆内存模型: 在Java中,堆被划分成两个不同的区域:新生代(Young),老年代(Old).而Permanent属于永久代(方法区),不属于堆内存.新生代又被分为了三个区域:Eden,from  s ...

  4. redis cluster和hash slot

    redis cluster介绍 从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代. redis cluster 支撑 N 个 redis ma ...

  5. 2018-2-13-win10-uwp-unix-timestamp-时间戳-转-DateTime

    title author date CreateTime categories win10 uwp unix timestamp 时间戳 转 DateTime lindexi 2018-2-13 17 ...

  6. 2019-11-19-C#-高级面试题

    title author date CreateTime categories C# 高级面试题 lindexi 2019-11-19 08:40:50 +0800 2018-11-12 11:18: ...

  7. axios发送POST时请求两次,第一次为OPTIONS

    出现问题: 发送POST请求时浏览器产生两次请求,第一次为OPTIONS,第二次是真正的POST请求,后台接收不到参数. 查找原因: 非GET请求,会先发送OPTIONS进行预检(预检请求每次运行只发 ...

  8. <Standard Template Library>标准模板库专项复习总结(二)

    4.队列 先进先出(FIFO)表 头文件:#include<queue> 变量的定义:queue<TYPE>queueName 成员函数: bool empty() 空队列返回 ...

  9. Servlet request 面试题

    使用request获得请求行:String getmethod():获得请求的资源:String getcontextpath():----web应用名称request是一个域对象request完成请 ...

  10. c++ list的坑

    std::list为空时调用pop_front的访问越界问题 std::list为空时调用pop_back访问越界问题 所以在使用pop_front . pop_back要先判断list是否为空 st ...