服务器没有图形界面,而且现在也不在实验室,因此使用Xshell远程终端进行配置。

大概分为以下几个步骤:

python3.6——nvidia-driver-390—— CUDA9.0——CuDNN7.3——tensorflow_gpu-1.12.0

选择安装tf1.12主要是因为服务器的驱动装了390,CUDA的版本限制,不确定装高版本tf会不会有问题。

其中,关于版本选择的问题参考下图[1, 5]

GPU服务器 windows GPU服务器配置_GPU服务器 windows

GPU服务器 windows GPU服务器配置_GPU服务器 windows_02

另,先注明一点,官网上有给出GPU的硬件要求,linux的显卡计算能力要>3.0,windows>3.5。查询计算力可参考:

https://developer.nvidia.com/cuda-gpus

选择电脑显卡对应的型号:

GPU服务器 windows GPU服务器配置_CUDA_03

可在列表中查看,比如我的显卡cc只有2.0,其实支持不了gpu加速:

GPU服务器 windows GPU服务器配置_CUDA_04

也可用CUDA中的examples查询,关于查询的方法见[19]。具体方法可在下文中找到,需先装好CUDA。

 

驱动安装[2, 3]

查看推荐安装驱动版本: 

ubuntu-drivers devices

GPU服务器 windows GPU服务器配置_ubuntu_05

如果报错 “ not found”[4],则执行下述命令 

sudo apt-get install ubuntu-drivers-common

安装推荐版本(recommended):

sudo ubuntu-drivers autoinstall

也可直接安装指定版本:

sudo apt install nvidia-xxx

但我指定推荐的390会报错,没尝试选别的会如何:

GPU服务器 windows GPU服务器配置_CUDA_06

重启服务器并查询是否安装成功:

sudo reboot
sudo nvidia-smi

GPU服务器 windows GPU服务器配置_CUDA_07

 

安装CUDA9.0

下载地址:https://developer.nvidia.com/cuda-toolkit-archive

GPU服务器 windows GPU服务器配置_ubuntu_08

选择对应的版本:

GPU服务器 windows GPU服务器配置_GPU服务器 windows_09

这里CUDA9.0没有ubuntu18.04的,按照[6]的说法,17.04也是可以的。

下载 base installer 和4个补丁:

GPU服务器 windows GPU服务器配置_服务器_10

GPU服务器 windows GPU服务器配置_CUDA_11

下载完后把 “cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb” 文件传到服务器的 /usr/local 路径下,参考[7]

依次执行下述命令(即上面图片中所说的):

sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb  # 安装meta-data
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub           # 安装CUDA的GPG Public Key
sudo apt-get update                                              # 更新APT源
sudo apt-get install cuda                                        # 安装CUDA

安装补丁:

sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-176-local-patch-4_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get upgrade cuda

如果上面用deb安装不成功可以用runfile安装[20]

设置环境变量:

sudo vim /etc/profile

这里关于 /etc/profile 和 ~/.bashrc 等的区别见[11]

在文件的最后输入:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-9.0

GPU服务器 windows GPU服务器配置_GPU服务器 windows_12

使环境变量生效:

source /etc/profile

如果报错 “not found” ,此时不是root用户,则参考[10],切换到root用户重新执行,再切换回来:

sudo su
source /etc/profile
su lyt

测试环境变量是否生效:

nvcc --version

GPU服务器 windows GPU服务器配置_GPU服务器 windows_13

备注:

1. 我在执行上述操作前发现服务器的 /usr/local 路径下已有2个CUDA文件夹,8.0和9.0:

GPU服务器 windows GPU服务器配置_GPU服务器 windows_14

根据[8]的说法,输入下述命令:

cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery

其中,执行 make 时报错,参考[9],已经编译过且有.o文件,故跳过此步。

执行最后一句后,显示CUDA已配置:

GPU服务器 windows GPU服务器配置_CUDA_15

 cuda-8.0路径下运行也一样,但是文件8.0下只有文件下sample没有别的。

本来想可能服务器之前有人装过吧,就配置了环境变量,但是最后 nvcc 时报错 nvcc not found。

事实上 cuda/bin 下有 nvcc,也确实加入了环境变量[12]。无法解决,于是决定还是不管服务器中已有的cuda,还是重装一下。

最终实现结果:

GPU服务器 windows GPU服务器配置_CUDA_16

cuda-8.0 和 cuda-9.0-copy 是原本服务器中有的,cuda-9.0是新安装的。

在新安装完成后重新运行sample,结果如下:

GPU服务器 windows GPU服务器配置_GPU服务器 windows_17

(sudo make前)

GPU服务器 windows GPU服务器配置_CUDA_18

执行最后一句后,显示出了该GPU的CUDA支持的cc为2.0[19]

GPU服务器 windows GPU服务器配置_ubuntu_19

2. 在添加环境变量时,本来想添加到 ~/.bashrc 中,但是出现了报错,且打开后是一片空白。根据[13],是因为我在之间添加环境变量时不正常关闭了文件,于是输入如下命令:

sudo rm -f ~/.bashrc.swp
vim ~/.bashrc        # 往文件中输入环境变量配置

sudo su
source /home/lyt/.bashrc
su lyt

根据[11],配置到用户级而不是系统级。

 

安装cuDNN7.3(for CUDA9.0)

下载网址:https://developer.nvidia.com/rdp/cudnn-download

需要注册一下账号,然后选择对应的版本:

GPU服务器 windows GPU服务器配置_CUDA_20

将 下载好的“ cudnn-9.0-linux-x64-v7.3.0.29.solitairetheme8 ”文件传到服务器的 /usr/local下,转成tgz格式[14],再解压:

sudo cp cudnn-9.0-linux-x64-v7.3.0.29.solitairetheme8 cudnn-9.0-linux-x64-v7.3.0.29.tgz
sudo tar -zxvf cudnn-9.0-linux-x64-v7.3.0.29.tgz

将解压后生成的cuda文件夹中的 cudnn.h 文件和lib文件拷贝到cuda9.0(CUDA安装目录)文件夹中对应位置:

sudo cp /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo cp /usr/local/cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/ -d

GPU服务器 windows GPU服务器配置_GPU服务器 windows_21

可能是现在新版本的cuda默认就已经有了这些文件?先不管,继续下一步。

赋予执行权限:

sudo chmod a+x /usr/local/cuda-9.0/include/cudnn.h
sudo chmod a+x /usr/local/cuda-9.0/lib64/libcudnn*

 

安装tensorflow-1.12

根据[6],检查python3、pip3、virtualenv是否安装,并安装对应项:

python3 --version
pip3 --version
virtualenv --version

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv

进入 ~/Project 目录,创建python虚拟环境:

cd ~
sudo mkdir Project
cd Project
sudo virtualenv --system-site-packages -p python3 ./venv

建立软连接(此时在~目录,即/home/lyt目录下):

sudo ln -s ./Project/venv/bin/activate  venv

之后使用此虚拟环境时,激活和关闭命令如下:

source venv
deactivate

安装tensorflow1.12-gpu:

sudo pip3 install tensorflow-gpu==1.12

查看是否安装成功:

python3 list

GPU服务器 windows GPU服务器配置_服务器_22

 

备注:

1. 如果虚拟环境建错位置了,直接删除对应文件夹即可,非空文件夹的删除命令[15]

sudo rm -rf venv # 非空文件夹
sudo rm test1    # 文件
sudo rmdir test  # 空文件夹

2. 如果pip安装速度过慢,可永久修改pypi源,提升下载速度[6]

新建 ~/.pip/pip.conf :

sudo mkdir .pip
sudo vim .pip/pip.conf

添加内容:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com

3. 虽然tf-gpu装好了,但是在实际运行的时候好像并不能使用gpu进行计算,运行[16]中的例子:

import tensorflow as tf

a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

 运行结果显示使用的是CPU:

GPU服务器 windows GPU服务器配置_服务器_23

根据[17]的回答,我的GPU只能支持2.0,而它需要cuda capability大于3.5才可用:

(有些旧版本可能要求低一点,但至少都是3.0)

GPU服务器 windows GPU服务器配置_CUDA_24

并且好像这是一个硬件问题..唯一的解决办法就是更换一块GPU,总之就是无法在此GPU上运行tensorflow。

根据[18]的最新更新,似乎有办法用非官方的方法在cc2.0上运行,但效果不尽人意:

GPU服务器 windows GPU服务器配置_服务器_25

算了我还是先这么用着吧,如果以后遇到了问题再说。

 

参考文档

[1] tensorflow文档

[2] Ubuntu下安装NVIDIA驱动的三种方法

[3] Ubuntu 18.04 安装 NVIDIA 显卡驱动

[4] ubuntu-drivers: command not found解决办法

[5] CUDA TOOLKIT DOCUMENTATION

[6] Ubuntu18.04 + CUDA9.0 + cuDNN7.3 + Tensorflow-gpu-1.12 + Jupyter Notebook深度学习环境配置

[7] pscp实现windows传输文件给linux

[8] Ubuntu如何查看计算机安装好Cuda

[9] 如何解决make: Nothing to be done for `all' 的方法

[10] 使用source命令的时候提示source: command not found错误解决

[11] linux 环境变量设置方法总结(PATH / LD_LIBRARY_PATH)

[12] nvcc --version显示错误

[13] Found a swap file by the name "~/.bashrc.swp"

[14] 如何在linux下解压 .solitairetheme8 文件

[15] ubuntu删除非空文件夹

[16] TensorFlow 官方文档中文版

[17] tesla c2075 with tensorflow cuda version installation [duplicate]

[18] How can I make tensorflow run on a GPU with capability 2.x?

[19] 关于设备CUDA的信息查询

[20] ubuntu18.0、nvidia驱动435,安装CUDA10.0失败解决方案