注意:本文主要关注服务器设置和与多个用户同时工作,部件组装和软件安装过程是Slav Ivanov关于创建自己的DL Box的文章的简化版本。
我刚刚开始阅读fast.ai课程的第1部分“编码器的实用深度学习”,我想构建自己的服务器,通过使用AWS p2实例和存储对模型进行升级。意识到我将使用更大的数据集并且不想因为缺乏足够的处理能力以致等待数小时来训练我的模型,构建自己的DL平台是一个好的选择,因为从长远来看它将节省我大量的时间和金钱,也给了我很好的把服务器放在一起的经验。
构建
创建部件清单
在将任何部件列表放在一起之前,你需要确定你真正想要从你的机器中得到什么。对我来说,我想要的是:
- 比亚马逊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确实能让你看起来更酷。
一年的积蓄和毕业奖金在一张照片上
把部件组装在一起
如果你是电脑新手,这就像组装一套非常昂贵的乐高玩具。任何人都能做到这一点,尽管它比你想象的更难搞糟。我将很快地介绍如何构建我的组装,尽管我强烈建议你在构建自己的时遵循完整构建的视频,比如这个!这些说明适用于几乎所有你正在使用的部件的组合,就像我在上面链接的视频指南一样。
第1步:安装CPU
这可能是构建计算机最可怕的部分,因为你必须遵循特定的步骤顺序并且你可能会意外地立即销毁大约价值430美元的 cpu(就像粉碎单个cpu引脚),这是很容易的事情。
第2步:安装电源
做事没有正确或错误的顺序,但根据我个人的经验,我喜欢将PSU作为我放入箱子的第一部分,因为有些情况要求你将PSU滑入一个使你“通过主板”移动的插槽,如果它在那里。
第3步:将所有东西放在一起
这是一个很大的步骤,但一旦主板在其他一切都很容易安装。我会按顺序安装:
1.安装的RAM。这很简单,只要把你的内存棒滑动到正确的方向,并在你的主板上插入正确的插槽(请参阅手册,因为有特定的槽使用取决于你有多少棒)。
2.安装CPU冷却器。唯一的小麻烦是我不得不更换安装支架,以便与TR兼容,只是需要很大的力量来改变。安装散热器用了8个螺栓并且我完成了。
3.安装显卡。只需将它们滑入主板上各自的插槽(如内存,请参阅手册中有哪些插槽可插入)并将散热器固定在你的机箱中。确保你的散热器高于你的gpu。 我在上面的图片中犯了这个错误,不得不重新安装在箱子的前面板上。
4.安装存储。我卸下了其中一个驱动器托架以获得更多气流,因此我将SSD和HDD放在右下方的单个驱动器托架中。
第4步:成功?
是时候开机了。起初我没有,因为我的箱子的电源按钮的正负电缆线颠倒了,但之后我看到了我所希望的明亮的白色和红色。如果一切顺利,你应该看到你的计算机发布,然后搜索一个启动设备。
设置服务器
安装操作系统
下一步是安装您的操作系统。我正在使用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地址,允许我在终端远程连接它。你可以使用此网站来验证它是否正常工作。
当我想连接到我的服务器时,我输入一个如下所示的命令:
我的服务器在端口8888上运行,我的jupyter notebook在8889上运行(-L选项将指定的本地端口重定向到不同的主机和端口)。 这样我就可以在我的机器上本地运行笔记本,以便与我的服务器同时进行测试以便进行训练。但是,如果你不想这样,你可以在-L部分之前输入所有内容。我将在下一节中解释如何更改运行jupyter笔记本的端口。
安装DL / ML库
现在安装深度学习/机器学习所需的所有库。我将逐节介绍安装脚本,以便你了解可以在此处找到的内容。它主要基于Jeremy Howard的install-gpu.sh脚本,因此这里的很多内容不仅仅是因为它们是有用的工具,而且因为这是我们在Fastai中使用的。
首先,我们将确保我们的系统是最新的,并安装我们需要的所有基本工具:
下一步是下载并安装所有CUDA GPU驱动程序:
现在我们将验证我们是否正确安装了所有CUDA内容:
从这里我们将把CUDA(Nvidia Deep Learning api)添加到我们的PATH变量中:
之后,下一步是安装CuDNN库(创建神经网络所需):
我们现在将为当前用户安装Anaconda:
接下来,我们将安装Tensorflow和Keras:
接下来,我们将为Fastai安装Python依赖项:
以下几节将配置jupyter notebook:
要更改默认端口以运行Jupyter notebook(端口8888),请取消注释此行并输入所需的端口。这允许你同时在你的服务器和本地运行你的笔记本,同时让多个用户在你使用你的笔记本时使用他们的笔记本:
现在我们将配置tmux,这个工具可以让我们在终端窗口中创建多个“窗格”,并在断开连接后保持程序运行。查看此文档,因为它帮助我理解了tmux的所有功能。它非常有用,因为你可以在一个窗格中运行笔记本,监视另一个窗口中的gpu使用情况,并在另一个窗格中打开一个linux终端:
接下来,我们将创建tmuxp配置文件,该文件将在一个命令中设置我们的开发环境,而无需每次我们想要处理某件事情时配置窗格、启动jupyter notebook等。对于我们的fastai环境,我们将使用tmuxp load fastai启动它。请参见使用tmuxp的链接,这里是bash脚本中的文档以及保存服务器重新启动之间的tmux会话的文档。总之,这里让我们配置我们的环境:
因为我们不再需要它们,让我们删除安装文件:
就是这样!在编写本文时,我的服务器一直全天候运行,完全没有任何问题,完全无声,并且通过训练轻松完成。
我还参考了一些作品:
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
本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。
文章原标题《Making a Deep Learning Server》
作者:Wayde Gilliam
译者:董昭男,审校:。
文章为简译,更为详细的内容,请查看原文