安装tensorflow-gpu(cuda9.0+cudnn7.3+anaconda3)

一、linux服务器上非root用户下的尝试(成功)

因为自己的机子太差了,所有从学校申请了一个服务器的账号,之前按照网上的教程,在自己的用户目录下裸装了python3.6。本来想继续裸装来着,但是尝试了很多方法,出了太多奇奇怪怪的问题,最终选择在anaconda环境下安装。

首先安装cudahttps://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=CentOS&target_version=7&target_type=runfilelocal和cudnnhttps://developer.nvidia.com/rdp/cudnn-download,这里版本很重要,Anaconda3 5.0.0 +tensorflow gpu版+cuda9 +cudnn7是尝试后可行的。按照这篇博文安装https://blog.csdn.net/ws995339251/article/details/85699172

1、安装cuda9.0

wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run

sh cuda_9.0.176_384.81_linux-run
    accept	#接受协议
    no		#不更新驱动
    yes		#确认安装toolkit
    no		#不建立软链接
    no		#不安装samples库(因为不需要cuda编程)

安装时,NVIDIA Accelerated Graphics Driver和OpenGL libraries都选no,默认位置要改到自己的用户目录名下“/home/我的名字/”

然后配置环境变量,将以下内容写入到~/.bashrc尾部:

export PATH="/home/name/cuda9.0/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/name/cuda9.0/lib64/"

然后激活配置文件

source ~/.bashrc

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
 
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的

测试CUDA的samples,显示一些GPU的信息则安装成功。

cd  /home/name/cuda9.0/samples/1_Utilities/deviceQuery

make

./deviceQuery

cuda安装成功,查看GPU信息

nvidia-smi # GPU

nvcc -V # 版本

2、复制cudnn文件到cuda

解压对应的cudnn文件

wget http://developer.download.nvidia.com/compute/redist/cudnn/v7.3.0/cudnn-9.0-linux-x64-v7.3.0.29.tgz

tar -xzvf cudnn-9.0-linux-x64-v7.3.0.29.tgz

把解压的文件复制到对应的cuda文件夹下。这里有个要注意的点,如果直接复制所有文件,最后测试代码时可能会报错“ImportError: /usr/local/cuda/lib64/libcudnn.so.7: file too short”,按照https://blog.csdn.net/qq_20373723/article/details/86137271 这篇博文的办法,libcudnn.so  libcudnn.so.7  libcudnn.so.7.3.0这三个文件,删除libcudnn.so.7 ,再cd /home/name/cuda9.0/lib64文件夹下,

ln -s libcudnn.so.7.3.0 libcudnn.so.7

就可以了,其中libcudnn.so.7是新生成的。

查看cuda版本

cat /home/name/cuda9.0/version.txt

nvcc -V

查看cudnn版本

cat /home/name/cuda9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2

 

3、安装anaconda

anaconda指的是一个开源的Python发行版本,其包含了conda、Python、numpy等180多个科学包及其依赖项。可以帮助python开发者省去很多安装科学包的工作。
anaconda的主要让人选择的功能是:
1.包管理器。
2.虚拟环境管理器。

wget https://repo.continuum.io/archive/Anaconda3-5.0.0-Linux-x86_64.sh

bash Anaconda3-5.0.1-Linux-x86_64.sh

# 清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D

安装完成后会询问是否添加环境变量,建议选是。(只会添加到本用户的环境变量中)。安装完成后,可以去~/.bashrc文件里查看一下环境变量,最后激活一下配置文件。

source ~/.bashrc

若成功,则本用户下python会从anaconda目录中打开,本用户pip默认安装目录为

~/anaconda3/lib/python3.6/site-packages

添加清华的镜像源

# ~/.condarc文件里
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

# Conda Forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

# msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/

# bioconda
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/

# menpo
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/

# pytorch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
# for legacy win-64
# conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/

创建一个虚拟环境并激活

#conda create -n your_env_name python=X.X(2.7、3.6等)命令创建python版本为X.X、名字为your_env_name的虚拟环境。
conda create -n tensorflow python=3.6

# To activate this environment, use:
source activate tensorflow
# conda activate tensorflow

# To deactivate an active environment, use:
source deactivate

# 以下记录一些conda常用命令
conda --version  # 验证并查看版本
conda list  # 查已经安装的python包

conda remove -n your_env_name --all  # 删除虚拟环境。
conda remove --name $your_env_name  $package_name(包名) # 删除虚拟环境中的包。

conda install package_name(包名)  # 安装包
conda env list 或 conda info -e # 查看当前存在哪些虚拟环境

# 更新Anaconda
conda update conda
# 更新所有包
conda update --all

conda update -n base -c defaults conda

激活环境后下载tensoflow-gpu,保险起见用了1.9.0版,其他版本可以尝试一下。

(tensorflow)$ pip install tensorflow-gpu==1.9.0

这样就可以了,跑了一下测试代码没有报错。

但是我还是想在虚拟环境外直接安装tensorflow gpu版,但是我尝试了一下,还是报错了,我也不知道为啥。还有就是,因为安装了anaconda3,我的用户目录下pyhton默认为anaconda3的版本,应该是因为修改了环境变量缘故。

 

二、windows系统下的尝试(失败)

1、更新tensorflow-gpu

我本来就安装了python3.6+tensorflow,也就是CPU版,最近想更新成GPU版,在更新之前,按照https://blog.csdn.net/freewebsys/article/details/81276120 这篇教程安装了CUDA9.0和cudnn7.6。

查询自己显卡是否支持CUDA https://developer.nvidia.com/cuda-gpus

准备工作做好后就pip3更新一下

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu

这里用镜像网站安装会快很多

阿里云 
http://mirrors.aliyun.com/pypi/simple/

中国科技大学 
https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) 
http://pypi.douban.com/simple/

清华大学 
https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学 
http://pypi.mirrors.ustc.edu.cn/simple/

以上更新不出意外的报错了,提示“Failed to load the native TensorFlow”。我百度了一下这个问题,为了确保我就算GPU版安装失败,CPU版本还继续可用,所以我想先试试能不能恢复到CPU版本。

2、安装gpu版本出错后可以重新更新一下tensorflow回cpu版本

pip3 install --upgrade --ignore-installed tensorflow

不出所料的,这里重新安装完,numpy模块会报错,原因是安装了两个numpy模块,

ImportError: Something is wrong with the numpy installation. While importing we detected an older version of numpy in ['C:\\Python36\\lib\\site-packages\\numpy']. One method of fixing this is to repeatedly uninstall numpy until none is found, then reinstall

按照报错的提示,卸所有版本的numpy,再重新安装就好,我卸载了两次。注意一下这里卸载需要管理员权限。

pip3 uninstall numpy

然后再按照上面重新安装numpy,再试一下,import tensorflow as tf 就没有报错了,运行了一下以前的代码也照样可行。

3、没了后顾之忧,我就准备再次挑战GPU版本,再次pip。

然后神奇的事情发生了。这次重新安装后,“import tensorflow as tf”竟然没有报错……我也不知道这中间到底是为什么,也许是之前也是有两个numpy模块所以才会报错?不是很理解,反正就是这么神奇的装好了。但是跑程序的时候发现并没有使用GPU,可能是因为本身机子配置比较差,没有GPU可跑。所以这种安装方法到底行不行我也不知道。

你可能感兴趣的:(教程记录,tensorflow,tensoflow-gpu,cuda,cudnn,anaconda)