天才少年稚晖君 | 【保姆级教程】集体深度学习工作站配置指南
起源: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# 新建文件的权限为 664create mask = 0664# 新建目录的权限为 775directory 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多平台公布