深度学习电脑配置及安装

最近想给深度学习配置一台服务器,查了很多资料,做了不少功课,前前后后花了不少时间,总结出来,希望后人避免走坑:

硬件购买:

1. CPU:购买需要注意和主板接口类型匹配,如果很在意 GPU 是否工作在 PCIE x16 状态下,尤其是多块 GPU 都要求工作在 PCIE x16 状态下,那么需要注意主板是否支持,CPU 是否支持,这些消息都可以从主板官网(注意是官网,不是京东什么的信息说明)中查到,嫌麻烦或者查不到就问客服。一般来说家用主板 Z**,B**之类的一块卡工作在PCIE x16,两块卡就工作在 PCIE x8,三块及以上就工作在 PCIE x4 上了,尽量避免显卡工作在 PCIE x4 状态上,会影响内存到显存的数据传输速度。

2. 主板:同 CPU,要注意和 CPU 的匹配、以及对于内存容量的支持和 PCIE x16 的支持,一般来说,多块 GPU 都工作在 PCIE x16 状态下,主板采用的 Intel 芯片都是 X** 开头的,理所当然支持的 CPU 也是 X** 型号的,这种主板也被称为服务器主板,一般都有 8 条内存插槽。主板这里唯一值得一提的是,深度学习训练多块 GPU 显卡之间不能靠得太近,除非是上显卡水冷,否则散热是个很大的问题,显卡太热就会降频,导致你买的好显卡没有体现出价值,还不如买个烂显卡。为此一般插显卡的时候遵循——隔着插,也就是说隔一条 PCIE 插下一块显卡,这对主板提出了更高的要求,双卡工作就需要有 4 个 PCIE 插槽,4 卡工作就要求有 8 个 PCIE 插槽,而且这样插显卡还需要满足 GPU 都工作在PCIE x16 的状态下,所以一定要仔细看官网的主板说明,不能偷懒。

3. 电源:电源工作会有工作曲线,一般来说电源工作在最大功率一半的时候,效率最高,这意味着你花的每一分电费都用在了训练上,而不是逸散掉了,这样最好,比如你算了下需要 100W 的功率,那你最好买 200W 的电源。一般CPU功率在 100W 左右,GPU在 300W 左右,这样双卡功率就是 700W,买个 1300W 电源挺好,1000W 电源也是OK的,但不能更低了,除非你单卡。如果是 4 卡,建议直接 1600W。电源选择注意是否金牌,是否模组。对于那些 10 年及以上质保的,不要犹豫,这年头都给你 10 年质保了,你还有什么不满意的,价格上来说 1 元钱 1W,低于这个价格的就不要碰了,这里推荐振华。

4. GPU:穷鬼推荐 1080Ti,现在只有二手的了。其他人推荐 RTX Titan,显存大。2 块 RTX Titan 让你跑任何网络都游刃有余。

5. 内存:一定要比单块 GPU 显存大,建议 32G 起步。

6. 硬盘:推荐东芝 P300。

7. 散热:DIY 建议不要水冷,一旦炸了,一切结束,水冷就交给厂商定制,省心省事还有质保,当然价格也贵,你也不用看此攻略了。风冷注意前面提到的显卡隔着插就 OK 了。还有就是机箱的风道一定要好,前后上三个方向都要有风扇。

8. 机箱:尽量大一些,房子大谁都住得舒服,散热也好。除此之外,风道也要好,还要注意机箱大小和风扇尺寸匹配,别装不下了。推荐海盗船 AIR540,这可是 NVIDIA 服务器同款。

软件安装:

当然是 Linux 系统了,windows 系统由于不支持 python 多进程,读入数据时没法形成流水线,导致训速度很慢

1. 准备好 ios 文件,(可从官网下载 https://ubuntu.com/#download,官网地址直接下载 iso 可能会很慢,但是万幸的是官网提供了 torrent 文件下载,这里可以先下载torrent文件,然后利用百度云盘的离线下载功能来加速)

2. 准备好刻录软件,这里以 UltraISO 为例,注意刻录的时候选择 raw 格式

3. 开机进入 bios,选择从 U 盘启动,安装 ubuntu 系统(这里安装 ubuntu 18.04 LTS)

4. 联网, 在 Settings 的 Power 选项中设置 Blank Screen 时间为 “never”

5. 安装 nvidia 显卡驱动

    在 Terminal 搜索可用显卡驱动

sudo apt search nvidia

    假设发现最高的版本号为440,不同机器不一样,安装驱动

sudo apt install nvidia-440

    可能报错,Unable to locate package nvidia-440,此时进入 Software&Updates, 将 Ubuntu Software 的 Download from 修改为 Main server,关闭,选择 Reload,等待源更新,然后重新进入 Software&Updates,进入 Additional Drivers, 选择非 Nouveau 的那个( 这里是440 ),Apply Changes, 重启系统

    查看 GPU 情况

nvidia-smi

6. 备份及配置源

    首先来个简单的方法

    进入 Software&Updates, 将 Ubuntu Software 的 Download from 修改为 other --> China --> mirrors.aliyun.com,关闭,选择 Reload,等待源更新

    更新源,更新软件,执行

sudo apt update
sudo apt upgrade -y

    再来个复杂的方法

    首先来搞清楚 ubuntu 代号,下面是部分 ubuntu 系统的代号(黑体的形容词部分):

        6.06(LTS) dapper Drake (整洁的公鸭)

        8.04(LTS) hardy Heron (耐寒的苍鹭)

        10.04(LTS) lucid Lynx (清醒的猞猁)

        12.04(LTS) precise Pangolin (精准的穿山甲)

        14.04(LTS) trusty Tahr (可靠的塔尔羊)

        16.04(LTS) xenial Xerus (好客的非洲地松鼠)

        18.04(LTS) bionic Beaver(仿生海狸)

        20.04(LTS) focal Fossa(专注的马达加斯加长尾狸猫)

        ……

    可以用以下命令来看当前系统代号,代号将会显示在Codename后面 —— Codename:*****

lsb_release -a

    备份原来的源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

    打开 souces.list

sudo gedit /etc/apt/sources.list

    然后将下面模板中的 Codename 换成你的代号,比如 20.04 LTS 就是 focal

deb http://mirrors.aliyun.com/ubuntu/ Codename main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ Codename-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ Codename-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ Codename-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ Codename-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ Codename main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ Codename-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ Codename-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ Codename-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ Codename-backports main restricted universe multiverse

    然后粘贴到刚才的 /etc/apt/sources.list 里

    更新源,更新软件,执行

sudo apt update
sudo apt upgrade -y

7. 安装 docker

可参考https://www.runoob.com/docker/ubuntu-docker-install.html

    这里使用官方脚本自动安装

sudo apt install curl
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

    安装成功后可以跑通下面命令:

sudo docker run hello-world

    给用户加 docker 权限(docker 的时候不需要添加 sudo)

    添加 docker 用户组

sudo groupadd docker

    修改组密码,可选

sudo gpasswd docker

    将登陆用户加入到 docker 用户组中

sudo gpasswd -a $USER1 docker
sudo gpasswd -a $USER2 docker
...

    假如用户是 jk,那么上面的命令是: sudo gpasswd -a jk docker

    重启 docker 服务

sudo service docker restart

    更新用户组

newgrp docker

    和前面类似的,安装成功后可以跑通下面命令:

docker run hello-world

    安装 NVIDIA docker

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt update
sudo apt install nvidia-container-runtime -y

    运行测试

sudo docker run -it --rm --gpus all ubuntu nvidia-smi

    安装 docker 官方中国区加速器

    开发者需要开通阿里开发者帐户,再使用阿里的加速服务

    登录后阿里开发者帐户后,https://cr.console.aliyun.com/undefined/instances/mirrors 中查看你的您的专属加速器地址 “https://yourcode.mirror.aliyuncs.com”,其中 yourcode 是每个人自己帐户的加速前缀

    打开 /etc/docker/daemon.json 文件

sudo chmod 777 /etc/docker/daemon.json(修改只读属性)

    向其中添加内容

gedit /etc/docker/daemon.json
{
"registry-mirrors": ["https://yourcode.mirror.aliyuncs.com"]
}
sudo systemctl restart docker
sudo systemctl daemon-reload

尝试下载镜像

sudo docker pull anibali/pytorch
sudo docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime

8. 安装输入法:

    进入 Settings,进入 Region&Language,单击 Manage Installed Languages 等待自动更新,更改 Keyboard input method system 为 IBus

    若出现个别软件包****版本不匹配,可执行以下命令

sudo apt remove ****(先删除)
sudo apt install ****(再重新安装)

    打开 Terminal,执行

sudo apt install ibus-pinyin -y

    重启系统

    进行输入法设置

        进入 Settings,进入 Region&Language,在 Input Sources 里面添加 Chinese(Intelligent Pinyin)

    切换输入法设置

        进入 Settings,进入 Devices,进入 Keyboard,Typing 选项,默认为按住win再按空格

9. 突破内网限制

    可以考虑租个有公网 IP 的云服务器,然后用SSH反向映射来搞

这里选择通过第三方软件远程连接,下载软件向日葵https://sunlogin.oray.com/download/

    正常安装只需要双击就可以了,可能会报错说依赖的库不存在,如果用命令行安装,报错可能会更加明显,命令行安装方法如下:

sudo dpkg -i SunloginClient-10.1.1.38139_amd64.deb

    20.04 会报错是缺少库 libwebkitgtk-3.0-0,尝试命令

sudo apt install libwebkitgtk-3.0-0

如果失败,需要手动下载 libwebkitgtk-3.0-0 及其相关依赖,具体网址可以查看https://pkgs.org/download/libwebkitgtk-3.0-0

wget -c http://ftp.br.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u4_amd64.deb
wget -c http://ftp.br.debian.org/debian/pool/main/w/webkitgtk/libjavascriptcoregtk-3.0-0_2.4.11-3_amd64.deb
wget -c http://ftp.br.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.5-1.1_amd64.deb
wget -c http://ftp.br.debian.org/debian/pool/main/w/webkitgtk/libwebkitgtk-3.0-0_2.4.11-3_amd64.deb

sudo dpkg -i libicu57_57.1-6+deb9u4_amd64.deb
sudo dpkg -i libjavascriptcoregtk-3.0-0_2.4.11-3_amd64.deb
sudo dpkg -i libjpeg62-turbo_2.0.5-1.1_amd64.deb
sudo apt install libenchant1c2a libegl1-mesa
sudo dpkg -i libwebkitgtk-3.0-0_2.4.11-3_amd64.deb

    也可以一次性安装如下所示

wget -c http://ftp.br.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u4_amd64.deb http://ftp.br.debian.org/debian/pool/main/w/webkitgtk/libjavascriptcoregtk-3.0-0_2.4.11-3_amd64.deb http://ftp.br.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.5-1.1_amd64.deb http://ftp.br.debian.org/debian/pool/main/w/webkitgtk/libwebkitgtk-3.0-0_2.4.11-3_amd64.deb

sudo dpkg -i libicu57_57.1-6+deb9u4_amd64.deb libjavascriptcoregtk-3.0-0_2.4.11-3_amd64.deb libjpeg62-turbo_2.0.5-1.1_amd64.deb
sudo apt install libenchant1c2a libegl1-mesa
sudo dpkg -i libwebkitgtk-3.0-0_2.4.11-3_amd64.deb

    可以正常安装向日葵了,重复前面的步骤,双击或者命令行即可

    除此之外需要注意,向日葵在远程的时候可能会修改显示配置,导致与服务器端不一致,一般安装完 ubuntu 系统使用的是 GNOME 显示管理器 gdm3,由于该管理器相对严苛,因此当 win 主机远程连接的时候会出现 “连接已断开” 的情况,遇到这种情况需要安装新的显示管理器 lightdm,命令如下

sudo apt install lightdm -y

    然后重启电脑

    个人电脑到这里就结束了,后面是非docker下运行以及多人使用的简单服务器需要增加的步骤


10. 安装 CUDA 

    CUDA 下载网址:https://developer.nvidia.com/cuda-downloads

    选择 runfile(local) 进行下载至 Home 目录

    首先需要确保 gcc, make, libc6-dev 已安装,若未安装,在 Terminal 中执行

sudo apt update
sudo apt install gcc make libc6-dev

    安装的时候注意如果已经安装完显卡驱动,只需要安装 CUDA Toolkit *.* 就行了,也就是只有该项前面是 [X],其他选项都用用回车去掉 X 变成 [  ]

    可能出现安装不了的情况,具体看 cuda-installer.log 文件,会有提示,如果是 gcc 版本太高,按照以下步骤操作

sudo apt remove gcc-9(删除高版本 gcc,这里是 gcc-9)
sudo apt install gcc-8

    装完后进入到 /usr/bin 目录下

sudo ln -s gcc-8 gcc(重新链接)

    可以通过以下命令查看 gcc 版本

gcc -v

    ================== 如果未执行第 5 步 ==================

    由于我们事先未下载显卡驱动,故需要通过 cuda 的 runfile 来进行显卡驱动的安装

    首先需要编辑文件 blacklist.conf

sudo gedit /etc/modprobe.d/blacklist.conf

    在文件的最后部分插入一下两行内容,禁用 nouveau 开源显卡驱动

blacklist nouveau
options nouveau modeset=0

    之后更新系统并重启

sudo update-initramfs -u
sudo reboot

    重启之后验证 nouveau 是否已经被禁用,若以下命令没有输出信息则说明确实已经禁用了

lsmod | grep nouveau 

    切换登录模式为命令行模式

sudo systemctl set-default multi-user.target

    重启电脑

reboot

    此时会发现图形界面已经消失,当前为命令行模式,输入用户名和密码登录

    Terminal 输入 ls 会看到 Home 目录下之前已经下载好的 runfile

    Terminal 输入 sudo chmod +x cuda_10.1.105_418.39_linux.run(按tab键文件名可以自动补全)

    Terminal 输入 sudo sh cuda_10.1.105_418.39_linux.run 进入下载界面

                   输入 accept,回车

    由于需要安装显卡驱动,因此所有选项前面均为叉,表示全部安装,切换到 install,开始自动安装

    安装完毕,此时可以恢复图形界面

sudo systemctl set-default graphical.target

    重启电脑即可

    输入以下命令可以看到显卡信息

nvidia-smi

   ================== 如果未执行第 5 步 ==================

    之后将 cuda 加入到当前用户的环境变量

gedit ~/.bashrc

    在文件的最后添加以下两行

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

    保存文件,回到终端后执行(使环境变量生效)

source ~/.bashrc

11. 安装 pip3

sudo apt install python3-pip

12. 安装 pytorch,具体命令可以参考 https://pytorch.org/

sudo pip3 install torch torchvision

13. 安装tmux(为了可以断网依然在跑程序,若不用 ssh 连接则忽略此项)

sudo apt install tmux

14. 配置 ssh 服务器端

sudo apt install openssh-server -y

15. 配置远程桌面

    参考网址:https://www.cnblogs.com/xuliangxing/p/7642650.html

    进入 Settings, 进入 Sharing,点击 Screen Sharing,点击 OFF 变成 ON,点击 Require a password, 设置远程桌面密码

    安装 vncserver

sudo apt-get install xrdp vnc4server xbase-clients

    安装dconf-editor

sudo apt-get install dconf-editor

    打开 dconf-editor 工具( 桌面直接搜索 dconf-editor 就能找到 ),

    打开之后,依次展开 org->gnome->desktop->remote-access,然后取消 “require-encryption” 的勾选即可。

16. 挂载磁盘

    创建目标目录

sudo mkdir /media/disk1
sudo mkdir /media/disk2
...

    并修改这些目录的权限

sudo chmod -R 777 /media/disk1
sudo chmod -R 777 /media/disk2
...

    查看各个磁盘的编号(这里假设编号是/dev/sdb1,/dev/sdc1)、类型

sudo blkid

    打开文件

sudo gedit /etc/fstab

    添加相应的行数

/dev/sdb1 /media/disk1 ext4 defaults 0 0
/dev/sdc1 /media/disk2 ext4 defaults 0 0

17. 创建新用户

    创建一般用户执行

sudo adduser jk

    创建管理员用户执行

sudo usermod jk -G sudo

    第一个密码是计算机的密码

    第二三个密码是该用户远程访问密码,后面的 Full Name 等等都可以忽略直接回车

    给用户配置环境变量

    离开当前用户,登陆要配置环境变量的用户

su -l username(su 代表 switch user,l 代表 login)

    打开文件

gedit ~/.bashrc

        在文件的最后添加以下两行

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

        保存文件,回到终端后执行(使环境变量生效)

source ~/.bashrc

你可能感兴趣的:(深度学习电脑配置及安装)