侵权投诉

个人深度学习工作站配置详细操作流程

深度学习自然语言处理 ? 2021-01-03 09:30 ? 次阅读

前言

工作原因一直想配置一台自己的深度学习工作站服务器,之前自己看完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

2. 系统篇

系统选择DL开发里面最常用的Ubuntu,最新的稳定版本是20.04,安装过程需要准备一个U盘作为系统启动盘。

2.1 安装Ubuntu 20.04系统

  1. 在官网下载Ubuntu镜像:Ubuntu 20.04.1 LTS (Focal Fossa)(http://releases.ubuntu.com/20.04/),选择Desktop Image版本,得到.iso的镜像文件。
  2. Windows下使用UltraISO工具打开.iso镜像文件,并将其写入到一个U盘,得到系统启动盘:
e34c8734-4690-11eb-8b86-12bb97331649.jpg
  1. 将U盘插到服务器上,开机按del键(具体什么键跟主板型号有关)选择启动项进入临时的Ubuntu系统,在图形界面中选择Install Ubuntu,所有配置都可以使用默认的,改一下用户名和密码即可。这里建议使用英文作为默认语言,省得给自己日后开发找麻烦哈。

安装过程中会联网下载一些软件包更新,可以直接点skip掉,在安装好系统之后再手动更新也是一样的。

  1. 进入系统后设置一下root账户密码:
sudo passwd root

2.2 配置国内镜像软件源

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

  1. 备份原来的源:
cp /etc/apt/sources.list /etc/apt/sources.list.bak

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

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

3. 更新软件列表:

sudo apt update
sudo apt upgrade

也可以去网上搜其他镜像,在我这边经测试阿里云是最快的。另外也可以在图形桌面环境下打开Software & Updates软件,在里面也有网速测试并选择最佳源的功能。

2.3 安装Pythonpip

  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 = https://pypi.tuna.tsinghua.edu.cn/simple/ 
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn

3. 更改默认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登录服务器了。

2. 安装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(现在能申请到的概率也已经不大了,而且即使申请到也不是所有端口都可以使用的),或者我们自己动手做一些操作来达到同样的目的。

有几种方法:

  • 可以直接用类似花生壳(https://hsk.oray.com/)这样的DDNS服务平台做转发实现内网穿透,优点是比较简单稳定,缺点是需要持续付费,而且速度和延迟效果一般,而且每加一个端口都要额外付费。
  • 也可以像我一样使用frp之类的软件做反向代理来实现内网穿透,这个方案也是需要你有一台带公网IP的云服务器的,优点就是完全可控,自己想配置多少个端口的穿透都可以,速度跟你的云服务器带宽有关。

为什么需要多个端口?是因为不同应用占用的端口不同,比如我们的SSH走的是22号端口,而远程桌面的rdp走的是3389号端口,如果需要自建Web服务的话则是走80/443端口、想把工作站作为上外网的代理服务器的话会需要1080端口等等...所以用上面第二个方案显然会方便很多,而且云服务器也不贵,我在腾讯云上购买一年只要200左右。

下面介绍如何安装配置frp:

frp分为frps(server)和frpc(client)两个包 ,其中前者安装到我们的云服务器上,后者安装在需要被外网访问到的各个设备上,这里就是指我们的深度学习工作站。

云服务器端:

https://github.com/fatedier/frp/releases下载适合你服务器系统的frp软件,我这里是用的是腾讯云64位Ubuntu16.04所以选择frp_0.34.3_linux_amd64.tar.gz(https://github.com/fatedier/frp/releases/download/v0.34.3/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)(https://github.com/fatedier/frp/releases),这里选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就可以了。

当然你也可以修改脚本添加更多映射~

3. 添加开机自动启动的脚本,新建一个文件内容如下:

文件名/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
  1. 配置/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

3. 添加登陆账户并创建密码

必须是 linux 已存在的用户:

sudo smbpasswd -a pi

然后重启服务即可:

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

接下来可以在Windows的网络中发现设备了:

e42192b2-4690-11eb-8b86-12bb97331649.jpg

但是可能会出现无法点开的情况,这里需要在Windows的凭据管理器中添加账户信息(开始菜单里搜索凭据管理器即可打开),点击添加Windows凭据,输入你的服务器名称和账户密码:

e465ea20-4690-11eb-8b86-12bb97331649.jpg

接下来就可以点进去看到服务器上的文件了。为了更加方便地进行文件交互,我们添加对应的磁盘到Windows资源管理器的此电脑中:

e4b122c4-4690-11eb-8b86-12bb97331649.jpg

选择刚刚服务器的网络路径即可添加:

e50f9eda-4690-11eb-8b86-12bb97331649.jpg

3. DL开发环境配置篇

配置这台服务器的主要作用就是做深度学习训练,所以GPU相关的驱动和环境时肯定要安排好的,网上资料很多很杂,这里梳理出了最便捷可靠的安装方法供大家参考~

3.1 安装Nvidia显卡驱动

最简单的方式是通过系统的软件与更新来安装:

  1. 进入系统的图形桌面,打开Software & Updates软件,可以看到标签栏有一个Additional Drivers
e58fe2e8-4690-11eb-8b86-12bb97331649.jpg

选择第一个安装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(https://developer.nvidia.com/cuda-11.0-download-archive),相关选项如下(根据实际情况选择):
e5b85214-4690-11eb-8b86-12bb97331649.jpg
  1. 运行下面的命令进行安装:
chmod +x cuda_11.0.2_450.51.05_linux.run
sudo sh ./cuda_11.0.2_450.51.05_linux.run

可能会报一个警告:

e8f6f61a-4690-11eb-8b86-12bb97331649.jpg

前面已经卸载过旧版本了直接Continue就好。然后根据提示选择安装选项,注意不要勾选第一个安装显卡驱动的,因为之前已经安装过了。安装完成后提示

e9255014-4690-11eb-8b86-12bb97331649.jpg

3. 根据上图提示需要配置环境变量:

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

4. 可以使用命令nvcc -V查看安装的版本信息:

e95171bc-4690-11eb-8b86-12bb97331649.jpg

也可以编译一个程序测试安装是否成功,执行以下几条命令:

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

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

3.3 安装CuDNN

进入到CUDNN的下载官网:cuDNN Download | NVIDIA Developer(https://developer.nvidia.com/rdp/cudnn-download),然点击Download开始选择下载版本,当然在下载之前还有登录,选择版本界面如下:

e984d8f4-4690-11eb-8b86-12bb97331649.jpg

我们选择和之前cuda版本对应的cudnn版本:

e9b0083a-4690-11eb-8b86-12bb97331649.jpg

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

 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

e9ddd152-4690-11eb-8b86-12bb97331649.jpg

3.4 安装Conda环境

不同的训练框架和版本可能会需要不同的python版本相对应,而且有的包比如numpy也对版本有要求,所以比较优雅的方法是给每个配置建立一个虚拟的python环境,在需要的时候可以随时切换,而不需要的时候也能删除不浪费磁盘资源,那在这方面conda是做得最好的。

下面介绍怎么安装conda:

  1. 在Anaconda官网下载Linux安装包:Anaconda | Individual Edition (https://www.anaconda.com/products/individual)
  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代表默认环境):

ea009fb6-4690-11eb-8b86-12bb97331649.jpg

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(https://docs.docker.com/engine/install/ubuntu/) 或者运行下面的命令安装:
sudo apt-get update
sudo apt-get install docker.io
systemctl start docker
systemctl enable docker

可以运行这条命令检查是否安装成功:

docker version

2. 安装NVIDIA Container Toolkit

ea3de9b6-4690-11eb-8b86-12bb97331649.png

官网安装步骤:NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs (github.com) (https://github.com/NVIDIA/nvidia-docker) 或者直接运行下面的命令:

 ##首先要确保已经安装了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命令看看:

eaa1e678-4690-11eb-8b86-12bb97331649.jpg

现在可以在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(https://pytorch.org/get-started/locally/)

eadb5cc8-4690-11eb-8b86-12bb97331649.jpg

输入以下命令进行安装:

 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}%)]	Loss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                       100. * 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()

运行脚本,正常的话就可以看到训练输出了:

eb1a19d6-4690-11eb-8b86-12bb97331649.jpg

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重启后就发现系统已经恢复到备份时的状态,包括各种框架,环境,系统设置~

以上,后面有更新的话还会继续补充,希望对大家有帮助~

责任编辑:xj

原文标题:保姆级教程:个人深度学习工作站配置指南

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。


原文标题:保姆级教程:个人深度学习工作站配置指南

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

新西兰服务器机房是怎么样的
新西兰是大洋洲经济发达的国家之一,很多外贸客户经常选择新西兰服务器来搭建自己的外贸网络平台。今天,恒....
的头像 深圳市恒讯科技有限公司 发表于 10-15 17:38 ? 81次 阅读
电子行业B2B数字化升级, 腾采通先行
以往,在数以亿计的电子元器件中快速找到想要的型号,如同大海捞针一般。直到一款B2B交易型SaaS(S....
发表于 10-15 15:49 ? 12次 阅读
电子行业B2B数字化升级, 腾采通先行
机智云物联网推出机智云工业互联网整体解决方案
由博闻创意主办的2021深圳国际电子展暨嵌入式系统展(ELEXCON)将在深圳国际会展中心(宝安新馆....
的头像 机智云物联网 发表于 10-14 17:54 ? 533次 阅读
巴基斯坦服务器机房的介绍,它的优势有哪些
巴基斯坦是中国的全天候战略伙伴。通俗地说,全天候战略伙伴意味着无论国际形势如何变化,中巴友谊始终不变....
的头像 深圳市恒讯科技有限公司 发表于 10-14 17:21 ? 171次 阅读
解析JD-BQX6 六要素传感器应用范围
六要素传感器应用范围,传感器揉合了超声波制造的专业技术,适用于陆地和海洋环境。测量精度较高,没有机械....
发表于 10-14 16:13 ? 14次 阅读
简述六要素环境传感器工作原理
六要素环境传感器工作原理。内置各种气象传感器,无任何移动部件的一个结构紧凑的新型仪器。其具有精度高,....
发表于 10-14 16:11 ? 21次 阅读
大型机、小型机与x86服务器有哪些不同之处
IBM大型机的整体指令集有何功能? 大型机、小型机与x86服务器有哪些不同之处? ...
发表于 10-14 09:09 ? 0次 阅读
关于哈萨克斯坦服务器机房的简单介绍
在中亚五国中,速度更快的是哈萨克斯坦服务器。4xge光纤直连中国网阿斯塔纳骨干节点。一般从国内pin....
的头像 深圳市恒讯科技有限公司 发表于 10-13 16:59 ? 128次 阅读
服务器产生大量的TIME_WAIT究竟是因为什么
写在开头,大概 4 年前,听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题,但是....
的头像 马哥Linux运维 发表于 10-13 16:47 ? 275次 阅读
服务器产生大量的TIME_WAIT究竟是因为什么
eBPF技术应用云原生网络实践系列之基于socket的service
背景介绍 Kubernetes 中的网络功能,主要包括 POD 网络,service 网络和网络策略....
的头像 Linux阅码场 发表于 10-13 10:54 ? 202次 阅读
eBPF技术应用云原生网络实践系列之基于socket的service
简述MPSoC VCU调试方法和调试流程
概要介绍 MPSoC VCU在很多产品中得到了应用。在不同产品的调试过程中,有一些共同的办法。 首先....
的头像 FPGA开发圈 发表于 10-13 10:43 ? 116次 阅读
简述MPSoC VCU调试方法和调试流程
大联大世平集团推出基于Intel与Orbit产品的车牌识别解决方案
大联大控股宣布,其旗下世平推出基于英特尔(Intel)Movidius与律碁(Orbit)AiCam....
发表于 10-13 09:55 ? 855次 阅读
大联大世平集团推出基于Intel与Orbit产品的车牌识别解决方案
兰和K28指纹密码锁搭配智能门锁管理系统的优势介绍
型号:K28? 全新一键开启设计,半导体指纹识别隐形在手柄内,开门更方便,五种开锁方式任你选择,管理....
发表于 10-13 09:46 ? 29次 阅读
Deep Edge AI使得算法的规模正不断缩小
机器学习和深度学习网络有可能通过提供更强大的全新方法来分析现场数据,从而极大地提高产品价值。Deep....
的头像 STM32单片机 发表于 10-12 17:36 ? 145次 阅读
国外服务器中最常用的6种“可视化管理工具”
信息时代下,对于数据处理需求不断增加,信息种类中的视觉信息也越来越重要,视觉信息比文本信息更利于传播....
的头像 深圳市恒讯科技有限公司 发表于 10-12 17:07 ? 270次 阅读
HBM3万事俱备 只欠标准定稿
电子发烧友网报道(文/周凯扬)从PC时代走向移动与AI时代,芯片的架构也从以CPU为中心走向了以数据....
的头像 电子发烧友网 发表于 10-12 14:54 ? 207次 阅读
致远电子CAN智慧云如何赋能ECU远程刷写
汽车步入智能网联时代,汽车总线面临技术升级,ECU刷写仍然是车辆性能优化的关键测试。本文介绍ZLG致....
的头像 ZLG致远电子 发表于 10-12 09:31 ? 221次 阅读
致远电子CAN智慧云如何赋能ECU远程刷写
探究Redis 性能测试与监控
很多人在安装部署好Redis后,就没有对Rredis的配置和部署等有效性和高可用性进行性能测试,最终....
的头像 马哥Linux运维 发表于 10-12 09:19 ? 186次 阅读
探究Redis 性能测试与监控
如何建立一个动态的IP黑名单
Nginx 通过 Lua + Redis 实现动态封禁 IPJava后端 3天前为了封禁某些爬虫或者....
的头像 Android编程精选 发表于 10-12 09:15 ? 188次 阅读
如何建立一个动态的IP黑名单
怎么用树莓派自己制作一个服务器
? 链接丨segmentfault.com/a/1190000021143144 No.1 树莓派是....
的头像 Android编程精选 发表于 10-12 09:12 ? 217次 阅读
怎么用树莓派自己制作一个服务器
NVIDIA和VMware将为企业提供大规模AI服务
NVIDIA AI Enterprise和VMware vSphere with Tanzu简化企业....
的头像 NVIDIA英伟达企业解决方案 发表于 10-11 16:57 ? 225次 阅读
嵌入式与普通计算机的区别
嵌入式与普通计算机的区别
的头像 lhl545545 发表于 10-09 16:36 ? 632次 阅读
TI携手台达为数据中心设计高效、高功率服务器电源供应器
因此,德州仪器(TI)区域销售经理 Rui 认为,我国数据中心未来发展将突出表现在绿色化、智能化、大....
的头像 德州仪器 发表于 10-09 14:47 ? 278次 阅读
热虹吸散热技术解决GPU服务器散热问题
随着深度学习、仿真、BIM设计、AEC行业在各行各业应用的发展,在AI技术虚拟GPU技术的加持之下,....
发表于 10-09 14:11 ? 37次 阅读
联想集团终止科创板上市
联想集团公司在首个港股交易日股价收涨创下了半年以来的最新高,联想集团股价经历国庆七天保持上涨。据悉,....
的头像 lhl545545 发表于 10-09 10:55 ? 2206次 阅读
CAN转以太网服务器USR-CANET200说明书
USR-CANET200是一款CAN转以太网服务器,实现CAN、RS485与以太网间的互相转换功能;....
发表于 10-09 09:26 ? 36次 阅读
脸书一周内第二次宕机
据海外媒体的报道消息,Facebook公司就已经在一周之内出现第二次服务器故障问题向用户致歉,称公司....
的头像 lhl545545 发表于 10-09 09:24 ? 1520次 阅读
怎样去开发OPC Data Access 2.0服务器
OPC服务器的开发主要包括哪几部分? 怎样去开发OPC Data Access 2.0服务器? ...
发表于 10-09 08:03 ? 0次 阅读
USR-N510单串口服务器产品说明书
USR-N510是一款工业级单串口服务器,实现RS232/485/422转以太网双向透传功能,串口灵....
发表于 10-08 17:39 ? 17次 阅读
USR-N510单串口服务器规格书
USR-N510是一款工业级单串口服务器,实现RS232/485/422转以太网双向透传功能,串口灵....
发表于 10-08 17:37 ? 10次 阅读
USR-N540四串口服务器产品说明书
USR-N540是一款工业级四串口服务器,实现RS232/485/422转以太网双向透传功能;四路串....
发表于 10-08 17:35 ? 21次 阅读
FH8001路桥凝冰预警系统的简单介绍
迄今为止,我国高速公路里程已超过16万公里,居世界首位。由于我国3/4的国土处于降雪、冰冻覆盖区,在....
发表于 10-08 16:01 ? 30次 阅读
开源服务器Tomcat工作原理
Tomcat 是什么开源的 Java Web 应用服务器,实现了 Java EE(Java Plat....
的头像 马哥Linux运维 发表于 10-08 15:11 ? 184次 阅读
开源服务器Tomcat工作原理
机柜式温湿度传感器在数据中心机房的应用
随着信息技术的不断发展,计算机机房成了各大企业不可缺少的重要组成部分。但是在整体信息化建设以及建筑智....
发表于 10-08 14:30 ? 23次 阅读
北鲲云超算平台如何将云计算与高性能计算结合
近几年,随着“上云“概念的普及,而且云计算技术逐渐趋于成熟,许多有自建机房或者集群的高性能计算行业企....
发表于 10-08 10:36 ? 43次 阅读
联想与英特尔携手点亮数字经济加速度 打造高性能计算
? 提到大数据、算力,普通人都不陌生,现在谁手机里还没点AI计算能力了,但说起高性能计算HPC,听起....
的头像 脑极体 发表于 10-08 10:13 ? 684次 阅读
进入容器,即开即用:NVIDIA和VMware为企业提供大规模AI服务
戴尔科技EMC PowerEdge R7525服务器近期在MLPerf基准测试中使用三个NVIDIA....
发表于 10-08 10:10 ? 1018次 阅读
进入容器,即开即用:NVIDIA和VMware为企业提供大规模AI服务
微软在10月5正式推送 Windows 11
2021 年10 月5 日,北京——微软今日宣布开始推送 Windows 11,符合条件的 Wind....
的头像 微软科技 发表于 10-08 09:48 ? 510次 阅读
虹科方案可管理多个OPC UA服务器
OPC UA 技术解决工业现场数据通信标准不统一的问题,使得不同操作系统和不同制造商的设备之间可以进....
的头像 广州虹科电子科技有限公司 发表于 10-08 09:18 ? 173次 阅读
联想集团科创板上市申请已获受理,100亿元募资作何用途?
9月30日晚间,上交所官网显示,联想集团有限公司(以下简称"联想集团")科创板上市申请已获受理,公司....
发表于 09-30 18:20 ? 598次 阅读
联想集团科创板上市申请已获受理,100亿元募资作何用途?
Python的矩阵传播机制
一、Python的矩阵传播机制(Broadcasting) 我们知道在深度学习中经常要操作各种矩阵(....
的头像 Linux爱好者 发表于 09-30 16:53 ? 290次 阅读
海康威视率先推出基于深度学习的结构化服务器
海康威视2022全球校园招聘宣讲会走进华中科技大学。海康威视总裁胡扬忠先生与母校青年学子畅谈海康威视....
的头像 海康威视 发表于 09-30 15:36 ? 1096次 阅读
用于检测异常的胸部X光图像的深度学习系统
在医学成像中应用机器学习 (ML),为改善胸部 X 光 (CXR) 图像解读的可用性、延迟时间、准确....
的头像 TensorFlow 发表于 09-30 11:16 ? 371次 阅读
aigo国民好物 固态硬盘P3000和P7000如何选
互联网高度发达的今天,大众对于PC的需求也与日俱增,很多人在购买PC的时候为了避坑都会选择自己挑选硬....
的头像 全态科技 发表于 09-30 11:00 ? 250次 阅读
市场公认高性价比、性能强的2款SSD固态硬盘推荐
PC在日常生活中已经是一个不可替代的物品了,看剧,工作,办公等等都离不开它。很多人为了省钱和避坑都会....
的头像 全态科技 发表于 09-30 10:42 ? 854次 阅读
水库防汛泄洪抢险应急广播系统解决方案
水库防汛泄洪抢险应急广播系统,是围绕灾前预警预报、灾中应急处置和灾后重建等关键环节设计的无线应急广播....
发表于 09-30 09:38 ? 70次 阅读
物联数采网关在电力能效管理系统中的应用
系统背景:电力能效管理是企业节能降耗,减少运营成本,提高竞争力的关键措施,已成为全社会企业关注的焦点....
发表于 09-30 09:16 ? 54次 阅读
轻松统一管理多个OPC UA服务器
前言随着现代工业的快速发展,OPCUA协议逐渐应用于工业过程的数据采集。越来越多的工业现场设备支持O....
的头像 沈锐璇 发表于 09-29 18:10 ? 36次 阅读
轻松统一管理多个OPC UA服务器
贝壳/皮革大理石深度学习检测案例
通过系统使用人工智能技术,通过深度学习算法、数据训练不断优化,提高识别效果,结合工业相机,控制技术实....
发表于 09-29 18:05 ? 29次 阅读
借助深度学习算法实现5秒内克隆你的声音
大家应该都知道声音克隆技术,通俗的来说就是借助深度学习算法,可以完全模拟某个人的声音,而且由机器合成....
的头像 Android编程精选 发表于 09-29 11:45 ? 313次 阅读
Modbus协议是什么
Modbus协议是什么? MODBUS功能码有哪些? MODBUS协议有哪几种传输模式? ...
发表于 09-29 07:06 ? 0次 阅读
勤哲Excel服务器构建环境监测信息管理系统
众所周知,当下火热的信息化大数据平台建设,能够更加充分摸清地区环境质量和污染源底数,有效提高精准预测....
的头像 话说科技 发表于 09-28 14:17 ? 233次 阅读
勤哲Excel服务器构建环境监测信息管理系统
MathWorks发布MATLAB和Simulink版本 2021b
MathWorks 于今日发布 MATLAB 和 Simulink 产品系列版本 2021b。版本 ....
发表于 09-28 11:23 ? 1148次 阅读
MathWorks发布MATLAB和Simulink版本 2021b
如何通过C#结合SMTP来实现报警通知
如何进行报警的检测? 如何实现邮件的发送? 如何通过C#结合SMTP来实现报警通知? ...
发表于 09-28 06:58 ? 0次 阅读
模型量化会带来哪些好处?
量化算法具有什么特点? 模型量化会带来哪些好处? ...
发表于 09-28 06:32 ? 0次 阅读
ZN-2RXY模块式柔性自动环形生产线实验系统有哪些功能
ZN-2RXY模块式柔性自动环形生产线实验系统是由哪些部分组成的? ZN-2RXY模块式柔性自动环形生产线实验系统有哪些功能...
发表于 09-27 08:56 ? 0次 阅读
PLC客户端监控系统有哪些功能
PLC客户端监控系统的特点是什么? PLC客户端监控系统有哪些功能? ...
发表于 09-18 07:41 ? 0次 阅读
请问一下CHNet-S7200的功能有哪些
请问一下CHNet-S7200的功能有哪些?
发表于 09-18 06:58 ? 0次 阅读
迅为IMX6ULL开发板NFS服务器的使用
(1)我们将开发板开发板烧写 yocto 文件系统,有线网口通过网线连接到路由器,系统起来后首先使用“ifconfig”查看开发板 ip。如...
发表于 09-17 10:02 ? 202次 阅读
东芝服务器外置计数器选择
08项目调整202:外置计数器选择0:无外置计数器1:绕组控制器2:非标准3:保留204:自动清除[秒]0:无效1:15秒 2:30秒 3:45秒...
发表于 09-17 09:20 ? 0次 阅读
综合在线 日韩欧美 中文字幕_综合在线 日韩欧美 中文字幕精品视频 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>