服务器没有图形界面,而且现在也不在实验室,因此使用Xshell远程终端进行配置。
大概分为以下几个步骤:
python3.6——nvidia-driver-390—— CUDA9.0——CuDNN7.3——tensorflow_gpu-1.12.0
选择安装tf1.12主要是因为服务器的驱动装了390,CUDA的版本限制,不确定装高版本tf会不会有问题。
其中,关于版本选择的问题参考下图[1, 5]:
另,先注明一点,官网上有给出GPU的硬件要求,linux的显卡计算能力要>3.0,windows>3.5。查询计算力可参考:
https://developer.nvidia.com/cuda-gpus
选择电脑显卡对应的型号:
可在列表中查看,比如我的显卡cc只有2.0,其实支持不了gpu加速:
也可用CUDA中的examples查询,关于查询的方法见[19]。具体方法可在下文中找到,需先装好CUDA。
驱动安装[2, 3]
查看推荐安装驱动版本:
ubuntu-drivers devices
如果报错 “ not found”[4],则执行下述命令
sudo apt-get install ubuntu-drivers-common
安装推荐版本(recommended):
sudo ubuntu-drivers autoinstall
也可直接安装指定版本:
sudo apt install nvidia-xxx
但我指定推荐的390会报错,没尝试选别的会如何:
重启服务器并查询是否安装成功:
sudo reboot
sudo nvidia-smi
安装CUDA9.0
下载地址:https://developer.nvidia.com/cuda-toolkit-archive
选择对应的版本:
这里CUDA9.0没有ubuntu18.04的,按照[6]的说法,17.04也是可以的。
下载 base installer 和4个补丁:
下载完后把 “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
使环境变量生效:
source /etc/profile
如果报错 “not found” ,此时不是root用户,则参考[10],切换到root用户重新执行,再切换回来:
sudo su
source /etc/profile
su lyt
测试环境变量是否生效:
nvcc --version
备注:
1. 我在执行上述操作前发现服务器的 /usr/local 路径下已有2个CUDA文件夹,8.0和9.0:
根据[8]的说法,输入下述命令:
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery
其中,执行 make 时报错,参考[9],已经编译过且有.o文件,故跳过此步。
执行最后一句后,显示CUDA已配置:
cuda-8.0路径下运行也一样,但是文件8.0下只有文件下sample没有别的。
本来想可能服务器之前有人装过吧,就配置了环境变量,但是最后 nvcc 时报错 nvcc not found。
事实上 cuda/bin 下有 nvcc,也确实加入了环境变量[12]。无法解决,于是决定还是不管服务器中已有的cuda,还是重装一下。
最终实现结果:
cuda-8.0 和 cuda-9.0-copy 是原本服务器中有的,cuda-9.0是新安装的。
在新安装完成后重新运行sample,结果如下:
(sudo make前)
执行最后一句后,显示出了该GPU的CUDA支持的cc为2.0[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
需要注册一下账号,然后选择对应的版本:
将 下载好的“ 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
可能是现在新版本的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
备注:
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:
根据[17]的回答,我的GPU只能支持2.0,而它需要cuda capability大于3.5才可用:
(有些旧版本可能要求低一点,但至少都是3.0)
并且好像这是一个硬件问题..唯一的解决办法就是更换一块GPU,总之就是无法在此GPU上运行tensorflow。
根据[18]的最新更新,似乎有办法用非官方的方法在cc2.0上运行,但效果不尽人意:
算了我还是先这么用着吧,如果以后遇到了问题再说。
参考文档
[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深度学习环境配置
[9] 如何解决make: Nothing to be done for `all' 的方法
[10] 使用source命令的时候提示source: command not found错误解决
[11] linux 环境变量设置方法总结(PATH / LD_LIBRARY_PATH)
[13] Found a swap file by the name "~/.bashrc.swp"
[14] 如何在linux下解压 .solitairetheme8 文件
[17] tesla c2075 with tensorflow cuda version installation [duplicate]
[18] How can I make tensorflow run on a GPU with capability 2.x?