记录一次配置深度学习主机和安装TensorFlow2.0 GPU的经历。
配置深度学习主机
工欲善其事必先利其器,既然是深度学习,如果没有GPU加持那还算是深度学习吗?不过,GPU向来价格比较昂贵,一张近一年内新上市的GPU价格动辄几千,假如你不是专门的研究者或者没有企业级别的需求,我的建议是没有必要暂时花费这笔钱,因为我自己之前就吃过这些苦头,当时一门心思买昂贵的设备用来学习,可是大多是时候都是在吃灰,自己的数据集根本不需要那么多资源。
所以,我的建议是,我们可以选择那些上市时间有两年但是算力还不错的二手显卡,如果能买到全新的那就更好了,为什么这么做?因为你想想,前两年深度学习的任务不也是使用的这些设备吗,这些GPU一样在那时也可以满足我们的需求,当然,二手的显卡需要我们仔细甄别,最好选择那些信誉、评价比较高而且真实的卖家。
当我配置主机的时候我一直保持几个原则:
- 实用。比如RGB灯光和五颜六色的装饰真的不会给你的内存条带来什么加成,内存条就是内存条,它不是装饰;另外,CPU能买散片就买散片,为什么?如果现在咱们能具备仿制出CPU的能力也不会受制于人了。
- 货比三家。同一件商品在不同平台和不同卖家的售价往往有很大的区别,在厂家品控合格的前提下,购买低价的一般不会翻车。
- 需求。自身的需求,我看了许多的装机视频,有些人动辄就是花费上万购置设备,装完机之后就是用来看看视频和刷刷网页,那我看就完全没有必要了。
考虑用于深度学习的机器,无非有两种选择:笔记本或者台式机,前者便携省心,但价格相对昂贵,后者不易携带,然而具备价格优势,这两者似乎天生具备不可调和的矛盾。那么会不会有一种方案能同时满足这两个优势呢,既便携且价格不那么昂贵,答案是肯定的。我也是这一阵在搜集资料的时候才发现的,居然还有itx机箱这个选择,就是支持的主板为17cm*17cm尺寸大小,整机可以放入一般的双肩背包。
主机中花费最多的部分就是CPU和GPU了,这两者几乎占据了装机费用的一半,所以你的心理预期与这两个因素强烈相关,比如以我为例,刚开始我的心理预期是4000左右,现在一般的CPU散片至少得1000了,所以这就决定了我的显卡上不能投入太多,我一开始的选择是gtx750ti,算力5.0,能满足一般的需求,但是显存太小了,而且这块显卡还是二手的。
后来我把我的配置单发到V站社区,社区的给我的反馈是GPU的显存太小了,做不了什么用,至少得1060,后来我权衡了一下确实2G的显存有点小。所以,我改变了预计的方案,显卡换成了二手的微星红龙1060,这张显卡我在16年装机的时候就购入过,品控方面经得住考验,只是二手的微星红龙现在还能卖1000出头。
但是后来发现微星红龙显卡跟我的itx机箱不匹配,它太宽了,我的机箱支持的显卡宽度最大为13.2cm,而微星红龙的宽度将近14cm,所以死活也放不进机箱,无奈只能临时把微星红龙退了(红龙的造型真的很酷啊!!!),火速买了一张全新的映众1060显卡,因为我看了评测,这款显卡的散热比较强,我觉得与体积比较小的mini机箱比较匹配。
CPU一开始的选择是9400,后来发现我没有用核显的必要,所以就选择了9400f,也就是不带核显的版本,免除后续安装驱动的烦恼。
所以,整个下来我这台用于深度学习的主机的配置大致是:i5 9400f+16G内存+480G SSD+GTX 1060 6G+sanc 2k显示器,整个花费差不多5000元。
在Ubuntu18.04.1上安装TensorFlow2.0-GPU
因为我配置这台机器的目的是为了接触TensorFlow2.0,所以使用GPU版本的TensorFlow2.0是必须的,我日常的开发环境均是基于Linux桌面版,而英伟达支持的桌面发行版又仅仅限于几类。在这之前我曾经尝试在deepin上安装驱动,结果把系统给整崩溃了,所以我告诫各位不要在日常开发环境和英伟达不支持的桌面环境下安装驱动,你永远不知道前面会有多少坑要踩。
CUDA开发环境依赖于与主机开发环境(包括主机编译器和C runtime库)的紧密集成,因此仅在已获得此CUDA Toolkit版本合格的Linux发行版中受支持,换言之,如果NVIDIA官方不支持你使用的Linux发行版,你也无法使用CUDA加速!
不得不说,在Linux平台装英伟达的驱动是一个非常劳心费神的事情,这中间有无数的坑等着你去踩,如果你使用的Windows可能半天就弄明白了,如果你是Linux用户那个在这个基础上再乘以5吧,我花了差不多20多个小时才弄明白,中间系统重装了5、6次,所以这也是为什么我建议你在一台全新机器上进行这些实验,千万不要在开发环境中尝试这些操作,它有可能导致无法开机和资料丢失的情况发生。
五个认知:
- 本教程仅仅针对Ubuntu18.04.1的单显卡用户,即无核显,只有独显
- CUDA自带显卡驱动,所以只需要安装好了CUDA之后附带英伟达的驱动也随之安装成功,
nvidia-smi
命令可以检验驱动是否安装成功 - 强烈建议你在一台装有全新的Ubuntu系统的设备上安装GPU驱动!!!强烈建议Ubuntu的安装的版本为18.04.1,而不是最新发布的是18.04.3,最新版本的18.04.3内核版本(5.0.0)过高,而支持CUDA10.0的内核是低于它的
- CUDA版本已经升级到了10.1,然而TensorFlow2.0目前只支持CUDA10.0,所以你如果想要在TensorFlow2.0中使用GPU加速,那么你别无选择,只能安装CUDA10.0!!!
- 英伟达官方对Linux社区的支持力度太弱了,so,Fuck NVIDIA!!!
三个前提:
- 拥有至少一张或者多张支持CUDA加速的GPU:NVIDIA官方列出了支持CUDA加速的GPU设备列表(CUDA GPUs | NVIDIA Developer),你可以根据你的显卡型号查看是否支持CUDA加速已经当前的算力。我当前是一张GTX1060 6G的显卡,算力6.1
lspci | egrep '3D|VGA'
:查看你当前的核显和独显设备
- 你需要在TensorFlow2.0中获得GPU加速吗?如果是,那么目前你只能安装CUDA10.0;如果不是,你仅仅是PyTorch用户,那么根据你Ubuntu的内核版本选择CUDA10.0或CUDA10.1
- 确认Ubuntu系统版本和内核版本,并选择安装相对应的CUDA版本(这一步非常重要!!!):比如都是Ubuntu 18.04(18.04.1),CUDA10.0就只支持4.15内核版本,如果你安装的是最新的Ubuntu18.04(18.04.3),其内核版本是5.0.0,所以你需要安装CUDA10.1。否则会报错,并提示你要安装最新版本的驱动:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
- CUDA10.0支持的Linux系统和内核版本:https://docs.nvidia.com/cuda/archive/10.0/cuda-installation-guide-linux/index.html
- CUDA10.1(最新)支持的Linux系统和内核版本:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
uname -r
:确认你当前Ubuntu使用的内核版本,我的是4.15.0-20-generic
lsb_release -a
:确认Ubuntu版本,我的是18.04.1- 所以,我需要安装CUDA10.0版本
八步支持TensorFlow2.0 GPU加速
卸载已有的CUDA和英伟达驱动,如果你是全新系统,请忽略这一步
1
2
3# Purge existign CUDA first
sudo apt --purge remove "cublas*" "cuda*"
sudo apt --purge remove "nvidia*"进入CUDA归档列表:CUDA Toolkit Archive | NVIDIA Developer,选择在“两个前提”确认你所要安装的CUDA版本,点击进入,并按照提供的步骤逐步执行
| CUDA10.0支持的发行版和内核 | CUDA10.1支持的发行版和内核 |
| —————————————————————————————— | —————————————————————————————— |
| | |
- 安装Anaconda:清华大学镜像源下载链接:清华大学开源软件镜像站,使用Anaconda安装cuda10.0工具包:
conda install cudatoolkit=10.0
添加nvcc环境变量(nvcc是英伟达的编译器):
sudo gedit ~/.bashrc
,在文件的末尾添加以下三行,保存:1
2
3export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
- 执行
source ~/.bashrc
,使环境变量生效,接下来,验证CUDA编译器是否安装好,输入nvcc -V
- 重启机器:
sudo reboot
,终端输入nvidia-smi
,可以查看显卡的型号和驱动版本,如果有返回值则证明英伟达的驱动安装成功!然而,此时我们高兴得还为时过早,因为此时的NVIDIA还没有为TensorFlow2.0提供GPU支持,我们还需要安装cuDNN 安装cuDNN7.6.5版本:根据页面选择CUDA10.0对应cuDNN,下载:
1
2
3
4
5
6
7
8# 解压,并把文件拷贝到一个新的文件夹下:/home/yourname/software/cudnn/
tar -zxvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
# 设置环境变量
sudo vi ~/.bashrc
# 末尾添加
export LD_LIBRARY_PATH="/home/yourname/software/cudnn/lib64:$LD_LIBRARY_PATH"
# 环境变量生效
source ~/.bashrcpip install tensorflow-gpu
,终端打开iPython
,验证TensorFlow2.0是否已经获得GPU支持1
2
3import tensorflow as tf
# 如果返回true则表示TensorFlow2.0已经获得GPU支持,成功
tf.test.is_gpu_available()