本身动手打造深度学习服务器

摘要: 本文介绍如何本身构建深度学习服务器

注意:本文主要关注服务器设置和与多个用户同时工做,部件组装和软件安装过程是Slav Ivanov关于建立本身的DL Box的文章的简化版本。linux

我刚刚开始阅读fast.ai课程的第1部分“编码器的实用深度学习”,我想构建本身的服务器,经过使用AWS p2实例和存储对模型进行升级。意识到我将使用更大的数据集而且不想由于缺少足够的处理能力以至等待数小时来训练个人模型,构建本身的DL平台是一个好的选择,由于从长远来看它将节省我大量的时间和金钱,也给了我很好的把服务器放在一块儿的经验。api

构建

建立部件清单bash

在将任何部件列表放在一块儿以前,你须要肯定你真正想要从你的机器中获得什么。对我来讲,我想要的是:服务器

比亚马逊p2实例更强大网络

能够添加额外的GPU,RAM,存储和自定义液体冷却的空间框架

多年来不会过期的硬件机器学习

将成本下降到3000美圆的预算工具

我使用pcpartpicker.com来指出全部内容,由于它比较容易比较其余部分和组织全部内容,以及它们很是好的部件兼容性检查器(稍后将详细介绍)。我将详细介绍为何我选择每一个部件以及它如何与整个系统一块儿工做。做为参考,能够在此处找到个人服务器构建的连接。性能

GPU: GTX 1080 Ti Hybrid学习

当你使用显卡训练模型时,这是构建中最重要的部分,所以GPU越强大,你处理大量数据集的速度就越快。更高的GPU内存等同于更高的处理能力(例如,更快的训练,更大的批量大小等......)。我为个人服务器选了两张这样的卡,由于个人预算有足够的空间,它让我能够在其中一张卡上训练个人模型,并让另外一个用户在第二张卡上训练他们的模型。你能够缩小你购买的GPU的类型,以适应你的预算(1070、1060等),同时防止其余部件遇到瓶颈。Hybrid 1080 GPU也很不错,由于除了大多数gpu所具备的普通风扇冷却系统以外,它们还预装了aio水冷系统。1080 Ti在满载时发热,所以在训练模型时,必须保持高质量的冷却以延长卡的使用寿命并保持其性能。关于选择图形卡的更多信息,这篇文章真的帮助我真正理解了在深度学习环境中工做时应该作哪些选择。

CPU: AMD Threadripper 1900x

当你使用显卡来训练神经网络时,你的CPU仍然很重要,由于它被用于诸如数据准备之类的操做,因此这些高核心计数将有助于加速进程。我使用了Treadripper,由于它是市场上很是新的CPU,有很高的核数(TR2的32核!),它们的价格远低于英特尔的同类产品。1900x是第一个得到TR的最低层,只有8个内核,不过我对这台服务器的总体目标是保持它的可升级性。

须要注意的一点是,当你选择CPU时,请确保你的显卡有8或16个pcie槽可用,由于这是显卡在负载下表现最好的时候,不然你的系统可能会遇到瓶颈。在高端cpu上,若是服务器上有4张显卡,那么几乎能够保证有足够的pcie槽。

主板: MSI X399 SLI Plus

选择这块主板,由于它是一个完整的ATX板,有4个gpu的空间,以及最大128GB的RAM。如前所述,此服务器的主要目标之一是使其保持高度可升级性。

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

内存越多,处理大型数据集就越容易。我计划升级的下一件事是再增长2根16GB的RAM,这就是为何我没有获得四通道ram (4x8gb的RAM),尽管这会使个人性能提升一些。

存储:256GB三星SSD和2TB硬盘

我把Ubuntu,我全部的库,以及我在SSD上使用的当前数据,以及我储存在2TB机械硬盘上的全部其余数据。

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

Threadrippers没有库存冷却器(并且若是您有30美圆的备用费,您应该常常升级到至少一个便宜的售后冷却器),因此我但愿使用可靠的、全天候使用的、廉价的、易于维护的工具。这种一体式冷却器很是容易安装,并且很是可靠(几十万个机组中可能有一到两个发生泄漏冷却液的状况),并且很是安静。

电源:EVGA SuperNOVA 1000w 80+金牌认证

必定要用比你技术所需的更多的功率。PCPartpicker的wattage计算器很好,它能让你大概知道你要拉动多少(在个人例子里是824w),尽管它常常是不许确的,由于它的数量是不一样的,因此最好确保你的电脑不会打开。“黄金认证”仅仅是指PSU的效率(多少能量做为热量被浪费)。

箱子:Corsair 760T全塔

我选择这个箱子是由于它里面有多少空间以及它的价格。虽然这并不能让你的模型训练得更快,但清晰的侧板和红色的led确实能让你看起来更酷。

clipboard.png
一年的积蓄和毕业奖金在一张照片上

把部件组装在一块儿

若是你是电脑新手,这就像组装一套很是昂贵的乐高玩具。任何人都能作到这一点,尽管它比你想象的更难搞糟。我将很快地介绍如何构建个人组装,尽管我强烈建议你在构建本身的时遵循完整构建的视频,好比这个!这些说明适用于几乎全部你正在使用的部件的组合,就像我在上面连接的视频指南同样。

第1步:安装CPU

clipboard.png

这多是构建计算机最可怕的部分,由于你必须遵循特定的步骤顺序而且你可能会意外地当即销毁大约价值430美圆的 cpu(就像粉碎单个cpu引脚),这是很容易的事情。

第2步:安装电源

clipboard.png

作事没有正确或错误的顺序,但根据我我的的经验,我喜欢将PSU做为我放入箱子的第一部分,由于有些状况要求你将PSU滑入一个使你“经过主板”移动的插槽,若是它在那里。

第3步:将全部东西放在一块儿

clipboard.png

这是一个很大的步骤,但一旦主板在其余一切都很容易安装。我会按顺序安装:

1.安装的RAM。这很简单,只要把你的内存棒滑动到正确的方向,并在你的主板上插入正确的插槽(请参阅手册,由于有特定的槽使用取决于你有多少棒)。

2.安装CPU冷却器。惟一的小麻烦是我不得不更换安装支架,以便与TR兼容,只是须要很大的力量来改变。安装散热器用了8个螺栓而且我完成了。

3.安装显卡。只需将它们滑入主板上各自的插槽(如内存,请参阅手册中有哪些插槽可插入)并将散热器固定在你的机箱中。确保你的散热器高于你的gpu。 我在上面的图片中犯了这个错误,不得不从新安装在箱子的前面板上。

4.安装存储。我卸下了其中一个驱动器托架以得到更多气流,所以我将SSD和HDD放在右下方的单个驱动器托架中。

第4步:成功?

clipboard.png

是时候开机了。起初我没有,由于个人箱子的电源按钮的正负电缆线颠倒了,但以后我看到了我所但愿的明亮的白色和红色。若是一切顺利,你应该看到你的计算机发布,而后搜索一个启动设备。

设置服务器

安装操做系统

下一步是安装您的操做系统。我正在使用Linux,由于这是大多数DL框架的设计目标。我使用Ubuntu Desktop v16.04 LTS并安装了USB驱动器中的全部内容。 有许多免费工具,如UNetbootin或Rufus(仅限Windows),你能够下载这些工具来准备你的u盘。这里有一个很是有用的教程,介绍如何在Mac电脑上建立一个可引导的USB,若是你使用的是Windows操做系统,那么这里有一个合适的教程。

设置SSH

第1步:端口转发

你必须对全部路由器执行相似的过程,但因为我有一个苹果路由器,我按照本指南执行如下操做:1.为你的服务器设置静态IP,以便每次关闭时它都不会更改关闭。2.使用Apple Airport Utility登陆路由器3.映射服务器的端口。你须要为此部分找到服务器的MAC地址,所以请参阅本指南,了解如何在Ubuntu上找到它。

第2步:建立动态IP地址

我曾经为服务器建立一个动态IP地址,容许我在终端远程链接它。你可使用此网站来验证它是否正常工做。

当我想链接到个人服务器时,我输入一个以下所示的命令:

clipboard.png

个人服务器在端口8888上运行,个人jupyter notebook在8889上运行(-L选项将指定的本地端口重定向到不一样的主机和端口)。 这样我就能够在个人机器上本地运行笔记本,以便与个人服务器同时进行测试以便进行训练。可是,若是你不想这样,你能够在-L部分以前输入全部内容。我将在下一节中解释如何更改运行jupyter笔记本的端口。

安装DL / ML库

如今安装深度学习/机器学习所需的全部库。我将逐节介绍安装脚本,以便你了解能够在此处找到的内容。它主要基于Jeremy Howard的install-gpu.sh脚本,所以这里的不少内容不只仅是由于它们是有用的工具,并且由于这是咱们在Fastai中使用的。

首先,咱们将确保咱们的系统是最新的,并安装咱们须要的全部基本工具:

clipboard.png

下一步是下载并安装全部CUDA GPU驱动程序:

clipboard.png

如今咱们将验证咱们是否正确安装了全部CUDA内容:

clipboard.png

从这里咱们将把CUDA(Nvidia Deep Learning api)添加到咱们的PATH变量中:

clipboard.png

以后,下一步是安装CuDNN库(建立神经网络所需):

clipboard.png

咱们如今将为当前用户安装Anaconda:

clipboard.png

接下来,咱们将安装Tensorflow和Keras:

clipboard.png

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

clipboard.png

如下几节将配置jupyter notebook:

clipboard.png

要更改默认端口以运行Jupyter notebook(端口8888),请取消注释此行并输入所需的端口。这容许你同时在你的服务器和本地运行你的笔记本,同时让多个用户在你使用你的笔记本时使用他们的笔记本:

clipboard.png

如今咱们将配置tmux,这个工具可让咱们在终端窗口中建立多个“窗格”,并在断开链接后保持程序运行。查看此文档,由于它帮助我理解了tmux的全部功能。它很是有用,由于你能够在一个窗格中运行笔记本,监视另外一个窗口中的gpu使用状况,并在另外一个窗格中打开一个linux终端:

clipboard.png

接下来,咱们将建立tmuxp配置文件,该文件将在一个命令中设置咱们的开发环境,而无需每次咱们想要处理某件事情时配置窗格、启动jupyter notebook等。对于咱们的fastai环境,咱们将使用tmuxp load fastai启动它。请参见使用tmuxp的连接,这里是bash脚本中的文档以及保存服务器从新启动之间的tmux会话的文档。总之,这里让咱们配置咱们的环境:

clipboard.png

由于咱们再也不须要它们,让咱们删除安装文件:

clipboard.png

就是这样!在编写本文时,个人服务器一直全天候运行,彻底没有任何问题,彻底无声,而且经过训练轻松完成。

本文做者:【方向】

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索