<pre id="lq0nf"><label id="lq0nf"></label></pre>
<td id="lq0nf"><strike id="lq0nf"></strike></td>
  • <object id="lq0nf"><meter id="lq0nf"></meter></object>
    <object id="lq0nf"><nav id="lq0nf"><noframes id="lq0nf">
  • <pre id="lq0nf"><label id="lq0nf"></label></pre>
    1. 侵权投诉

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

      深度学习自然语言处理 ? 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,然后可以看到挂载好的刚刚安装了干净系统的另一个盘,我们在这里对盘里的根文件系统进行一些文件的提?。?/li>
      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,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

      收藏 人收藏
      分享:

      评论

      相关推荐

      快讯:淘宝回应服务器崩了 美媒:脸书计划下周更改公司名称

      淘宝回应服务器崩了 ? ? ? ?淘宝回应服务器崩了一下子吸引了很多的眼球,还没有到双11就崩了,这....
      发表于 10-21 18:12 ? 29次 阅读
      快讯:淘宝回应服务器崩了 美媒:脸书计划下周更改公司名称

      华为开发者大会2021年时间及地点

      2021年10月22日~24日,华为将在中国松山湖举行2021华为开发者大会,本次大会活动依旧精彩,....
      的头像 Les 发表于 10-21 16:43 ? 315次 阅读

      深度学习部分监督的实例分割环境

      实例分割的任务是将图像中的像素分组为单个事物的实例,并用类标签(可计数的对象,如人、动物、汽车等,并....
      的头像 TensorFlow 发表于 10-21 14:05 ? 118次 阅读

      嵌入式培训班有必要吗?

      对于很多想要从事嵌入式相关工作的人来说,自学还是参加嵌入式培训班一直都是个大难题,难度不亚于哈姆雷特....
      发表于 10-21 13:21 ? 2次 阅读
      嵌入式培训班有必要吗?

      嵌入式工程师“中年?;庇Χ圆呗陨?/a>

      嵌入式工程师”中年?;奈侍猓ㄕ馐歉銎毡橄窒螅?,当然,面向对象不只是程序猿。众所周知,“钱’是个好....
      发表于 10-20 20:21 ? 6次 阅读
      嵌入式工程师“中年?;庇Χ圆呗陨? />    </a>
</div><div class=

      深度学习在嵌入式设备上的应用

      下面来探讨一下深度学习在嵌入式设备上的应用,具体如下:1、深度学习的概念源于人工神经网络的研究,包含....
      发表于 10-20 17:51 ? 2次 阅读
      深度学习在嵌入式设备上的应用

      英国服务器机房的介绍,英国服务器机房的优势说明

      英国服务器作为欧洲服务器的代表,一直以优质的服务受到外贸用户的青睐。英国是一个老牌发达国家,网络设施....
      的头像 深圳市恒讯科技有限公司 发表于 10-20 17:04 ? 160次 阅读

      阿里云面向下一代云原生架构推出磐久自研服务器

      阿里云公司近日在2021年举行的云栖大会上正式发布了倚天、神龙4.0和灵杰等多款重磅产品,打造出中国....
      的头像 lhl545545 发表于 10-20 14:40 ? 156次 阅读

      NVIDIA和VMware宣布推出Workspace ONE XR Hub

      NVIDIA和VMware宣布推出Workspace ONE XR Hub,帮助企业将XR串流传输至....
      的头像 NVIDIA英伟达 发表于 10-20 10:00 ? 215次 阅读

      虹科时间敏感网络评估套件加速评估TSN网络功能

      时间敏感网络(TSN)允许合并OT和IT世界,并确保确定性以太网网络中所有设备的互操作性和标准化。这....
      的头像 广州虹科电子科技有限公司 发表于 10-20 09:21 ? 501次 阅读

      RedFish是怎样替换IPMI的

      IPMI是什么? RedFish标准有哪些优势?
      发表于 10-20 07:21 ? 0次 阅读

      太牛了!超强ARM服务器芯片诞生!阿里自研CPU“倚天710”出鞘!未来还有“屠龙”大招?

      10月19日,在2021云栖大会主论坛上,阿里云智能总裁、达摩院院长张建锋在演讲过程中正式向外界展示....
      的头像 Felix分析 发表于 10-20 07:08 ? 934次 阅读
      太牛了!超强ARM服务器芯片诞生!阿里自研CPU“倚天710”出鞘!未来还有“屠龙”大招?

      stm32服务器是如何工作的

      stm32服务器是如何工作的? stm32服务器的通信过程是怎样的? ...
      发表于 10-20 06:27 ? 0次 阅读

      嵌入式AI平台介绍

      CSDN下载链接:目录1 技术方案 11.1 可选方案 11.1.1 ARM 11.1.2 CPU+....
      发表于 10-19 18:33 ? 4次 阅读
      嵌入式AI平台介绍

      阿里平头哥玄铁CPU出货已超25亿颗

      近日,阿里云旗下平头哥开源玄铁RISC-V系列处理器出货已超25亿颗,帮助数据中心领域RISC-V软....
      的头像 lhl545545 发表于 10-19 17:16 ? 477次 阅读

      给大家全面介绍一下孟加拉服务器机房

      孟加拉服务器是一种流行的服务器,但随着经济贸易的发展,深受企业用户的青睐。因为孟加拉服务器使用的是国....
      的头像 深圳市恒讯科技有限公司 发表于 10-19 17:02 ? 88次 阅读

      VisionPro Deep Learning帮助软包锂电池实现外观检测自动化

      VisionPro Deep Learning基于大量图片建立了高精度的神经网络模型,大大缩短了同类....
      发表于 10-19 15:52 ? 544次 阅读
      VisionPro Deep Learning帮助软包锂电池实现外观检测自动化

      超融合数据中心网络简介

      现如今,数据中心正成为算力中心,为千行百业提供数字化底座,并基于海量数据挖掘其中的商业价值。同时,在....
      的头像 华为产品资料 发表于 10-19 15:17 ? 251次 阅读
      超融合数据中心网络简介

      阿里发布自研CPU芯片倚天710

       2021云栖大会现场阿里云旗下平头哥半导体重磅发布了自研通用服务器云端芯片倚天710,刷新了Arm....
      的头像 lhl545545 发表于 10-19 14:18 ? 934次 阅读

      阿里发布首款自研云原生服务器“磐久”

      10月19日上午,在2021杭州云栖大会上,阿里云正式推出面向云原生时代的“磐久”自研服务器系列,首....
      的头像 Felix分析 发表于 10-19 13:56 ? 279次 阅读
      阿里发布首款自研云原生服务器“磐久”

      雷诺汽车使用深度学习网络估计 NOx 排放量

      雷诺汽车构建并训练了一个长短期记忆 (LSTM) 网络,该网络预测 NOx 水平的准确率达到了 85....
      的头像 MATLAB 发表于 10-19 10:12 ? 199次 阅读

      Nmap是什么?有何主要作用

      什么是服务器端? Nmap是什么?有何主要作用? DES是什么? ...
      发表于 10-19 07:07 ? 0次 阅读

      巴西服务器机房的介绍,它的优势都有哪些

      巴西是南美洲面积最大、人口最多的国家。其人口和面积均居世界第五位,它也是南美洲的电信市场。网络很好,....
      的头像 深圳市恒讯科技有限公司 发表于 10-18 17:09 ? 210次 阅读

      4G工业DTU数传终端的性能特点

      4G工业DTU数据传输终端通过无线通信网络实现串口数据和IP数据的相互转换,具有组网速度快、扩展灵活....
      发表于 10-18 11:42 ? 39次 阅读

      新西兰服务器机房是怎么样的

      新西兰是大洋洲经济发达的国家之一,很多外贸客户经常选择新西兰服务器来搭建自己的外贸网络平台。今天,恒....
      的头像 深圳市恒讯科技有限公司 发表于 10-15 17:38 ? 142次 阅读

      电子行业B2B数字化升级, 腾采通先行

      以往,在数以亿计的电子元器件中快速找到想要的型号,如同大海捞针一般。直到一款B2B交易型SaaS(S....
      发表于 10-15 15:49 ? 1339次 阅读
      电子行业B2B数字化升级, 腾采通先行

      机智云物联网推出机智云工业互联网整体解决方案

      由博闻创意主办的2021深圳国际电子展暨嵌入式系统展(ELEXCON)将在深圳国际会展中心(宝安新馆....
      的头像 机智云物联网 发表于 10-14 17:54 ? 699次 阅读

      巴基斯坦服务器机房的介绍,它的优势有哪些

      巴基斯坦是中国的全天候战略伙伴。通俗地说,全天候战略伙伴意味着无论国际形势如何变化,中巴友谊始终不变....
      的头像 深圳市恒讯科技有限公司 发表于 10-14 17:21 ? 228次 阅读

      解析JD-BQX6 六要素传感器应用范围

      六要素传感器应用范围,传感器揉合了超声波制造的专业技术,适用于陆地和海洋环境。测量精度较高,没有机械....
      发表于 10-14 16:13 ? 20次 阅读

      简述六要素环境传感器工作原理

      六要素环境传感器工作原理。内置各种气象传感器,无任何移动部件的一个结构紧凑的新型仪器。其具有精度高,....
      发表于 10-14 16:11 ? 23次 阅读

      大型机、小型机与x86服务器有哪些不同之处

      IBM大型机的整体指令集有何功能? 大型机、小型机与x86服务器有哪些不同之处? ...
      发表于 10-14 09:09 ? 0次 阅读

      关于哈萨克斯坦服务器机房的简单介绍

      在中亚五国中,速度更快的是哈萨克斯坦服务器。4xge光纤直连中国网阿斯塔纳骨干节点。一般从国内pin....
      的头像 深圳市恒讯科技有限公司 发表于 10-13 16:59 ? 177次 阅读

      服务器产生大量的TIME_WAIT究竟是因为什么

      写在开头,大概 4 年前,听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题,但是....
      的头像 马哥Linux运维 发表于 10-13 16:47 ? 329次 阅读
      服务器产生大量的TIME_WAIT究竟是因为什么

      eBPF技术应用云原生网络实践系列之基于socket的service

      背景介绍 Kubernetes 中的网络功能,主要包括 POD 网络,service 网络和网络策略....
      的头像 Linux阅码场 发表于 10-13 10:54 ? 243次 阅读
      eBPF技术应用云原生网络实践系列之基于socket的service

      简述MPSoC VCU调试方法和调试流程

      概要介绍 MPSoC VCU在很多产品中得到了应用。在不同产品的调试过程中,有一些共同的办法。 首先....
      的头像 FPGA开发圈 发表于 10-13 10:43 ? 146次 阅读
      简述MPSoC VCU调试方法和调试流程

      大联大世平集团推出基于Intel与Orbit产品的车牌识别解决方案

      大联大控股宣布,其旗下世平推出基于英特尔(Intel)Movidius与律碁(Orbit)AiCam....
      发表于 10-13 09:55 ? 882次 阅读
      大联大世平集团推出基于Intel与Orbit产品的车牌识别解决方案

      兰和K28指纹密码锁搭配智能门锁管理系统的优势介绍

      型号:K28? 全新一键开启设计,半导体指纹识别隐形在手柄内,开门更方便,五种开锁方式任你选择,管理....
      发表于 10-13 09:46 ? 31次 阅读

      Deep Edge AI使得算法的规模正不断缩小

      机器学习和深度学习网络有可能通过提供更强大的全新方法来分析现场数据,从而极大地提高产品价值。Deep....
      的头像 STM32单片机 发表于 10-12 17:36 ? 211次 阅读

      国外服务器中最常用的6种“可视化管理工具”

      信息时代下,对于数据处理需求不断增加,信息种类中的视觉信息也越来越重要,视觉信息比文本信息更利于传播....
      的头像 深圳市恒讯科技有限公司 发表于 10-12 17:07 ? 329次 阅读

      HBM3万事俱备 只欠标准定稿

      电子发烧友网报道(文/周凯扬)从PC时代走向移动与AI时代,芯片的架构也从以CPU为中心走向了以数据....
      的头像 电子发烧友网 发表于 10-12 14:54 ? 266次 阅读

      致远电子CAN智慧云如何赋能ECU远程刷写

      汽车步入智能网联时代,汽车总线面临技术升级,ECU刷写仍然是车辆性能优化的关键测试。本文介绍ZLG致....
      的头像 ZLG致远电子 发表于 10-12 09:31 ? 261次 阅读
      致远电子CAN智慧云如何赋能ECU远程刷写

      探究Redis 性能测试与监控

      很多人在安装部署好Redis后,就没有对Rredis的配置和部署等有效性和高可用性进行性能测试,最终....
      的头像 马哥Linux运维 发表于 10-12 09:19 ? 222次 阅读
      探究Redis 性能测试与监控

      如何建立一个动态的IP黑名单

      Nginx 通过 Lua + Redis 实现动态封禁 IPJava后端 3天前为了封禁某些爬虫或者....
      的头像 Android编程精选 发表于 10-12 09:15 ? 235次 阅读
      如何建立一个动态的IP黑名单

      怎么用树莓派自己制作一个服务器

      ? 链接丨segmentfault.com/a/1190000021143144 No.1 树莓派是....
      的头像 Android编程精选 发表于 10-12 09:12 ? 279次 阅读
      怎么用树莓派自己制作一个服务器

      NVIDIA和VMware将为企业提供大规模AI服务

      NVIDIA AI Enterprise和VMware vSphere with Tanzu简化企业....
      的头像 NVIDIA英伟达企业解决方案 发表于 10-11 16:57 ? 267次 阅读

      嵌入式与普通计算机的区别

      嵌入式与普通计算机的区别
      的头像 lhl545545 发表于 10-09 16:36 ? 694次 阅读

      TI携手台达为数据中心设计高效、高功率服务器电源供应器

      因此,德州仪器(TI)区域销售经理 Rui 认为,我国数据中心未来发展将突出表现在绿色化、智能化、大....
      的头像 德州仪器 发表于 10-09 14:47 ? 314次 阅读

      热虹吸散热技术解决GPU服务器散热问题

      随着深度学习、仿真、BIM设计、AEC行业在各行各业应用的发展,在AI技术虚拟GPU技术的加持之下,....
      发表于 10-09 14:11 ? 42次 阅读

      联想集团终止科创板上市

      联想集团公司在首个港股交易日股价收涨创下了半年以来的最新高,联想集团股价经历国庆七天保持上涨。据悉,....
      的头像 lhl545545 发表于 10-09 10:55 ? 2263次 阅读

      脸书一周内第二次宕机

      据海外媒体的报道消息,Facebook公司就已经在一周之内出现第二次服务器故障问题向用户致歉,称公司....
      的头像 lhl545545 发表于 10-09 09:24 ? 1549次 阅读

      怎样去开发OPC Data Access 2.0服务器

      OPC服务器的开发主要包括哪几部分? 怎样去开发OPC Data Access 2.0服务器? ...
      发表于 10-09 08:03 ? 0次 阅读

      FH8001路桥凝冰预警系统的简单介绍

      迄今为止,我国高速公路里程已超过16万公里,居世界首位。由于我国3/4的国土处于降雪、冰冻覆盖区,在....
      发表于 10-08 16:01 ? 30次 阅读

      开源服务器Tomcat工作原理

      Tomcat 是什么开源的 Java Web 应用服务器,实现了 Java EE(Java Plat....
      的头像 马哥Linux运维 发表于 10-08 15:11 ? 202次 阅读
      开源服务器Tomcat工作原理

      机柜式温湿度传感器在数据中心机房的应用

      随着信息技术的不断发展,计算机机房成了各大企业不可缺少的重要组成部分。但是在整体信息化建设以及建筑智....
      发表于 10-08 14:30 ? 25次 阅读

      进入容器,即开即用:NVIDIA和VMware为企业提供大规模AI服务

      戴尔科技EMC PowerEdge R7525服务器近期在MLPerf基准测试中使用三个NVIDIA....
      发表于 10-08 10:10 ? 1048次 阅读
      进入容器,即开即用:NVIDIA和VMware为企业提供大规模AI服务

      Modbus协议是什么

      Modbus协议是什么? MODBUS功能码有哪些? MODBUS协议有哪几种传输模式? ...
      发表于 09-29 07:06 ? 0次 阅读

      如何通过C#结合SMTP来实现报警通知

      如何进行报警的检测? 如何实现邮件的发送? 如何通过C#结合SMTP来实现报警通知? ...
      发表于 09-28 06:58 ? 0次 阅读

      模型量化会带来哪些好处?

      量化算法具有什么特点? 模型量化会带来哪些好处? ...
      发表于 09-28 06:32 ? 0次 阅读

      ZN-2RXY??槭饺嵝宰远沸紊呤笛橄低秤心男┕δ?/a>

      ZN-2RXY??槭饺嵝宰远沸紊呤笛橄低呈怯赡男┎糠肿槌傻?? ZN-2RXY??槭饺嵝宰远沸紊呤笛橄低秤心男┕δ?..
      发表于 09-27 08:56 ? 0次 阅读

      请问一下CHNet-S7200的功能有哪些

      请问一下CHNet-S7200的功能有哪些?
      发表于 09-18 06:58 ? 0次 阅读
      亚洲色欧美图另类综合_亚洲 自拍 色综合图区av网站_亚洲人成伊人成综合网 全南县| 大英县| 嘉祥县| 姜堰市| 宁津县| 阳城县| 定结县| 彩票| 林口县| 鹰潭市| 榆树市| 扶沟县| 广汉市| 芷江| 广昌县| 讷河市| 巢湖市| 阿巴嘎旗| 梁平县| 临安市| 资源县| 镇安县| 茂名市| 托克逊县| 全州县| 山阳县| 改则县| 龙山县| 三河市| 安义县| 海南省| 新田县| 连平县| 长丰县| 海盐县| 赤水市| 来凤县| 凤台县| 温泉县| 三台县| 罗甸县| http://444 http://444 http://444 http://444 http://444 http://444