是的,你可以在一个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的。
图1 放在桌子上的半成品电脑,只连接了最少的部件来测试
图2 装上超大散热器后的电脑,看起来很恐怖
图3 从上面看下去,硬盘已经装进去了
启动电脑
安装***版本的Ubuntu会让你的生活变得容易得多,因为新版本支持几乎所有的深度学习的软件。你可以把一个镜像存到一个USB盘里,然后按照它的简单的一步一步指导来安装。在上世纪90年代,我需要和各种驱动程序去斗争来安装Linux桌面,不过现在的安装过程已经变得超级容易。
新的Ubuntu操作系统也非常的棒。我现在经常使用我自己组装的这台电脑。拥有大内存、相对快速的CPU和轻量级的操作系统,它是我家里最快的计算机。
安装CUDA、OpenCV
和TensorFlow
为了能用你的超酷的深度学习机器, 你需要先安装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。
接着按照谷歌的教程把你的朋友的脸插进去。使用这个新的机器,新的图片只用几分钟就出来了,而不是好几小时。修改出来的图片是很好玩的。
图4 我的邻居Chris Van Dyke和Shruti Gandhi站在我的车库里,照片被我的Deep Dream程序给涂鸦了一把
图5 我朋友Barney Pell和他的国际象棋生日蛋糕
图6 这是我运行Deep Dream程序的机器自己的图片。看起来像是满屏都是狗(可能是因为训练这个模型的ImageNet数据里面都是狗的图片。ImageNet数据集里面包括了120多种不同的狗)
如果你想搞更疯狂的事,这里是基于Deep Dream由TensorFlow实现的Neural Style。出来的效果更神奇,你可以在这个脑洞大开的博文里看到部分的成果。