天才少年稚晖君 | 【保姆级教程】个人深度学习作业站装备攻略

来源:zhuanlan.zhihu.com/p/336429888

0. 前言

作业原因一向想装备一台自己的深度学习作业站服务器,之前自己看完paper想做一些试验或许复现模型的时分只能用自己的日常PC来跑很费事…一方面电脑得装双体系,干活的时分就不能用作其他用处了;另一方面,即使是没有运用流程的问题,GTX1080的功用也仍是弱了一些,更何况我用的是一个A4迷你机箱,长期高负载的练习任务也不太牢靠。

以前在公司的时分还能够用公司的DGX练习集群做一些试验,可是我现在的开发环境现已切换到了昇腾的NPU架构芯片之上了,昇腾渠道算力方面虽然是比肩甚至能够逾越英伟达,可是现在暂时许多学术界的生态都仍是依据GPU服务器的(首要是指开源代码),且咱们这儿昇腾服务器对个人也不好买(且买不起),所以有一台这样的GPU作业站仍是会便利一些。

那么本文是我在组装作业站进程中记载的详细操作流程,供有类似需求的同学参阅~

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

1. 硬件篇

1.1 作业站装备选型

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

配件全家福

服务器的装备以个人运用性价比为主,一同考虑到今后的扩展性像是主板和机箱这些配件装备设置一些冗余。首要是CPU渠道的挑选,虽然AMD这两年实在是香,可是作为生产力工具考虑到软件库的兼容性问题,仍是决议挑选intel渠道里十代X系列CPU+X299主板,算是比较稳的计划,并且某东上CPU调配主板套装一同买也性价比也很高。GPU方面本年的30系显卡都比较良心,运用两块3080或许一块3090都是很给力的,24G的显存也现已跟TITAN RTX持平了(价格却只需一半)…这儿考虑到主板上只能插两块PCIEx16的卡,为了今后或许的提高功用还需求再加一块卡,所以3090是最佳挑选。

最终选定的装备如下:

  • CPU:i9-10920X

  • 显卡GPU:七彩虹RTX3090 Advance

  • 内存:芝奇幻光戟16G x 4共64G

  • 主板:华硕X299-DELUXE PRIME

  • 固态硬盘:1TB西数NVME SSD + 1TB三星870QVO SATA SSD

  • 机械硬盘:希捷EXOS 12TB氦气盘

  • 电源:海盗船AX1200i 1200W模组电源

  • 散热器:海盗船H100X240水冷 + 若干120机箱电扇

  • 机箱:海盗船AIR540 E-ATX机箱

其间硬盘的规划是这样的:1T的NVME固态做体系盘,12T的机械盘作为数据集仓库,别的一个1T SATA固态作为练习时的数据集缓存,因为IO读写速度也是会影响练习功率的,所以相比于直接从机械盘里边读取数据,加一块SSD做cache作用会好许多。

1.2 电脑组装

总归便是高兴的玩具组装进程~

机箱尺寸比较大,预留的空间十分足所以不会呈现像是在装A4机箱时那种考验走线和装置顺序的技巧问题;并且服务器嘛,安静地塞在某个角落就好了,也不必过于考虑什么美观问题,所以走线就很随意了:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

这个机箱规划仍是很科学的,预留了足够多的扩展接口比方:2个 3.5寸可快拆盘位、5个2.5寸可快拆盘位、光驱位(用不到,后期改造了)、前后顶部一堆电扇位等等。线材基本都能够塞到机箱的另一个旁边面,前面板装置了三个进风电扇,背部装置了一个出风电扇,水冷的冷排和电扇在顶端。

这儿值得一提的是,正面的光驱位归于用不上的老古董,所以我改造了一下预备装一个小型的LCD屏幕上去,这样偶尔需求进图形桌面或许BIOS界面的时分,就不必再抱个显现器插在机箱上了;此外今后也能够写个软件把这个屏幕作为体系状况监视器来运用~

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

↑ 后边会3D打印一个外壳把屏幕固定住。

这个屏幕也是我前阵子刚规划的,项目现已开源了叫做PocketLCD,感兴趣的能够去仓库看看:

github.com/peng-zhihui…

2. 体系篇

体系挑选DL开发里边最常用的Ubuntu,最新的稳定版别是20.04,装置进程需求预备一个U盘作为体系发动盘。

2.1 装置Ubuntu 20.04体系

  1. 在官网下载Ubuntu镜像:Ubuntu 20.04.1 LTS (Focal Fossa),挑选Desktop Image版别,得到.iso的镜像文件。

  2. Windows下运用UltraISO工具翻开.iso镜像文件,并将其写入到一个U盘,得到体系发动盘:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

  1. 将U盘插到服务器上,开机按del键(详细什么键跟主板型号有关)挑选发动项进入暂时的Ubuntu体系,在图形界面中挑选Install Ubuntu,一切装备都能够运用默许的,改一下用户名和暗码即可。 这儿主张运用英文作为默许言语,省得给自己日后开发找费事哈。

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

装置进程中会联网下载一些软件包更新,能够直接点skip掉,在装置好体系之后再手动更新也是相同的。

  1. 进入体系后设置一下root账户暗码:

    sudo passwd root

  2. 一同为了防止每次sudo都要输入暗码,这儿装备一下visudo

    sudo visudo

在文件最终加上一句(改为自己的用户名):

pengzhihui ALL=(ALL) NOPASSWD: ALL

2.2 装备国内镜像软件源

为了提高后续装置软件时的幸福感,第一步当然先要替换一下软件源。

  1. 备份本来的源:

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

  2. 将源的内容设置为阿里云镜像:

    sudo vim /etc/apt/sources.list

内容改为:

deb mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

  1. 更新软件列表:

    sudo apt update

    sudo apt upgrade

也能够去网上搜其他镜像,在我这边经测验阿里云是最快的。别的也能够在图形桌面环境下翻开Software & Updates软件,在里边也有网速测验并挑选最佳源的功用。

2.3 装置Python和pip

  1. Ubuntu体系默许自带python,有版别需求的话也能够自己装置一下(不装置也行因为后边会装置conda环境):

    sudo apt install python3

    sudo apt install python3-pip

  2. 不管是不是自己装置的python,替换python的pip源主张是必定操作一下的,pip装置速度会快许多:

    cd ~

    mkdir .pip

直接新建并修正pip.conf:

sudo vim ~/.pip/pip.conf

改为以下内容(这儿用的清华源,也能够试一下阿里、豆瓣等源):

[global]

index-url = pypi.tuna.tsinghua.edu.cn/simple/

[install]

trusted-host = pypi.tuna.tsinghua.edu.cn

  1. 更改默许python版别,python目录默许链接的是python2,而现在基本都是用python3开发了,每次都输入python3很费事所以这儿直接替换默许的python指令链接。

把本来的python软链接删掉:

sudo rm /usr/bin/python

新建一个软链接:

sudo ln -s /usr/bin/python3 /usr/bin/python

sudo ln -s /usr/bin/pip3 /usr/bin/pip

现在输入python就会进入python3环境了。

2.4 装备SSH & 远程桌面

纯洁装置的体系里边默许没有敞开SSH,咱们手动装置一下。

  1. 装置ssh:

    sudo apt install ssh

会主动装置好许多依靠包并发动服务,完结之后用XShell等软件就能够SSH登录服务器了。

  1. 装置xrdp

Xrdp 是一个微软远程桌面协议(RDP)的开源完成,它允许咱们经过图形界面操控远程体系。这儿运用RDP而不是VNC作为远程桌面,是因为Windows自带的远程桌面衔接软件就能够衔接很便利,别的RDP在Windows下的体会十分好,包含速度很快(因为压缩计划做得比较好),能够直接在主机和远程桌面之间仿制粘贴等等。

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

有的Xwindow软件是不太兼容xrdp的(比方ubuntu 18.04的默许桌面),可是ubuntu 20.04运用的Gnome是彻底ok的。

装置进程如下:

sudo apt install xrdp

装置完结xrdp 服务将会主动发动,能够输入下面的指令验证它:

sudo systemctl status xrdp

默许状况下,xrdp 运用/etc/ssl/private/ssl-cert-snakeoil.key,它仅仅对ssl-cert用户组成语可读,所以需求运转下面的指令,将xrdp用户增加到这个用户组:

sudo adduser xrdp ssl-cert

sudo systemctl restart xrdp

然后运用Windows自带的远程桌面软件衔接服务器IP地址或许域名就行了。

2.5 装置frp进行内网穿透

前面介绍的SSH和远程桌面都是需求在局域网下经过IP地址进行衔接的,而咱们装备一台服务器最重要的诉求,应该是能够随时随地去拜访服务器。

那在家里边,网络运营商提供的网络服务经过路由器路由到各个设备,此刻路由器会一同具有内网地址(路由器之内,局域网,LAN,也便是192.168.x.x)和外网地址(路由器之外,互联网,WAN)。可是其实这个WAN口的IP并不是真实的“公网IP”,而时经过了多层的NAT转化之后的地址,外网的设备是不能经过这个地址拜访到路由器的。这个问题的原因是ipv4地址池紧张,假如运营商给每家的路由器都安排一个公网ip的话,那ip地址早就不够用了呀。

因而为了能让外网拜访到咱们局域网内的设备,就需求跟中国电信等运营商请求公网ip(现在能请求到的概率也现已不大了,并且即使请求到也不是一切端口都能够运用的),或许咱们自己动手做一些操作来到达同样的意图。

有几种办法:

  • 能够直接用类似花生壳这样的DDNS服务渠道做转发完成内网穿透,优点是比较简略稳定,缺陷是需求继续付费,并且速度和延迟作用一般,并且每加一个端口都要额外付费。

  • 也能够像我相同运用frp之类的软件做反向署理来完成内网穿透,这个计划也是需求你有一台带公网IP的云服务器的,优点便是彻底可控,自己想装备多少个端口的穿透都能够,速度跟你的云服务器带宽有关。

为什么需求多个端口? 是因为不同运用占用的端口不同,比方咱们的SSH走的是22号端口,而远程桌面的rdp走的是3389号端口,假如需求自建Web服务的话则是走80/443端口、想把作业站作为上外网的署理服务器的话会需求1080端口等等…所以用上面第二个计划显然会便利许多,并且云服务器也不贵,我在腾讯云上购买一年只需200左右。

下面介绍怎样装置装备frp:

frp分为frps(server)和frpc(client)两个包 ,其间前者装置到咱们的云服务器上,后者装置在需求被外网拜访到的各个设备上,这儿便是指咱们的深度学习作业站。

云服务器端:

去这儿下载适合你服务器体系的frp软件,我这儿是用的是腾讯云64位Ubuntu16.04所以挑选frp_0.34.3_linux_amd64.tar.gz,下好之后解压:

tar -zxvf frp_0.34.3_linux_amd64.tar.gz

咱们需求修正的文件是frps.ini :

内容改为:

[common]

bind_port = 7000 # frp服务的端口号,能够自己定

dashboard_port = 7500 # frp的web界面的端口号

dashboard_user = user # web界面的登陆账户,自己修正

dashboard_pwd = pass # web界面的登陆暗码,自己修正

authentication_method = token

token = xxxxx # frp客户端衔接时的暗码,自己修正

保存装备后,运用该指令发动:

./frps -c ./frps.ini

在浏览器输入 [云服务器的公网ip]:7500 即可拜访到 frp的web管理界面。

留意,或许需求去云服务器操控台装备安全组规矩 开放以上涉及到的端口,否则无法拜访。

本地的深度学习服务器端:

  1. 下载相应版别的frpc软件包(跟刚刚相同的):Releases fatedier/frp (github.com),这儿选amd64的,下好之后解压到一个暂时文件夹。

  2. 修正frpc.ini装备文件,内容如下:

    [common]

    server_addr = xx.xx.xx.xx # 你的云服务器的公网ip

    authentication_method = token

    token = xxxxx # 刚刚装备的frp衔接暗码

    server_port = 7000 # 刚刚装备的frp服务端口

    [Fusion-ssh]

    type = tcp

    local_ip = 127.0.0.1

    local_port = 22

    remote_port = 20022

    [Fusion-rdp]

    type = tcp

    local_ip = 127.0.0.1

    local_port = 3389

    remote_port = 23389

经过上面的脚本就能够把关于云服务器特定端口的拜访给重定向到本地服务器的某个端口了,简略地讲便是:假如我用SSH客户端拜访 [云服务器ip]:20022,就能够经过反向署理直接拜访到[本地的练习服务器ip]:22;同理需求衔接远程桌面的话,只需求拜访[云服务器ip]:23389就能够了。

当然你也能够修正脚本增加更多映射~

  1. 增加开机主动发动的脚本,新建一个文件内容如下:

文件名/etc/systemd/system/frpc.service,留意修正其间的途径:

[Fusion]

Description=Frp Server Daemon

After=syslog.target network.target

Wants=network.target

[Service]

Type=simple

ExecStart=/usr/local/bin/frp/frpc -c /usr/local/bin/frp/frpc.ini # 修正为你的frp实践装置目录

ExecStop=/usr/bin/killall frpc

#发动失利1分钟后再次发动

RestartSec=1min

KillMode=control-group

#重启操控:总是重启

Restart=always

[Install]

WantedBy=multi-user.target

然后履行以下指令启用脚本:

sudo systemctl enable frpc.service

sudo systemctl start frpc.service

经过下面的指令查看服务状况,假如是running的话就阐明能够了:

sudo systemctl status frpc.service

这儿趁便提一下,依照习气一般把上面的frp软件解压防止在/usr/local/bin目录下。Linux 的软件装置目录是也是有讲究的,理解这一点,在对体系管理是有益的

  • /usr:体系级的目录,能够理解为C:/Windows/

  • /usr/lib:能够理解为C:/Windows/System32

  • /usr/local:用户级的程序目录,能够理解为C:/Progrem Files/,用户自己编译的软件默许会装置到这个目录下

  • /opt:用户级的程序目录,能够理解为D:/Software,opt有可选的意思,这儿能够用于放置第三方大型软件(或游戏),当你不需求时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上运用

源堆放哪里?

  • /usr/src:体系级的源码目录

  • /usr/local/src:用户级的源码目录。

2.6 装置SAMBA服务

假如能把服务器上的磁盘直接挂载到咱们运用的Windows个人PC上是不是很爽?

如开头的视频里边演示的,能够经过树立局域网SAMBA服务来完成这个作用:

  1. 装置sambasamba-common-bin

    sudo apt-get install samba samba-common-bin

  2. 装备/etc/samba/smb.conf文件

    sudo nano /etc/samba/smb.conf

在最终一行后边参加:

# 同享文件夹显现的称号
[home]
# 阐明信息
comment = Fusion WorkStation Storage
# 能够拜访的用户
valid users = pengzhihui,root
# 同享文件的途径
path = /home/pengzhihui/
# 可被其他人看到资源称号(非内容)
browseable = yes
# 可写
writable = yes
# 新建文件的权限为 664
create mask = 0664
# 新建目录的权限为 775
directory mask = 0775

能够把装备文件中你不需求的共享称号删去,例如 [homes], [printers] 等。

运转这个指令测验一下装备文件是否有错误,依据提示做相应修正:testparm

  1. 增加登陆账户并创立暗码

有必要是 linux 已存在的用户:

sudo smbpasswd -a pi

然后重启服务即可:

sudo /etc/init.d/samba-ad-dc restart

接下来能够在Windows的网络中发现设备了:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

可是或许会呈现无法点开的状况,这儿需求在Windows的凭证管理器中增加账户信息(开端菜单里查找凭证管理器即可翻开),点击增加Windows凭证,输入你的服务器称号和账户暗码:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

接下来就能够点进去看到服务器上的文件了。 为了愈加便利地进行文件交互,咱们增加对应的磁盘到Windows资源管理器的此电脑中:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

挑选刚刚服务器的网络途径即可增加:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

3. DL开发环境装备篇

装备这台服务器的首要作用便是做深度学习练习,所以GPU相关的驱动和环境时肯定要安排好的,网上材料许多很杂,这儿梳理出了最便捷牢靠的装置办法供大家参阅~

3.1 装置Nvidia显卡驱动

最简略的方法是经过体系的软件与更新来装置:

  1. 进入体系的图形桌面,翻开Software & Updates软件,能够看到标签栏有一个Additional Drivers

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

挑选第一个装置Nvidia官方驱动(第二个是开源驱动)即可,依据网络状况稍等大约十分钟,装置完重启服务器。

  1. 重启完之后更新一下软件:

    sudo apt update

    sudo apt upgrade

这儿会连带Nvidia的驱动一同晋级一遍,更新到最新的驱动;更新完或许会呈现nvidia-smi指令报错,再重启一下就解决了。

3.2 装置CUDA

假如之前装置了旧版别的cuda和cudnn的话,需求先卸载后再装置:

sudo apt-get remove –purge nvidia*

然后依照前面的办法重新装置显卡驱动,装置好了之后开端装置CUDA:

  1. 去官网下载cuda装置包:CUDA Toolkit 11.0 Download | NVIDIA Developer,相关选项如下(依据实践状况挑选):

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

  1. 运转下面的指令进行装置:

    chmod +x cuda_11.0.2_450.51.05_linux.run

    sudo sh ./cuda_11.0.2_450.51.05_linux.run

或许会报一个警告:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

前面现已卸载过旧版别了直接Continue就好。然后依据提示挑选装置选项,留意不要勾选第一个装置显卡驱动的,因为之前现已装置过了。 装置完结后提示

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

  1. 依据上图提示需求装备环境变量:

    nano ~/.bashrc

再文件最终参加以下句子:

export CUDA_HOME=/usr/local/cuda-11.0

export LD_LIBRARY_PATH=${CUDA_HOME}/lib64

export PATH=CUDAHOME/bin:{CUDA_HOME}/bin:{PATH}

然后使其收效:

source ~/.bashrc

  1. 能够运用指令nvcc -V查看装置的版别信息:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

也能够编译一个程序测验装置是否成功,履行以下几条指令:

cd ~/Softwares/cuda/NVIDIA_CUDA-11.0_Samples/1_Utilities/deviceQuery

make

./deviceQuery

正常的话会有相应输出,打印显卡的信息。

3.3 装置CuDNN

进入到CUDNN的下载官网:cuDNN Download | NVIDIA Developer,然点击Download开端挑选下载版别,当然在下载之前还有登录,挑选版别界面如下:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

咱们挑选和之前cuda版别对应的cudnn版别:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

下载之后是一个压缩包,对它进行解压,指令如下:

tar -xzvf cudnn-11.0-linux-x64-v8.0.5.39.tgz

运用以下两条指令仿制这些文件到CUDA目录下:

sudo cp cuda/lib64/* /usr/local/cuda-11.0/lib64/

sudo cp cuda/include/* /usr/local/cuda-11.0/include/

复制完结之后,能够运用以下指令查看CUDNN的版别信息:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

能够看到版别信息如下,为8.0.5

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

3.4 装置Conda环境

不同的练习结构和版别或许会需求不同的python版别相对应,并且有的包比方numpy也对版别有要求,所以比较优雅的办法是给每个装备树立一个虚拟的python环境,在需求的时分能够随时切换,而不需求的时分也能删去不浪费磁盘资源,那在这方面conda是做得最好的。

下面介绍怎样装置conda:

  1. 在Anaconda官网下载Linux装置包:Anaconda | Individual Edition

  2. 运转下面的指令装置:

    chmod +x Anaconda3-2020.11-Linux-x86_64.sh

    ./Anaconda3-2020.11-Linux-x86_64.sh

一路按ENTER承认,然后依据提示输入yes,这儿我为了目录整齐不装置在默许途径,设置为下面的途径:/home/pengzhihui/Softwares/anaconda

然后会问询你是否要初始化conda,输入yes承认,重开终端窗口之后,就能够看到conda环境可用了(base代表默许环境):

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

conda的运用办法网上搜一下有许多,这儿就不赘述了。

3.5 装置Nvidia-Docker

Docker也是虚拟化环境的神器,前面说的conda虽然能够提供python的虚拟环境并便利地切换,可是有的时分咱们的开发环境并不只是用到python,比方有的native库需求对应gcc版别的编译环境,或许进行交叉编译时哟啊装置许多工具链等等。假如这些操作都在服务器本地上进行,那时间久了就会让服务器的文件体系十分凌乱,并且还会遇到各种软件版别抵触问题。

Docker就能够很好地解决这些问题,它其实能够理解为便是一个十分轻量化的虚拟机,咱们能够在宿主服务器上新建许多个这种被称为容器的虚拟机,然后在里边装备咱们的开发环境,且这些装备好的环境是能够打包成镜像的,便利随时做共享和重用;不需求的时分,咱们直接删去容器就好了,其资源是和咱们的服务器宿主机彻底阻隔的。

Docker的详细运用能够自己查找一下许多教程,这儿首要介绍怎样把GPU露出给Docker的容器(因为大家都知道像是VMware这种虚拟机里边都是无法同享宿主机的GPU的),是经过nvidia-docker完成的。

以前为了装备nvidia-docker,需求装置完docker之后再装置单独的nvidia docker2,而现在只需求装置nvidia container toolkit即可,愈加便利了。

  1. docker装置 官网上有详细的介绍:Install Docker Engine on Ubuntudocs.docker.com 或许运转下面的指令装置:

    sudo apt-get update

    sudo apt-get install docker.io

    systemctl start docker

    systemctl enable docker

能够运转这条指令查看是否装置成功:

docker version

  1. 装置NVIDIA Container Toolkit

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

官网装置步骤:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (github.com) 或许直接运转下面的指令:

##首要要确保现已装置了nvidia driver

2. 增加源

distribution=$(. /etc/os-release;echo IDIDVERSION_ID)

curl -s -L nvidia.github.io/nvidia-dock… | sudo apt-key add –

curl -s -L nvidia.github.io/nvidia-dock… | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

2. 装置并重启

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

sudo systemctl restart docker

装置完结后能够新建一个容器测验一下:

sudo docker run -it –name test_nvidia_docker –gpus all nvidia/cuda:11.1-base

其间最终的参数nvidia/cuda:11.1-base 是Nvidia官方的镜像,需求依据作业站主机中实践装置的cuda版别进行修正,版别能够用nvcc -V查看。

进入容器之后能够跑一下nvidia-smi指令看看:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

现在能够在docker里边正常运用GPU啦~

3.6 测验

这儿经过一个简略的python脚本测验一下GPU练习是否一切正常,跑一个DL里边的Hello World程序,经过两种办法测验:本地conda和docker虚拟机。

今后的开发进程中一般仍是运用Docker的方法来进行更为优雅。

1. 本地Conda环境方法:

先用conda新建一个python3.8+pytorch1.7+cuda11.0的虚拟环境:

conda create –name python_38-pytorch_1.7.0 python=3.8

创立完结后进入环境:

conda activate python_38-pytorch_1.7.0

查看一下是否切换到所需环境了:

which pip

假如看到运用的确实是咱们设置的环境目录中的pip的话阐明就ok。

接下来在环境中装置pytorch,能够参阅官网的装置指令:Start Locally | PyTorch

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

输入以下指令进行装置:

pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio===0.7.0 -f download.pytorch.org/whl/torch_s…

环境装备就完结了,下面新建一个简略的测验脚本验证功用,新建mnist_train.py,内容如下:

import torch

import torch.nn as nn

import torch.nn.functional as F

import torch.optim as optim

import torch.backends.cudnn as cudnn

from torchvision import datasets, transforms

class Net(nn.Module):

def init(self):

super(Net, self).init()

self.conv1 = nn.Conv2d(1, 10, kernel_size=5)

self.conv2 = nn.Conv2d(10, 20, kernel_size=5)

self.conv2_drop = nn.Dropout2d()

self.fc1 = nn.Linear(320, 50)

self.fc2 = nn.Linear(50, 10)

def forward(self, x):

x = F.relu(F.max_pool2d(self.conv1(x), 2))

x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))

x = x.view(-1, 320)

x = F.relu(self.fc1(x))

x = F.dropout(x, training=self.training)

x = self.fc2(x)

return F.log_softmax(x, dim=1)

def train(model, device, train_loader, optimizer, epoch):

model.train()

for batch_idx, (data, target) in enumerate(train_loader):

data, target = data.to(device), target.to(device)

optimizer.zero_grad()

output = model(data)

loss = F.nll_loss(output, target)

loss.backward()

optimizer.step()

if batch_idx % 10 == 0:

print(‘Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}’.format(

epoch, batch_idx * len(data), len(train_loader.dataset),

  1. * batch_idx / len(train_loader), loss.item()))

def main():

cudnn.benchmark = True

torch.manual_seed(1)

device = torch.device(“cuda”) if torch.cuda.is_available() else torch.device(“cpu”)

print(“Using device: {}”.format(device))

kwargs = {‘num_workers’: 1, ‘pin_memory’: True}

train_loader = torch.utils.data.DataLoader(

datasets.MNIST(‘./data’, train=True, download=True,

transform=transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.1307,), (0.3081,))

])),

batch_size=64, shuffle=True, **kwargs)

model = Net().to(device)

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

for epoch in range(1, 11):

train(model, device, train_loader, optimizer, epoch)

if name == ‘main‘:

main()

运转脚本,正常的话就能够看到练习输出了:

天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

2. Docker环境方法:

首要仍是新建一个Docker镜像,运转下面的指令:

sudo docker run -it –name train_mnist \

-v /etc/timezone:/etc/timezone \

-v /etc/localtime:/etc/localtime \

-v /home/pengzhihui/WorkSpace/_share:/home/workspace/_share \

–gpus all nvidia/cuda:11.1-base

就进入到了带gpu的ubuntu20.04容器中,作用能够参阅文章开头的视频。依照前面的装备办法同样装备好pytorch和其他软件包,然后运转同样的脚本,也能够得到上述输出,阐明gpu在docker中正常作业。

4. 作业站维护篇

4.1 作业站体系备份复原

  1. 备份

因为Linux自身万物皆文件的规划理念,加上root用户对几乎悉数的体系文件都有拜访和更改的权限,因而Linux体系的备份和复原其实十分简略,咱们直接打包整个根文件体系就能够了。

咱们能够运用tar指令来打包并压缩文件体系,不过这儿在打包的进程中需求扫除一些不需求文件,或许与新体系文件抵触的文件,包含/tmp/proc/lost+found 等目录。

找一个你想保存备份文件的目录,运转下面的指令:

tar -cvpzf ubuntu_backup@date +%Y-%m+%d.tar.gz –exclude=/proc –exclude=/tmp –exclude=/boot –exclude=/lost+found –exclude=/media –exclude=/mnt –exclude=/run /

咱们会得到一个名为backup.tgz的压缩文件,这个文件包含咱们需求备份的体系的悉数内容。

2. 复原

假如体系没有出问题能够正常发动的话,那直接在刚刚的压缩包找找到想复原的文件替换就好了。而假如体系无法发动了,或许说想换一块硬盘克隆相同的体系,那么能够按一下步骤操作:

  • 重装洁净的Ubuntu体系。跟上面介绍的相同,运用U盘给方针磁盘重装一个洁净的体系,这一步是为了省去自己分配存储空间和挂载的费事,假如你会自己装备的话那也能够不做这一步。

  • 再次运用U盘进入体系,这次挑选try ubuntu without installing,然后能够看到挂载好的刚刚装置了洁净体系的另一个盘,咱们在这儿对盘里的根文件体系进行一些文件的提取:

sudo su
# 在tryUbuntu根目录下有media文件夹,里边是U盘文件夹和新装置的体系文件夹,在在里分别用(U盘)和(UBUNTU)表明
cd /media/(U盘)
mount -o remount rw ./
 ​
# 将新体系根目录下/boot/grub/grub.cfg文件备份到U盘中
sudo cp /media/(Ubuntu)/boot/grub/grub.cfg ./    
 ​
# 将新体系根目录下/etc/fstab文件备份到U盘中,fstab是与体系开机挂载有关的文件,grub.cfg是与开机引导有关的文件,所以这一步至关重要
sudo cp /media/(UBUNTU)/etc/fstab ./
 ​
# 这一步删去新装ubuntu悉数的体系文件,有用的fstab及grub.cfg现已备份
cd /media/(UBUNTU)
sudo rm -rf ./*
 ​
# 将U盘中backup.tgz仿制到该目录下并解压缩
cp /media/(U盘)/backup.tgz ./
sudo tar xvpfz backup.tgz ./
 ​
# 创立打包体系时扫除的文件
sudo mkdir proc lost+found mnt sys media

这一步完结后,在用咱们在新体系中备份的fatabgrub.cfg 文件去替换压缩包中解压出来的同名文件,sudo reboot重启后就发现体系现已恢复到备份时的状况,包含各种结构,环境,体系设置~

【项目引荐】

面向小白的顶会论文核心代码库:github.com/xmu-xiaoma6…

面向小白的YOLO方针检测库:github.com/iscyy/yoloa…

面向小白的顶刊顶会的论文解析:github.com/xmu-xiaoma6…

“点个在看,月薪十万!” “学会点赞,身价千万!”

【技术沟通】

已树立深度学习大众号——FightingCV,重视于最新论文解读、基础知识稳固、学术科研沟通,欢迎大家重视!!!

请重视FightingCV大众号,并后台回复ECCV2022即可获得ECCV中稿论文汇总列表。

引荐参加FightingCV沟通群,每日会发送论文解析、算法和代码的干货共享,进行学术沟通,加群请增加小助手wx:FightngCV666,补白:地区-学校(公司)-称号

本文由mdnice多渠道发布