共计 15549 个字符,预计需要花费 39 分钟才能阅读完成。
天才少年稚晖君 |【保姆级教程】集体深度学习工作站配置指南
起源:https://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
,感兴趣的能够去仓库看看:
https://github.com/peng-zhihui/PocketLCDgithub.com/peng-zhihui/PocketLCD
2. 零碎篇
零碎抉择 DL 开发外面最罕用的 Ubuntu,最新的稳固版本是 20.04,装置过程须要筹备一个 U 盘作为零碎启动盘。
2.1 装置 Ubuntu 20.04 零碎
- 在官网下载 Ubuntu 镜像:Ubuntu 20.04.1 LTS (Focal Fossa)”),抉择 Desktop Image 版本,失去.iso 的镜像文件。
- Windows 下应用 UltraISO 工具关上.iso 镜像文件,并将其写入到一个 U 盘,失去零碎启动盘:
- 将 U 盘插到服务器上,开机按
del 键
(具体什么键跟主板型号无关)抉择启动项进入长期的 Ubuntu 零碎,在图形界面中抉择Install Ubuntu,所有配置都能够应用默认的,改一下用户名和明码即可。这里倡议应用英文作为默认语言,省得给本人日后开发找麻烦哈。
装置过程中会联网下载一些软件包更新,能够间接点 skip 掉,在装置好零碎之后再手动更新也是一样的。
-
进入零碎后设置一下 root 账户明码:
sudo passwd root
-
同时为了防止每次 sudo 都要输出明码,这里配置一下
visudo
:sudo visudo
在文件最初加上一句(改为本人的用户名):
pengzhihui ALL=(ALL) NOPASSWD: ALL
2.2 配置国内镜像软件源
为了晋升后续装置软件时的幸福感,第一步当然先要替换一下软件源。
-
备份原来的源:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
-
将源的内容设置为阿里云镜像:
sudo vim /etc/apt/sources.list
内容改为:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
-
更新软件列表:
sudo apt update
sudo apt upgrade
也能够去网上搜其余镜像,在我这边经测试阿里云是最快的。另外也能够在图形桌面环境下关上 Software & Updates
软件,在外面也有网速测试并抉择最佳源的性能。
2.3 装置 Python 和 pip
-
Ubuntu 零碎默认自带 python,有版本需要的话也能够本人装置一下(不装置也行因为前面会装置 conda 环境):
sudo apt install python3
sudo apt install python3-pip
-
不论是不是本人装置的 python,替换 python 的 pip 源倡议是肯定操作一下的,pip 装置速度会快很多:
cd \~
mkdir .pip
间接新建并编辑 pip.conf:
sudo vim \~/.pip/pip.conf
改为以下内容(这里用的清华源,也能够试一下阿里、豆瓣等源):
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
- 更改默认 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,咱们手动装置一下。
-
装置 ssh:
sudo apt install ssh
会主动装置好很多依赖包并启动服务,实现之后用 XShell 等软件就能够 SSH 登录服务器了。
- 装置 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 治理界面。
留神,可能须要去云服务器控制台配置平安组规定 凋谢以上波及到的端口,否则无法访问。
本地的深度学习服务器端:
- 下载相应版本的 frpc 软件包(跟刚刚一样的):Releases · fatedier/frp (github.com)”),这里选 amd64 的,下好之后解压到一个长期文件夹。
-
批改 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
就能够了。
当然你也能够批改脚本增加更多映射 \~
- 增加开机主动启动的脚本,新建一个文件内容如下:
文件名/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 服务来实现这个成果:
-
装置
samba
和samba-common-bin
sudo apt-get install samba samba-common-bin
-
配置 /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
- 增加登陆账户并创立明码
必须是 linux 已存在的用户:
sudo smbpasswd -a pi
而后重启服务即可:
sudo /etc/init.d/samba-ad-dc restart
接下来能够在 Windows 的网络中发现设施了:
然而可能会呈现无奈点开的状况,这里须要在 Windows 的凭据管理器中增加账户信息(开始菜单里搜寻凭据管理器即可关上),点击增加 Windows 凭据,输出你的服务器名称和账户明码:
接下来就能够点进去看到服务器上的文件了。为了更加不便地进行文件交互,咱们增加对应的磁盘到 Windows 资源管理器的此电脑中:
抉择刚刚服务器的网络门路即可增加:
3. DL 开发环境配置篇
配置这台服务器的次要作用就是做深度学习训练,所以 GPU 相干的驱动和环境时必定要安顿好的,网上材料很多很杂,这里梳理出了最便捷牢靠的装置办法供大家参考 \~
3.1 装置 Nvidia 显卡驱动
最简略的形式是通过零碎的软件与更新来装置:
- 进入零碎的图形桌面,关上
Software & Updates
软件,能够看到标签栏有一个Additional Drivers
:
抉择第一个装置 Nvidia 官网驱动(第二个是开源驱动)即可,依据网络状况稍等大略十分钟,装置完重启服务器。
-
重启完之后更新一下软件:
sudo apt update
sudo apt upgrade
这里会连带 Nvidia 的驱动一起降级一遍,更新到最新的驱动;更新完可能会呈现 nvidia-smi 命令报错,再重启一下就解决了。
3.2 装置 CUDA
如果之前装置了旧版本的 cuda 和 cudnn 的话,须要先卸载后再装置:
sudo apt-get remove –purge nvidia*
而后 依照后面的办法重新安装显卡驱动,装置好了之后开始装置 CUDA:
- 去官网下载 cuda 安装包:CUDA Toolkit 11.0 Download | NVIDIA Developer,相干选项如下(依据理论状况抉择):
-
运行上面的命令进行装置:
chmod +x cuda\_11.0.2\_450.51.05\_linux.run
sudo sh ./cuda\_11.0.2\_450.51.05\_linux.run
可能会报一个正告:
后面曾经卸载过旧版本了间接 Continue 就好。而后依据提醒抉择装置选项,留神不要勾选第一个装置显卡驱动的,因为之前曾经装置过了。装置实现后提醒
-
依据上图提醒须要配置环境变量:
nano \~/.bashrc
再文件最初退出以下语句:
export CUDA\_HOME=/usr/local/cuda-11.0
export LD\_LIBRARY\_PATH=${CUDA\_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
而后使其失效:
source \~/.bashrc
- 能够应用命令
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:
- 在 Anaconda 官网下载 Linux 安装包:Anaconda | Individual Edition
-
运行上面的命令装置:
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 即可,更加不便了。
-
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
- 装置 NVIDIA Container Toolkit
官网装置步骤:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (github.com)”) 或者间接运行上面的命令:
\## 首先要确保曾经装置了 nvidia driver
2. 增加源
distribution=$(. /etc/os-release;echo $ID$VERSION\_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add –
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | 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 https://download.pytorch.org/whl/torch\_stable.html
环境配置就实现了,上面新建一个简略的测试脚本验证性能,新建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),
- * 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 工作站零碎备份还原
- 备份
因为 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
这一步实现后,在用咱们在新零碎中备份的 fatab
及grub.cfg
文件去替换压缩包中解压进去的同名文件,sudo reboot
重启后就发现零碎曾经复原到备份时的状态,包含各种框架,环境,零碎设置 \~
【我的项目举荐】
面向小白的顶会论文外围代码库:https://github.com/xmu-xiaoma666/External-Attention-pytorch
面向小白的 YOLO 指标检测库:https://github.com/iscyy/yoloair
面向小白的顶刊顶会的论文解析:https://github.com/xmu-xiaoma666/FightingCV-Paper-Reading
“点个在看,月薪十万!”
“学会点赞,身价千万!”
【技术交换】
已建设深度学习公众号——FightingCV,关注于最新论文解读、基础知识坚固、学术科研交换,欢送大家关注!!!
请关注 FightingCV 公众号,并后盾回复 ECCV2022 即可取得 ECCV 中稿论文汇总列表。
举荐退出 FightingCV交换群 ,每日会发送论文解析、算法和代码的干货分享,进行学术交流,加群请增加小助手 wx:FightngCV666,备注: 地区 - 学校(公司)- 名称
本文由 mdnice 多平台公布