目录

最近因为疫情的影响,笔者一直宅在家里办公。办公之余琢磨着把之前自己组装的电脑搭建一套深度学习环境,方便学习。下面就记录下这次折腾的成果。标题是从零开始,手把手搭建,但是需要读者具备基础的Linux操作知识和命令行交互习惯。当然,读者如果初入Linux也没关系,每个人都是从新手开始的。笔者在搭建深度学习环境的过程,也重装了好几次,换了很多系统。所以,挫败不可避免,只需勇往直前。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

本文以TensorFlow2.0为例,但是Pytorch和MXNet等框架都可以按照本文介绍的方法搭建配置。

Let's Go!

心急的读者可直接从 二.安装系统 开始阅读。

=====================================================

一. 搭建一套自己的深度学习平台

1.为什么需要自己搭建

  • 云主机太贵。一般地,AWS机器学习便宜且算力恰当的实例也要0.9美元/时。国内同样算力的阿里云、腾讯云只会更贵。
  • Colab这类免费平台不稳定,可以跑跑玩具实例,不宜作为严肃的学习和打比赛用途。最常见的问题是:有较高机率分配不到GPU;或者训练过程连接超时;需要翻墙。
  • 搭建这样一个平台,不仅可以用作深度学习,还可以搭建大数据环境(纵使单机版也足以满足学习目的)。
  • 经济宽裕后还可以再升级配置
  • 强化自己的折腾能力。不开玩笑的,组装硬件+环境配置可以提高动手能力

2.应该如何挑选显卡

  • GTX1080Ti 11G 版本目前价位在 3800 ~ 4500 元左右,虽然性价比非常高,但是非常非常高的机率买到矿卡(别人挖矿后淘汰的二手卡),慎重选择
  • RTX2070 SUPER 8G 目前价位在3500元左右,综合算力和性价比考虑,值得推荐。
  • RTX2060 和 GTX1080 等 6G 版本的显卡,不是非常推荐。考虑一个问题:如果是6G的显卡,配两块才12G,升级的空间和价值不大。
  • RTX2080Ti 和 Titan 系列的显卡,如果预算非常充裕可以直接选购,算力非常强劲。

3.操作系统比较

  • ubuntu系列:笔者接触过16.04,18.04,19.04,19.10. ubuntu是深度学习领域非常流行的一个Linux发行版,好处很多,比如容易上手。但是,我个人认为,最好远离ubuntu,这个系统太容易崩溃了。也许有读者会说为什么我就没有遇到崩溃的事情呢?笔者不置可否,但是为了稳妥起见,如果您希望在一番辛苦配置之后的一年甚至两年后还想使用这套环境,请避免使用ubuntu。
  • archlinux系列: 笔者接触过原生的archlinux和manjaro发行版。该系列的系统非常先锋,犀利。安装任何东西都非常容易,往往一行 pacman -S xxx 搞定。但是滚动更新犯了稳定的大忌,建议读者也避免选用。
  • deepin系列:这是国内的一个发行版,虽是Linux,使用起来和windows其实差不多,尤其是自带Wine使得很多windows软件可以直接安装使用。但鉴于此系列的系统有很多bug(个人体验),不推荐选用它搭建我们的深度学习平台。
  • centos系列:这是笔者接触过的最稳定的版本。这套系统脱胎于RedHat——企业级系统,主打稳定性。当然批评centos的用户不在少数,但是我们的目的就是搭好一套环境,然后不再折腾操作系统方面的事情。centos正合适。注意,不要选用最新的centos8,会出现一些不兼容现象,比如臭名昭著的libappindicator丢失问题。笔者建议选择centos7-1908就可以了,这是centos7最后一个版本,足够新了。

4.为什么非要使用Linux并且安装在真实机器上

  • windows是最容易用的系统,但是对于需要运行深度学习等任务的人来说却不是这样。首先,很多深度学习框架都优先支持Linux;其次,优秀的并行计算框架,比如Ray目前仍只支持Linux;再次,如果读者需要在运行tensorflow等框架的同时,还要和sparkmlib等组件交互,使用linux系统是最省精力的选择。
  • 虚拟机不是个好的选择。如果只是利用CPU训练神经网络,虚拟机是个好选择。如果读者已经有一块非常不错的显卡,虚拟机就是个坏的选择。

5.笔者的机器配置

  • CPU:I7-9700K
  • 显卡:RTX2070 SUPER 8G
  • 内存:32G
  • 主硬盘:500G SSD
  • 次硬盘:4T 机械硬盘
  • 电源:650W
  • 操作系统:centos7-1908
  • 客户机:一台安装Win10操作系统的笔记本电脑

6.安装的大致流程

  • 安装系统

    注意,笔者安装的是无桌面客户端的版本,然后远程登陆去操作的。这样的好处是,可以把机器当作专门的学习平台,省去了一大堆不必要的配置(比如安装搜狗输入法、网易云音乐... );而且一块好显卡和Steam相遇注定要荒废学业 。

  • 安装NVIDA显卡驱动
  • 安装CUDA
  • 安装CuDNN
  • 安装Anaconda
  • 安装深度学习框架,以 TensorFlow2.0 为例
  • 配置远程访问

=====================================================

下面笔者就根据自己的实际操作情况,来介绍如何从零搭建一台深度学习机器。

二. 安装系统

1.制作启动盘(在windows操作上完成下列步骤)

  • 从清华源上下载CentOS-7-x86_64-Minimal-1908
  • 从deepin社区下载bootmaker工具 (非常好用的U盘启动器制作工作)
  • 运行bootmaker,插入一只容易4G以上的U盘,根据bootmaker的界面选择下载好的操作系统,然后选择这只U盘,注意勾选格式化选项,然后制作启动盘
  • 将下载的iso镜像文件复制一份到启动盘
  • 修改U盘的名称,比如修改为CENTOS这类好记的名称

2.安装系统

  • 插入U盘到需要安装系统的机器上
  • 开机后进入boot界面,选择从U盘启动
  • 不出意外,应该能看到下面界面

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第1张

  • 用上下键把高亮光标移动到第一项,按 e 键,把下面红色区域删除,然后输入前面命名的CENTOS,格式为 LABEL=CENTOS quiet

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第2张

  • 按组合键 ctrl + x 开始安装
  • 接下来就是选择系统语言,笔者选择了英文,读者酌情选择
  • 后面就是一些常规配置,根据读者自己的需要选择即可。如果不熟悉Linux分区操作的,可以选择自动划分,一般根目录有50G足够。
  • 囿于篇幅,操作系统的安装就介绍到这里。系统安装完成后,读者可以配置一下软件源,目的是为了安装新软件的时候能使用国内的仓库(速度快)。具体操作请搜索,关键词为:centos7更换阿里源
  • 另外,centos还需要配置一下打开终端的快捷键,搜索关键词:centos7 添加终端快捷键

三. 安装NVIDA组件

1.安装CUDA

  • CUDA又叫cuda-toolkit,是NVIDA公司专门开发的一套接口,方便利用GPU做高速计算。主流的深度学习框架都面向CUDA做了兼容。
  • CUDA的版本适配非常重要。目前TensorFlow2.0在CUDA上最稳妥的选择是10.0,如果选择10.1以上,有机率不识别GPU
  • CUDA仓库下载CUDA10.0,按照下图选择

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第3张

  • 取得下载路径后使用 wget 命令下载,然后在存放文件的路径下依次运行下述三行命令

    • sudo rpm -i cuda-repo-rhel7-10-0-local-10.0.130-410.48-1.0-1.x86_64.rpm
    • sudo yum clean all
    • sudo yum install cuda
    • sudo vim ~/.bashrc 然后在bashrc文件里添加下面配置
    • export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}

2.安装CuDNN

  • CuDNN是深度神经网络库,和CUDA搭配使用,专门用于深度学习任务
  • CuDNN仓库下载适配CUDA版本的安装包,注意认准CUDA10.0版本号(下载CuDNN前需要注册,推荐使用微信注册)
  • 在存放CuDNN包的路径下运行下列命令

    • tar xzvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
    • sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
    • sudo cp -P cuda/lib64/lib* /usr/local/cuda/lib64
    • sudo chmod a+r /usr/local/cuda/include/cudnn.h
    • sudo chmod a+r /usr/local/cuda/lib64/lib*
    • sudo ldconfig
  • 推荐一篇NVIDA官方写的文档,详细介绍了CuDNN的安装:DEEP LEARNING SDK DOCUMENT

3.安装NVIDA显卡驱动

  • 显卡驱动有一个安装原则:装最新的驱动。
  • 读者可以去NVIDA官网根据自己的显卡型号搜索合适的驱动,注意notebook是指笔记本,不是给台式机用的。
  • 点击搜索后会跳转到一个下载页面,右键复制这个下载路径
  • 在cenots的终端输入 wget 下载路径,就可以直接把驱动下到本地硬盘上
  • 输入 echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist.conf
  • 输入 lsmod | grep nouveau 如果没有输入任何内容,说明成功禁止了nouveau
  • 安装这个驱动,输入 ./NVIDIA-Linux-x86_64-440.59.run (读者根据自己下载的驱动名修改;根据提示安装)
  • 重启机器后输入 nvidia-smi,如果看到下面画面,说明已经成功安装

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第4张

四. 安装深度学习框架 TensorFlow

1.关于Anaconda

  • Anaconda是python领域比较流行的包管理器,类似的有virtualenv等。Anaconda的特色是,会自动帮助安装需要的依赖项;并且使用方便,文档详尽。
  • 没必要安装完整版的Anaconda,安装Miniconda即可,因为我们会在虚拟环境中搭建需要的各种深度学习环境。例如在A环境围绕TensorFlow搭建,在B环境围绕Pytorch搭建,两套环境互相不会污染。如果读者将两个框架安装在一个环境里,会有严重的冲突。

2.安装Anaconda

  • 清华源仓库下载Miniconda
  • 使用 sh 命令直接安装,使用默认选项即可

3.创建虚拟环境并激活

  • conda create --name tensorflow (也可使用其他名称,如 tf)
  • 激活环境 conda activate tensorflow

4.安装 TensorFlow2.0

  • conda install tensorflow-gpu==2.0.0
  • 请严格输入这条命令,conda会下载安装所需的全部依赖,其中包括cudatoolkit-10.0.130和cudnn-7.6.5,虽然前面安装了这两个包,但是不冲突,可以默认执行;如果在训练神经网络时发现冲突,可以回头再删除这两个包

5.补充两条常用的conda命令

  • conda deactivate 退出当前环境
  • conda info --env 查看本机上安装的环境

五. 配置远程访问

1.安装PUTTY远程客户端

  • XShell虽然好用,但它是收费软件。Putty基本可满足使用需要
  • 按照下图进行配置

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第5张

2.安装 WinSCP

  • WinSCP是一款免费的传输软件,方便客户机和终端机之前互传文件
  • 配置过程简单直白,文件支持拖拽,这里不再赘述。

3.安装jupyter notebook并配置远程访问

  • conda install jupyter notebook
  • jupyter notebook --generate-config 生成一份默认配置文件
  • 输入python,进入ipython交互环境,如下图所示输入代码

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第6张

  • 注意,中间两步输入密码时不会显示任何字符;记得保存打印结果的字符串 'sha...'
  • 开始配置jupyter notebook
  • 打开jupyter的配置文件,路径一般为 /home/用户名/.jupyter/jupyter_notebook_config.py

    • 修改 c.NotebookApp.ip,填充机器的IP地址 (使用 ip addr 命令查看本机的IP地址)
    • 修改 c.NotebookApp.password, 把保存的密码填充进去,注意格式为 c.NotebookApp.password = u'sha...'
    • 修改 c.NotebookApp.open_browser , 这项默认是True,远程登陆时要修改为 False
    • 将 c.NotebookApp.port =8888 反注释 (可以自己另指定一个端口)

4.开放端口

  • 推荐使用 iptables 工具,首先要关闭 firewall 服务

    • systemctl stop firewalld.service
    • systemctl disable firewalld.service
    • systemctl mask firewalld.service
  • 安装 iptables 防火墙

    • sudo yum install iptables-services -y
  • 启动 iptables

    • systemctl enable iptables
    • systemctl start iptables
  • 编辑防火墙文件

    • sudo vim /etc/sysconfig/iptables
  • 添加端口(添加下述配置)

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

  • 重启 iptables 使新端口生效

    • systemctl restart iptables.service
  • 设置防火墙开机启动

    • systemctl enable iptables.service

=====================================================

六. 验收

  1. 激活tensorflow环境

    • conda activate tensorflow
  2. 开启jupyter notebook (可以添加禁止挂起和后台执行命令)

    • nohup jupyter notebook &
  3. 在远程客户机(读者的另外一台电脑,比如笔记本)浏览器输入 192.168.1.100:8888 (实际IP地址根据读者机器的地址修改),输入前面设置的密码后即可连接成功
  4. 验证是否成功安装了tensoflow,以及成功识别GPU设备

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第7张

七. 福利(救命稻草 )

如果在使用 tensorflow 过程中出现Error : Failed to get convolution algorithm,这是因为显卡内存被耗尽了(按照本文档安装可以排除cuda版本冲突的可能)。可以在代码的最开始输入下面两行配置

  • physical_device = tf.config.experimental.list_physical_devices("GPU")
  • tf.config.experimental.set_memory_growth(physical_device[0], True)

=====================================================

至此,我们就完成了从零开始搭建一套深度学习主机的全部工作。希望这篇教程可以帮助读者顺利地搭建好自己的深度学习平台。

如果有任何纰漏差错,欢迎评论互动。

centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例) 人工智能 第8张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄