用不到1000美元攒一台深度学习用的超快的电脑
继续深度学习和便宜硬件的探奇!
编者注:特别提醒——Strata + Hadoop World北京2017大会的议题征集即将在2017年2月24日截止,这是一个在世界最大型数据与商业会议上曝光的绝佳机会,我们期待着听到您最出色的想法。

是的,你可以在一个39美元的树莓派板子上运行TensorFlow,你也可以在用一个装配了GPU的亚马逊EC2的节点上跑TensorFlow,价格是每小时1美元。是的,这些选择可能比你自己攒一台机器要更现实一点。但是如果你和我是一样的人,你绝对想自己攒一台奇快无比的深度学习的电脑。

好吧,一千块钱对于一个DIY项目来说是太多了。但是一旦你把机器搞定,你就能构建数百个深度学习的应用啦,从拥有增强大脑的机器人到艺术创作(至少这是我为花这些钱找的理由)。最差的理由也是,这个机器至少能轻松打败那个2800美元的Macbook Pro笔记本。除了用电多一点,所有的性能都比Macbook强。另外这台电脑很容易被升级,从而能保证它的性能可以领先笔记本好几年。

从上世纪80年代后我就再没攒过电脑。我也相当担心花好几百块,最终搞一堆我自己装不出来的零件(或是攒出来了,但可能没法正常工作)。不过我要告诉你,攒机是可以的!另外,整个过程也很好玩。最后你能拥有一台通用的电脑,并能做预测,同时比笔记本快20多倍。

下面是购买清单和一些细节建议:

主板

主板有不同的尺寸规格。因为我不想用多个GPU,所以最便宜最小的主板标准尺寸是mini-ITX,对这个项目是够用了。我的最低要求是要有一个PCIe插槽给GPU用,有两个DDR4的内存插槽。最后我买的是华硕的 Mini ITX DDR4 LGA 1151 B150I PRO GAMING/WIFI/AURA主板,在亚马逊上卖125美元。还附送了一个WiFi的天线。这对于在地下室里用这个电脑是太方便了。

机箱

机箱不太重要,也非常便宜。因为DIY电脑的主要客户都是游戏玩家,所以机箱的形状和颜色也是五花八门。机箱的尺寸应该和主板配套,所以我的机箱需要支持mini-ITX。我买的是Thermaltake Core V1 Mini ITX Cube机箱,在亚马逊上卖50美元。

内存

我不敢相信现在内存有多便宜。你需要买和主板配合的DDR4型的内存(几乎网上找到的都是这个类型),大家的价格都差不多。我用129美元买了两条8GB of Corsair Vengeance内存。

这个带LED灯的内存条让我多花了5美元,因为亚马逊的用户评价上说“对于没法在机箱里装足够多LED灯的,这个内存是最佳选择。”如果你如我一样是在地下室里攒机,也不在乎机箱里面的美感,那你肯定会非常难在机箱里找到零件。

CPU

我看了一下网上的CPU评测比较,认为比较慢的CPU应该没什么问题,因为我没什么任务是要高速CPU的(除了训练神经网络,而我会用GPU来训练)。但我也受不了一台电脑,里面有一个相对其他部件落后三代的CPU。最后我花了214美元买了Intel I5-6600 CPU。

大部分亚马逊上能找到的CPU都是合适的。我没花额外的20美元去买I5-6600K。与I5-6600型相比,除了能超频,其他功能都一样。但通过系统可靠性来换取10%的速度提升对于我来说是够疯狂的。不过我承认,在我开始想着自己攒机后,我有些后悔了。所以谁知道哪?攒机会改变你的生活样式。可能买一个可超频的CPU会少一些后悔。但另一方面,也许去除掉多余的选择能保护你自己,不会自己作死。

硬盘

我也无法相信现在硬盘有多便宜了。用50美元我买了一个1TB SATA硬盘。固态硬盘会更快,但贵很多。而且深度学习的程序一般都不会是高I/O依赖的,因为一般程序都是拉取一批数据进内存,然后算很久。如果你有很多的文件传输任务,或是仅仅是想确保比你朋友的Macbook跑应用快很多,那我会买一个固态硬盘,比如这个三星的850 EVO 250GB 2.5-Inch SATA III Internal SSD,250G的要98美元。

这些硬盘让我意识到,苹果是多么会宰人。为了Macbook Pro有250G的额外硬盘容量,你要花200美元!

显卡/GPU

选哪款显卡是最重要也是最难的问题。对于几乎所有的机器学习应用,你都需要一个英伟达的显卡,因为只有英伟达有最重要的CUDA框架CuDNN库,所有的机器学习框架(包括TensorFlow)都依赖它们。

作为一个非GPU专家,我发现与之相关的名词术语是够让人糊涂的。但下面是非常基本的选购指标。

可能对深度学习最重要的指标就是显卡的显存大小。如果TensorFlow不能把模型和当前批次的训练数据存进GPU的显存,它就会失败并转向使用CPU,从而让GPU变成废物。

另外一个重要的考虑就是显卡的架构。英伟达最新依次推出的架构叫“Kepler”,“Maxwell”和“Pascal”。这些架构的主要区别就是速度。例如根据这个基准评测,Pascal Titan X的速度是Maxwell Titan X的两倍。

机器学习的大部分论文都是用的TITAN X显卡。性能不错,不过够贵,都要1000美元以上,哪怕是旧一点的版本。大部分搞机器学习且没多少预算的人都用的英伟达的GTX 900系列(Maxwell)或是GTX 1000系列(Pascal)。

想找出一块显卡的架构,你可以看看英伟达的那个极其让人混淆的命名系统:9XX卡使用的是Maxwell架构,而10XX是用的Pascal架构。但一个有更高的主频和更大的显存980可能还是比一个1060要快。

你可能必须对不同架构的英伟达GPU有所了解。但最重要的是,无论是9XX还是10XX显卡,都会比你的笔记本快一个数量级。不要被这些选项搞晕了,如果你还没有用过GPU,用它会比你现有的系统要快很多。

我买的是GeForce GTX 1060显卡,3GB显存,花了195美元。用它比我的Macbook要快近20倍。但对有些应用,它还是偶尔会出现显存内存不足的情况。所以我也许应该多花60美元来买一个GeForce GTX 1060 6GB显存版。

电源

我花了85美元买了一个650W的电源。我的经验是,电器如果电源出了问题是非常头疼也很难修的,所以不值得为此省钱。另一方面,我的系统的峰值负载从来没有超过250瓦。

散热器

我还记得我工作的第一家创业公司是把服务器放到壁橱里面的。即使隔着壁橱的门,风扇的噪声还是出奇的大。这样的日子似乎是早已过去了。不过650瓦的电源让你的机器耗能是笔记本的10倍,而能量总是要找到一个出口的地方。可能不是必须的,但是我还是用35美元买了一个超级的散热器——Master Hyper 212 EVO。这让CPU始终运行在低温状态,且系统超级安静。

概览

Component Price
Graphics Card $195
Hard Drive $50
CPU $214
Case $50
Power Supply $85
Heat Sink $35
RAM $129
Motherboard $125
Total $883

要最后能用,你还需要有显示器、鼠标和键盘。这些东西一般容易搞到(我的地下室里到处都是)。合计价格是883美元,因此想花1000美元的话,还能再升级一些东西。

装机

所有包裹都到齐后我是相当的兴奋,然后我发现装机是容易,但靠不住。花了我大概一个小时,按照每个部件的说明书就把电脑组装起来了。最后却点不亮。我不得不更换了主板,相当沮丧但还OK。

第二次组装时,我把所有的部件放在一个纸箱子上连接起来,先确定是不是都能正常工作。

基本上,如果你把每个东西都能插入到看起来能恰当地匹配的地方,就应该是OK的。

01image-a016cd7bb23f79fbb560c13146483832

图1 放在桌子上的半成品电脑,只连接了最少的部件来测试

02image-571aee2656a265098ea7fc38b07e7601

图2 装上超大散热器后的电脑,看起来很恐怖

03image-6a7633706d3d21d96db066a15bc0260b

图3 从上面看下去,硬盘已经装进去了

启动电脑

安装最新版本的Ubuntu会让你的生活变得容易得多,因为新版本支持几乎所有的深度学习的软件。你可以把一个镜像存到一个USB盘里,然后按照它的简单的一步一步指导来安装。在上世纪90年代,我需要和各种驱动程序去斗争来安装Linux桌面,不过现在的安装过程已经变得超级容易。

新的Ubuntu操作系统也非常的棒。我现在经常使用我自己组装的这台电脑。拥有大内存、相对快速的CPU和轻量级的操作系统,它是我家里最快的计算机。

安装CUDAOpenCVTensorFlow

为了能用你的超酷的深度学习机器,你需要先安装CUDA和CudNN。最新的CUDA版本是8.0,CudNN是5.1。从抽象的角度看,CUDA是一个API和编译器,能让其他的程序为通用应用使用GPU。而CudNN则是一个库,主要设计来让神经网络在GPU上跑的更快。你需要从英伟达的官网NVIDIA website上下载这两个软件。

OpenCV 是一个开源的库,很多应用使用它来做图像处理。现在最新的版本3.1和最新的CUDA版本不兼容。你可以通过设置CUDA_GENERATION标志成Kepler、Maxwell或是Pascal(取决于你买的GPU型号)来让他们兼容。下面是下载OpenCV和安装设置它的命令序列:

git clone https://github.com/opencv/opencv.git \

&& cd opencv \

&& mkdir build \

&& cd build \

&& cmake .. \

&& make -j3 \

&& make install

最后,安装TensorFlow变成了这些天里最简单的工作。只要按照这个网站上的说明操作就行了。

想看看GPU的支持是不是成功,你可以运行这个TensorFlow的测试程序,或是执行下面的命令:

python -m tensorflow.models.image.mnist.convolutional

这应该能开始运行一个模型而没有报错。

有趣的部分来了!

现在你已经花了近1000美元和无数的时间来装机和装软件,是时候回收你的投资啦!GPU让程序运行的非常快,所有你需要一些能利用这个速度的应用。幸运的是有很多有趣的事情可以干。

实时识别附近的物品

装一个便宜的USB摄像头或是带有摄像头的树莓派板子在你家外面。你就能用我在之前的100美元的TensorFlow机器人里所介绍的RPi摄像头模块来很容易地制作一个树莓派派视频流应用。

YOLO

YOLO包能完成拍摄同时的实时物体识别。用Macbook的话,我发现物体识别需要3到4秒。但用GPU的话,我能得到一个实时的结果,而且准确率是非常高。

按这个YOLO_tensorflow 项目的介绍,可以很容易地使用YOLO模块运行在TensorFlow上。也可以安装“Darknet”,这是一个不同的深度学习框架。YOLO最初就是设计来用于它的。

git clone https://github.com/pjreddie/darknet

cd darknet

make

Darknet安装完后,你可以用下面的命令来让它处理图像:

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

因为树莓派摄像头仅仅只是把文件放到一个Web服务器上,你可以直接让Darknet去连接那个文件来做实时流里的物体识别。下面的视频是我在车库里对外面发生的堵车进行的物体识别:

给你的树莓派机器人一个增强的大脑

我之前写的这个《只要100美元的TensorFlow机器人》里,我发现可以在只值30美元的硬件上运行和应用深度学习。不幸的是,最让我失望的事情是机器人要花好几秒才能完成物体识别,因此让机器人做实时的决策就不行了。现在如果机器人用这个新的GPU机器,就不仅仅能做实时物体识别,还能每秒处理大概12-20帧的图像。

如果你依据我在GitHub上的这个说明,你就能攒一个机器人出来,让它从摄像头里获取容易处理的视频流。

我的朋友Shawn Lewis教会了我这篇文章里所需的大部分技能,所以我把我的两个树莓派机器人拿到了他的办公室。他和其他很多机器人专家有一个梦想,就是让机器人能给他们拿啤酒。下面是这些机器人为地上的啤酒战斗的视频。

如果你仔细看视频开始部分里的电脑显示器画面,就会发现Shawn的这个电脑实际上是用它的GeForce 980显卡在为两个机器人拍摄的视频做实时的物体识别。他宣称他的这块显卡可以同时处理四路视频输入而不会内存溢出。

搞点艺术创作

你可以用神经网络干的好玩的事情之一就是复制谷歌的Deep Dream干的事情。尽管你可以不用GPU也能完成,但会花很长的时间。本质上讲,这个事就是修改输入的图片来找到神经元里得到最大反馈的图片,因此这个任务有非常大的计算量。有很多种方式来完成修改,结果一般都非常的诡异和酷。

一个直接能用的很好的教程就是谷歌公开的这个Deep Dream 代码

你需要安装Jupyter notebook服务器(你总是需要的!)和Caffe

接着按照谷歌的教程把你的朋友的脸插进去。使用这个新的机器,新的图片只用几分钟就出来了,而不是好几小时。修改出来的图片是很好玩的。

04image-3974f22733a2b61d252983b62a7c5a78

图4 我的邻居Chris Van Dyke和Shruti Gandhi站在我的车库里,照片被我的Deep Dream程序给涂鸦了一把

05image-7539c3c3075b467a111e21f5889ea8b8

图5 我朋友Barney Pell和他的国际象棋生日蛋糕

06image-1d43aa96fd40a6b4c6f8bf7b12a27fd4

图6 这是我运行Deep Dream程序的机器自己的图片。看起来像是满屏都是狗(可能是因为训练这个模型的ImageNet数据里面都是狗的图片。ImageNet数据集里面包括了120多种不同的狗)

如果你想搞更疯狂的事,这里是基于Deep Dream由TensorFlow实现的Neural Style。出来的效果更神奇,你可以在这个脑洞大开的博文里看到部分的成果。

总结

你不需要花好几千美元来买一个比笔记本快的深度学习机器。自己攒一台并让它能运转正常是很有意思的经历,而且这个电脑是可升级的。现在我已经把显卡换成了一个具有相同架构的Titan X,这样所有的程序都不用再次编译。

总体来说,赚了。这个机器和亚马逊的每小时1美元的P2实例跑的一样快。P2实例用的是K80的显卡,显存大一点不过是旧的架构。我主要用这个机器做模型训练,这也是这么做的主要目的。嗯,这可能成为下一篇博文的题目。

Lukas Biewald

Lukas Biewald是CrowdFlower的创始人兼CEO。CrowdFlower始于2009年,是一个数据增强的平台,可以帮助企业获得随需的人力来收集、产生训练数据,以及参与人-机器学习循环的工作。 在从斯坦福大学拿到数学学士和计算机科学硕士学位后,Lukas领导了雅虎日本的搜索相关团队。随后他去了Powerset,作为一个资深数据科学家进行工作。2008年Powerset被微软收购。Lukas还被《公司》杂志评选为30位30岁以下的著名人士。 Lukas还是一位专家级的围棋选手。

Brain. (source: Pixabay).