Wayde Gilliam作家

运用AMD CPU,3000美元打制本人的深度进修效劳器

本文作家精细描画了本人拼装深度进修效劳器的进程,从 CPU、GPU、主板、电源、机箱等的采纳到部件的安装,再到效劳器的修立,可谓面面俱到。作家指出,拼装者起首要弄清本人的需求,然后依据预算做出合理的挑选。

注:本文旨议论效劳器修立及众用户协作,部件拼装和软件安装进程是 Slav Ivanov 关于创立本人的 DL Box 的作品(https://medium.com/m/global-identity?redirectUrl=https://blog.slavv.com/the-1700-great-deep-learning-box-assembly-setup-and-benchmarks-148c5ebe6415)的简化版本。

我刚开端进修 fast.ai 课程的第一部分——「Practical Deep Learning for Coders」,我念搭修本人的效劳器来教练模子,举措运用 AWS p2 和存储的升级。我将会运用更大的数据集,而且我不期望教练模子时因为缺乏足够的处理才能而等候数小时,于是构修本人的 DL rig 效劳器对我来说是一个不错的挑选,而且从久远来看,它将为我俭省大宗的时间和金钱,而且可以积聚拼装效劳器的精良体验。

拼装

列出部件清单

准备部件之前,你要弄分明本人终究念从板滞中取得什么。私人而言,我念取得以下改良:

  • 比 Amazon p2 更增强大

  • 容纳分外 GPU、RAM、存储及定制液体冷却的空间

  • 可以用良久的硬件

  • 预算掌握 3000 美元尊驾

我用 pcpartpicker.com来细化各个部件,因为它可以将比照和拼装其它部件变得十分简单,而且还具备很不错的部件兼容性反省器。我将精细标明挑选每个部件的启事以及它们怎样与通通系统协同义务。以下是我的效劳器链接地址:https://pcpartpicker.com/b/CgpG3C。

GPU: GTX 1080 Ti Hybrid

因为你要运用显卡来教练模子,以是这是拼装进程中最主要的一部分,于是,GPU 越强大,你处理大型数据集的速率就越速。GPU 内存越大,处理才能也就越强(如:斗嗽糍度更速,批尺寸更大……)。我为本人的效劳器选了两块这种显卡,因为我预算里为它们预留了空间,如许我就能用此中一块显卡教练模子,让另一个用户第二块卡上教练其模子。你可以依据本人的预算缩减 GPU 内存(1070、1060 等),避免与其它部件争抢预算。Hybrid 1080 GPU 也不错,因为除了大大都 GPU 具有的平常风扇冷却除外,它还预装了 aio 水冷系统。1080 Ti 满负载运转时会过热,于是,教练模子时,精良的冷却系统关于延伸显卡寿命并保持其功用至关主要。关于显卡挑选的更众细节,请参睹 http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/,该文帮帮我真正了解了怎样挑选适合深度进修状况的显卡。

CPU: AMD Threadripper 1900x

虽然你用显卡教练神经收集,但 CPU 仍然很主要,因为你要用它来举行数据准备等操作,于是那些众核 CPU 将有帮于加疾速率。我用的是「线程撕裂者」Treadripper,因为这是市情上十分新的一款众核 CPU(ThreadRipper 2 代有 32 个内核!),而且比因特尔价钱低得众。1900x 是客岁发布的根底版 TR,它只要 8 个内核,不过我对这台效劳器的全体目标是保持它的可升级性。

需求当心的一点是,挑选 CPU 时,要确保有 8 或 16 个 pcie 插槽供显卡运用,如许才干包管它们低负载系愧恍☆好的功用,否则就有堵塞系统的损害。高端 CPU 上,假如你的效劳器中有 4 个显卡,那么你就有足够的 pcie 插槽。

主板:MSI X399 SLI Plus

挑选这块主板是因为它是一块完备的 ATX 板,可容纳 4 个 GPU,RAM 最众可达 128GB。正如我前面所说,这个效劳器的主要目标之一是保持它可升级。

内存:32GB Corsair Vengeance LPX DDR4 (2 x 16GB)

内存越大,处理大型数据集就越容易。我的下一个升级方案是再添加两个 16GB RAM 内存条,这也是我没有安装四通道内存(4 个 8GB 内存条)的启事,尽管它会进步我的效劳器的功用。

存储:256GB Samsung SSD & 2TB HDD

我把 Ubuntu、我的所有库、我 SSD 上正运用的数据集以及手里的其它所稀有据都保管 2TB 的机械硬盘上。

冷却器:Corsair H100i v2 液体冷却器

「线程撕裂者」没有备用冷却器(假如你有 30 美元的余款,起码应当买一个低廉的二手冷却器),以是我念要一个可以全天候运用的、低廉又容易维护的冷却器。这款集种种优点于一身的冷却器十分容易安装,而且十分牢靠(数十万台机组中,可以只要一两台爆发冷却液走漏)、恬静。

电源:EVGA SuperNOVA 1000w 80 + Gold Certified

最好有一个功率超越技能请求的 PSU。PCPartpicker 的功率盘算器可以大致算出你需求众大的功率(我的效劳器是 824w),然而它常常数目上堕落,于是最好举行平安操作,以防你的盘算机无法翻开。「Gold Certified」只是指 PSU 的服从(糜费了众少功率举措热量)。

机箱:Corsair 760T Full Tower

我挑选这个机箱是因为它的价钱和内部空间大小。虽然它并不行进步你的模子斗嗽糍度,可是透后的侧面板和血色的 LED 确实让你看起来更酷。

这幅图里的东西花掉了我一年的积存和结业的钱

把部件整合到一同

你可以不太了解怎样拼装一台电脑,这个进程实就像拼装一套腾贵的乐高积木相同。任何人都可以做到,因为它真的很简单。我将疾速先容怎样拼装电脑,而且我激烈倡议你拼装本人的电脑时观看完备的视频(https://www.youtube.com/watch??v = IhX0fOUYd8Q)。这些阐明晰实适用于任何你正运用的电脑,就像我上面链接的视频指南相同。

第一步:拼装 CPU

这可以是拼装电脑进程中最可骇的部分,因为你必需遵照特定的方法,而且可以因为少许小意外而毁掉代价 430 美元的 CPU(如弄断一个 CPU 的引脚)。不过这一步实很简单,你只需确保拼装前看过视频教程即可。关于 Threadripper 来说,安装进程略有差别,因为大大都主板上,你不需求「锁紧」处理器,而是运用单个扣架即可。

照片根源:Slav Ivanov

第二步:拼装电源配备

电源的安装序次并没有对错之分,但我喜皇比把 PSU 放进盒子里,因为有些状况下你需求把 PSU 卡进一个插槽里,如许做你才干「穿过主板」。

第三步:拼装其它部件

这是至关主要的一步,一朝主板安装好,那其他部分的安装会变得很容易。我将按照如下序次举行安装:

  1. 安装 RAM。这很简单,只需把内存条向准确的偏向挪动,并把插槽准确地按进主板即可(请参阅安装手册,因为插槽要依据你具有的内存条个数决议)。

  2. 安装 CPU 冷却器。独一的小繁难是为了与 TR 兼容,我必需改换安装支架,这需求很大的力气。安装散热器需求 8 个螺栓,我已安装完毕。

  3. 安装显卡。只需求袄髟卡安装到主板的特定卡槽中即可(像内存条相同,参照你的手册,看哪些插槽可以袄髟卡放入),再把散热器固定你的机箱上。要确保你的散热器 GPU 上方。上图中我犯了个小过失,以是不得不把它从头挂机箱的前板上。

  4. 安装存储器。为了取得更好的散热效果我卸掉了一块驱动板,以是我把 SSD 和 HDD 放右下角的单驱动器槽里。

第四步:安装成功?

现可以翻开你的配备了。开端因为我配备的电源键上正负线接反了,以是我的配备并没有成功翻开,但厥后照旧呈现了预期的白光和红光。假如通通随手,你可以看到你的电脑屏幕被点亮,然后主板开端搜寻指导配备。

修立效劳器

安装操作系统

下一步是安装操作系统。我运用的是 Linux,因为大大都 DL 框架都是针对该系统计划的。运用的台式机是 Ubuntu 16.04 LTS, 用 USB 就可安装通通的东西。有许众像 UNetbootin 或 Rufus(仅用于 Windows)的免费东西,可以先下载到 U 盘中备用。这是一个先容 Mac 上创立可启动 USB 的完备进程的教程(https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-macos?_ga=2.169997348.541383618.1529376295-1852780805.1529376295#0),假如你用 Windows,可以翻开此链接:https://www.howtogeek.com/howto/linux/create-a-bootable-ubuntu-usb-flash-drive-the-easy-way/。

修立 SSH

第一步:端口映照

你需求对所有的道由器举行相似处理,假如是 apple 的道由器可以遵照这个指南:https://portforward.com/apple/,操作如下:1. 为你的效劳器修立一个静态 IP,避免它每次关适时更改。2. 用 Apple Airport Utility 登录你的道由器。3. 为效劳器映照端口,完毕这一步需求找到效劳器的 MAC 地址,怎样 Ubuntu 找到地址可以查看此链接:http://technologyinfinite.blogspot.com/2016/07/three-simple-ways-to-find-mac-address.html。

第二步:创立一个动态 IP 地址

我之前为效劳器创立过动态 IP 地址,可以容许我终端长途连接它。你可以通过该网站(http://canyouseeme.org/)验证它的有用性。

键入一个如下所示的命令连接到我的效劳器:

ssh [my_username]@[my_ip] -L 8888:[dl-rig_static_ip]:8889

我的效劳器端口 8888 上运转,jupyter notebooks 运转 8889 上(-L 选项将指定的本机端口从头定向赴任别的主机和端口)。如许我们就可以当地运转我们的配备,与效劳器同时测试,以便教练。假如不念如许,-L 之前把所有东西输入进去即可。下一节我会标明怎样更改运转 jupyter notebooks 的端口。

安装深度进修/板滞进修

现需求安装所有的与深度进修/板滞进修相关的库。我会将安装脚本举行分节,如许你就容易了解这些实质。该脚本是基于 Jeremy Howard』s 编写的 install-gpu.sh(https://github.com/fastai/courses/blob/master/setup/install-gpu.sh),这里边许众东西不光仅是因为它们是适用性东西,更是因为这也是我们要 Fastai 中运用的。

起首,我们需求包管系统是最新的,而且安装了所有我们需求的根底东西包:

sudoapt-getupdate
sudoapt-get--assume-yesupgrade
sudoapt-get--assume-yesinstalltmuxbuild-essentialgccg++makebinutilsunzip
sudoapt-get--assume-yesinstallsoftware-properties-common
sudo apt-get --assume-yes install git

下一步是下载和安装所有 CUDA GPU 的驱动包:

mkdir ~/downloadscd ~/downloads

wgethttp://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudodpkg-icuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudoapt-keyadv--fetch-keyshttp://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudoapt-getupdate
sudoapt-get-yinstallcuda
sudoapt-get--assume-yesupgrade
sudoapt-get--assume-yesautoremove
sudoapt-getinstallcuda-toolkit-9.0cuda-command-line-tools-9-0

现我们开端验证是否准确安装了 CUDA:

sudomodprobenvidia
nvcc--version
nvidia-smi

现开端,我们将 CUDA(Nvidia Deep Learning api)添加到道径变量:

cat>>~/.bashrc<<'EOF'
exportPATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
exportLD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
EOF

source ~/.bashrc

下一步是安装 CuDNN 库(创立神经收集所需):

wgethttp://files.fast.ai/files/cudnn-9.1-linux-x64-v7.tgz
tarxfcudnn-9.1-linux-x64-v7.tgz
sudocpcuda/include/*.*/usr/local/cuda/include/
sudocpcuda/lib64/*.*/usr/local/cuda/lib64/

现我们为目今用户安装 Anaconda:

wget "https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh"
bash"Anaconda3-5.0.1-Linux-x86_64.sh"-b

cd~

echo"exportPATH=\"$HOME/anaconda3/bin:\$PATH\"">>~/.bashrc
exportPATH="$HOME/anaconda3/bin:$PATH"
condainstall-ybcolz
conda upgrade -y --all

下一步,安装 Tensorflow 和 Keras:

pipinstall--ignore-installed--upgradehttps://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.8.0-cp36-cp36m-linux_x86_64.whl

pipinstallkeras
mkdir~/.keras
echo'{
"image_dim_ordering":"tf",
"epsilon":1e-07,
"floatx":"float32",
"backend":"tensorflow"
}' > ~/.keras/keras.json

接下来,我们将为 Fastai 安装 Python 依赖项:

mkdir-p~/development/_training/ml
cd~/development/_training/ml

gitclonehttps://github.com/fastai/fastai.git
cdfastai
condaenvupdate

以下几节将先容怎样配备 jupyter notebook:

#Leavingthenextlineuncommentedwillpromptyoutoprovideapasswordto
#usewithyourjupyternotebook.
jupass=`python-c"fromnotebook.authimportpasswd;print(passwd())"`
#Tohardcodethepasswordto'jupyter'commentlineaboveanduncommentthelinebelow.
#jupass=sha1:85ff16c0f1a9:c296112bf7b82121f5ec73ef4c1b9305b9e538af

#createsslcertforjupyternotebook
opensslreq-x509-nodes-days365-newkeyrsa:1024-keyout$HOME/mykey.key-out$HOME/mycert.pem-subj"/C=IE"

#configurenotebook
echo"c.NotebookApp.certfile=u'/home/{user}/mycert.pem'">>$HOME/.jupyter/jupyter_notebook_config.py
echo"c.NotebookApp.keyfile=u'/home/{user}/mykey.key'">>$HOME/.jupyter/jupyter_notebook_config.py
echo"c.NotebookApp.password=u'"$jupass"'">>$HOME/.jupyter/jupyter_notebook_config.py
echo"c.NotebookApp.ip='*'">>$HOME/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.open_browser = False" >> $HOME/.jupyter/jupyter_notebook_config.py

要更改默认端口以(端口 8888)上运转 Jupyter notebook,请撤消解释,并输入所需端口。如许就可以效劳器和当地同时运转你的条记本,也可以你运用条记本时让众个用户运用他们本人的条记本。

#echo"c.NotebookApp.port=9999">>$HOME/.jupyter/jupyter_notebook_config.py

现我们开端配备 tmux,这个东西可以使我们终端窗口创立众个「窗口」,同时断开连接后仍能保持顺序的运转。因为这个文献可以帮帮我们了解 tmux 的所有功用,以是需求反省此文献。它十分的有用,因为你可以一个窗口中运转你的条记本,另一个窗口中监视 GPU 运用,并第三个窗口中翻开一个 linux 终端:

pipinstalltmuxp
mkdir~/.tmuxp

接下来,我们将创立 tmuxp 的配备文献,该文献将一个命令中对开辟状况举行修立,如许我们每次念处理事情的时分就无需配备窗口、启用 jupyter notebook 了。关于 fastai 状况,我们将从 tmuxp 加载 fastai 开端。请参睹运用 tmuxp 的链接,此处是 bash 脚本中的文档,此链接用于效劳注重启时保管 tmux 会话。现让我们配备运转状况。

cat>$HOME/.tmuxp/fastai.yml<<tmuxp-config
session_name:fastai
windows:
-window_name:devwindow
layout:main-vertical
options:
main-pane-width:140
shell_command_before:
#runasafirstcommandinallpanes
-cd~/development/_training/ml/fastai
-sourceactivatefastai
panes:
-shell_command:
-clear
-shell_command:
-clear
-jupyternotebook
-shell_command:
-watch-n0.5nvidia-smi
Tmuxp-config

因为我们不再需求这些,以是可以删除安装文献:

cd~/downloads
rm-rfcuda-repo-ubuntu1604_9.0.176-1_amd64.debxfcudnn-9.1-linux-x64-v7.tgzAnaconda3-5.0.1-Linux-x86_64.sh

cd ~

便是如许。我写这篇作品的时分,效劳器不停全天候运转,无题目、无噪声、十分轻松地通过了教练。

其他参考材料根源:

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

  • https://towardsdatascience.com/building-your-own-deep-learning-box-47b918aea1eb

  • https://medium.com/impactai/setting-up-a-deep-learning-machine-in-a-lazy-yet-quick-way-be2642318850 


原文链接:https://waydegg.github.io/making-a-dl-server.html#making-a-dl-server

工程硬件CPUAMD
51
相关数据
深度进修技能

深度进修(deep learning)是板滞进修的分支,是一种试图运用包罗繁杂构造或由众重非线性变换构成的众个处理层对数据举行高层笼统的算法。 深度进修是板滞进修中一种基于对数据举行外征进修的算法,至今依鳌有种深度进修框架,如卷积神经收集和深度置信收集和递归神经收集等已被运用盘算机视觉、语音识别、自然言语处理、音频识别与生物新闻学等范畴并获取了极好的效果。

板滞进修技能

板滞进修是人工智能的一个分支,是一门众范畴交叉学科,涉及概率论、统计学、迫近论、凸剖析、盘算繁杂性表面等众门学科。板滞进修表面重假如计划和剖析少许让盘算机可以主动“进修”的算法。因为进修算法中涉及了大宗的统计学表面,板滞进修与推测统计学联络尤为亲密,也被称为统计进修表面。算法计划方面,板滞进修表面体恤可以完成的,卓有用果的进修算法。

张量技能

张量是一个可用来外示少许矢量、标量和其他张量之间的线性联系的众线性函数,这些线性联系的基本例子有内积、外积、线性映照以及笛卡儿积。其坐标 维空间内,有 个分量的一种量,此中每个分量都是坐标的函数,而坐标变换时,这些分量也按照某些规矩作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无联系)。 数学里,张量是一种几何实体,或者说广义上的“数目”。张量看法包罗标量、矢量和线性算子。张量可以用坐标系统来外达,记作标量的数组,但它是定义为“不依赖于参照系的挑选的”。张量物理和工程学中很主要。比如扩散张量成像中,外达器官关于水的各个偏向的微分透性的张量可以用来发生大脑的扫描图。工程上最主要的例子可以便是应力张量和应变张量了,它们都是二阶张量,关于一般线性材料他们之间的联系由一个四阶弹性张量来决议。

神经收集技能

(人工)神经收集是一种根源于 20 世纪 50 年代的监视式板滞进修模子,那时分研讨者念象了「感知器(perceptron)」的念法。这一范畴的研讨者一般被称为「勾结主义者(Connectionist)」,因为这种模子模拟了人脑的功用。神经收集模子一般是通过反向传达算法运用梯度下降教练的。目前神经收集有两大主要类型,它们都是前馈神经收集:卷积神经收集(CNN)和轮回神经收集(RNN),此中 RNN 又包罗好坏期记忆(LSTM)、门控轮回单位(GRU)等等。深度进修是一种主要运用于神经收集帮帮其取得更好结果的技能。尽管神经收集主要用于监视进修,但也有少许为无监视进修计划的变体,比如主动编码器和生成对立收集(GAN)。

映照技能

映照指的是具有某种特别构造的函数,或泛指类函数思念的范围论中的态射。 逻辑和图论中也有少许不太常规的用法。其数学定义为:两个非空汇合A与B间保管着对应联系f,而且关于A中的每一个元素x,B中总有有独一的一个元素y与它对应,就这种对应为从A到B的映照,记作f:A→B。此中,y称为元素x映照f下的象,记作:y=f(x)。x称为y关于映照f的原象*。*汇合A中所有元素的象的汇合称为映照f的值域,记作f(A)。同样的,板滞进修中,映照便是输入与输出之间的对应联系。

引荐作品
赛福天,据说万达正道,要火。