是的,你可以在 价值$39 的树莓派上跑 TensorFlow。而且,你可以在 带有 GPU 引擎的 EC2 节点上每小时只花 1 美元跑 TensorFlow。这些可选方案可能比构建你自己的计算机更具实用感。但如果你像我一样,你会渴望构建你自己的高速深度学习机器。
好吧,一千美元花在一个 DIY 项目上是太多了,但一旦你把机器搞起来,你可以建立数百个深度学习应用程序,从增强的机器人大脑到艺术项目(至少,我是如此为自己辩解的)。至少,这台机器将在除了功耗之外的每个指标上轻松超过 $2,800 的 Macbook Pro,并且因为它容易升级,在接下来的几年里也会保持领先。
自从 80 年代以来,我还没有组建一台电脑,因为我非常害怕在一些我可能无法构建的东西(而且也可能并不会真正使用)上放几百美元。但我在这里告诉你,这样做肯定没问题!此外,它真的很有趣,你会得到一个伟大的通用计算机,会做常见的推理和学习而且在这方面比你的笔记本电脑快 20 倍。
主板
主板有不同的大小。由于我不想使用多 GPU,那种被称为 mini-ITX 的***和最小标准尺寸主板对这种项目就挺好了。我的***要求是有一个 PCIe 插槽来插 GPU 和有两个 DDR4 插槽来插 RAM,我花$125 在 Amazon 上买了一个华硕 ASUS Mini ITX DDR4 LGA 1151 B150I PRO GAMING/WIFI/AURA 主板。它配备了一个 WiFi 天线,这实际上在我的地下室里超级有用。
机箱
机箱并不重要,但它们相当便宜,而且由于这个 DIY 电脑市场里主要都是玩家,因此机箱有各种有趣的形状和颜色。机箱尺寸应该与主板相匹配,因此机箱名字中也应有 mini-ITX 字样。我在 Amazon 上花$50 买了一个 Thermaltake Core V1 Mini ITX Cube 机箱。
RAM
我不能相信能拿到这么便宜的 RAM!你需要购买 DDR4 RAM 来匹配你的主板(这个最容易在网上找到),价格都是一样的。我花$129 买了两个 8GB of Corsair Vengeance。
我又额外花了 $5,因为亚马逊评论说,「对于那些只是不能得到足够的 LED 塞满他们系统的人,这些是***的选择。」如果你在你的地下室组建一台电脑,同时你又不接受你内心的反传统(Burning Man)/青少年审美,你会花费大量时间却很难找到组件。
CPU
我在网上看过 CPU 速度比较测试,我想如果 CPU 速度较慢我也没问题,因为我做的很少的事情是受限于 CPU 的(除了训练神经网络,而这个我会使用 GPU)。但是我不能让自己建造一台装有第三代 CPU 的计算机。我花 $214 用了 Intel I5-6600。
几乎任何你可以在亚马逊找到的 CPU 都还可以。我没有多花$20 买 I5-6600K,两者几乎差不多就是能超频,因为对于我来说,为了 10% 的增速而牺牲可靠性,简直就是疯了。我也确实承认,开始习惯建造自己机器的想法时,也开始后悔当初这个决定了。所以谁又能知道呢?构建计算机可以改变你的人生观。如果有了超频芯片,可能遗憾会更少吧。另一方面,也许***还是保护自己不受自己的影响,把选项从脑子里去掉吧。
硬盘
我也不能相信能买到这么便宜的硬盘驱动器。我$ 50 买了一个 1TB SATA 驱动器。固态驱动器能更快,但是也更贵,并且通常,我的深度学习程序没有磁盘 I / O 限制,因为它们通常将批数据加载到 RAM 中,然后对数据处理很长时间。如果你想用计算机进行繁重的文件传输工作或者只是想确保它在所有程序运行上都明显快过你朋友的 Macbook,那么,我建议你买个类似 三星 850 EVO 250GB 2.5-Inch SATA III Internal SSD 的固态驱动器,$ 98 容量 250Gb。
所有这些驱动器会让你意识到,苹果公司给你的 Macbook Pro 扩容 250G 加收 $ 200 简直就是在敲诈。
显卡/GPU
选哪个显卡是最重要的和最棘手的问题。对于几乎所有的机器学习应用程序,你想要一个 NVIDIA 卡,因为只有 NVIDIA 有你必需的 CUDA 框架和 CuDNN 库,这是包括 TensorFlow 在内的所有机器学习框架所依赖的。
我并非一个 GPU 专家,我发现这里面的术语非常容易让人糊涂,但这对选择一款 GPU 来说是非常基本的知识。
也许对深度学习来说最需要重要关注的属性是卡上可用的 RAM 大小。如果 TensorFlow 不能将模型和当前批次的训练数据放入 GPU 的 RAM 中,则会将故障转移到 CPU——这会使 GPU 毫无存在的意义。
另一个需要关键考虑的是显卡的架构。NVIDIA 推出的几个***的架构依次被称为「Kepler」、「Maxwell」和「Pascal」。架构之间的差异对速度的影响非常大;例如根据 该基准 (https://github.com/jcjohnson/cnn-benchmarks), Pascal Titan X 是 Maxwell Titan X 速度的两倍。
大多数机器学习的文章使用 TITAN X 卡,它很棒,但成本至少$ 1,000,即使是一个较旧的版本。大多数进行机器学习而没有预算限制的人会使用 NVIDIA GTX 900 系列(Maxwell)或 NVIDIA GTX 1000 系列(Pascal)。
要了解显卡的架构,您可以看看 NVIDIA 令人吃惊的混乱命名规则:9XX 卡使用 Maxwell 架构,而 10XX 卡使用 Pascal 架构。但是由于更高的时钟速度和更多的 RAM,980 显卡仍然可能明显快于 1060 显卡。
你将不得不基于所能获得的 GPU 的体系结构为 NVIDIA 卡打上不同的标签。但最重要的却是任何 9XX 或 10XX 显卡将会几个数量级地快于你的笔记本电脑。所以不要被选项难倒;如果你没有使用过 GPU,你会发现他们都会远比你现在用的要好。
我选了标价为 195 美元的 GeForce GTX 1060 3G,它运行模型的速度比我的 MacBook 快 20 倍,但偶尔会因为跑某些应用而耗尽内存,所以我可能应该再加 60 美元买 GeForce GTX 1060 6GB。
电源
我要谈的是标价 85 美元的 650W power supply。这个产品很烦人而且有电源问题的时候很难调试,看来似乎不应该在这上面省钱。另一方面,我从没见过我的机器在峰值负载下超过 250W。
散热
我记得我工作的***家创业公司把服务器放在他们的壁橱里,风扇的声音非常吵,甚至透过壁橱的门都觉得吵。这样的日子似乎已经过去很久了。尽管如此,650W 的电源得以让你将几乎 10 倍的能量充入你的笔记本电脑,而这种能量必须从某个地方散发出来。也许并不是必需的,但我仍花$ 35 买了一个非常棒的 Cooler Master Hyper 212 EVO 散热器。它使 CPU 保持凉爽,同时运行超静音。
概况
要实际使用这些东西,你还需要一个显示器、鼠标和键盘。这些事情都很容易(我手头就有)。到目前为止,总数是 883 美元,所以距花 1000 美元左右组建一个称心的机器还有留有许多空间。
将计算机组装起来
当所有快递包裹开始陆续到货时,我相当兴奋,同时我发现组装计算机只是貌似容易。按各机器部件附带的说明书,我大约花了一个小时组装完。但***电脑打不开,我不得不更换主板,这让人沮丧,但结果还 OK。
差不多第二次,我先在一个纸板箱上把所有的东西组合在一起检查了一下,机器运行了。
基本上,如果你把一切东西都插入到看起来可能适合的地方,一切似乎都能运行良好。
图 1. 放在桌上的半组装电脑,已装上可于测试的最少部件。
图 2. 连上巨大散热器的电脑看起来更强大
图 3. 这里插上硬盘驱动器后的俯视图
引导机器
安装***版本的 Ubuntu 能让你的生活更轻松,因为 Ubuntu 支持几乎所有你将安装的深度学习软件。你可将图像存在 U 盘上,并 按这个简单的分步指南进行安装。因为我在 90 年代与 drivers 斗争的日子,linux 桌面安装过程已经改变了很多——现在变得难以想象的流畅。
新的 Ubuntu 桌面也很棒。自从建立它以来,我经常使用这台机器作为个人电脑。有了大量 RAM,相当快的 CPU 和轻量级操作系统,它已经是迄今为止我家最快的机器了。
安装 CUDA,OpenCV 和 TensorFlow
为了使用你的全新深度学习机,你首先需要安装 CUDA 和 CudNN;***版本的 CUDA 是 8.0,***版本的 CudNN 是 5.1。从高层次看:CUDA 是一个 API 及编译器,它得以使其他程序将 GPU 用于通用应用程序,CudNN 是一个旨在使神经网络在 GPU 上运行得更快的库。你需要从 NVIDIA 网站下载该软件。
OpenCV 是大多数应用程序使用的图像处理开源库。现在,***版本的 OpenCV(3.1)不适用于 EC2 上***版本的 CUDA(8.0)。你可以通过将 CUDA_GENERATION 标志显式设置为 Kepler,Maxwell 或 Pascal 来使其工作,这取决于你购买的 GPU 的类型。这里是下载 OpenCV 并设置它运行的命令序列:
***,近期证明 TensorFlow 是很容易的——只需在该网站查看安装指南。
要查看是否启用了 GPU 支持,可以运行 TensorFlow 的测试程序,也可以执行命令行:
应该开始训练一个没有错误的模型。
有趣的部分!
现在你已经支付了超过 1000 美元,并花费了无数小时构建和安装软件,是时候来证明你的投资了!GPU 使得运行速度明显加快,因此你需要能发挥速度优势的应用程序。幸运的是,你可以做许多有趣的事。
对邻居的实时对象识别
在你家房子外面安装一个便宜的 USB 相机或带相机的树莓派(Raspberry Pi)。你可以很容易地使用 RPi 相机模块(RPi Camera Module)制作一个 Pi 流视频,我曾在上一篇关于 $ 100 TensorFlow 机器人 (https://www.oreilly.com/learning/how-to-build-a-robot-that-sees-with-100-and-tensorflow) 的文章中谈到。
YOLO
YOLO 包将对进入的数据进行实时对象识别。我发现,使用 Macbook 进行有边界框的对象识别需要 3-4 秒,但是使用 GPU 我能实时进行对象识别,且准确度相当不错。
通过 YOLO_tensorflow (https://github.com/gliese581gg/YOLO_tensorflow) 项目使用 YOLO 模型并将其在 TensorFlow 上运行是很容易的。安装 Darknet 也很有趣,这是一个不同的深度学习框架,YOLO 最初即被设计与其一同运作:
一旦安装 Darkne,你能通过下面的方式运行它处理图片:
由于 Pi 相机只是将文件放在一个 Web 服务器上,你可以直接链接到该文件,并在流上进行实时对象识别。这是我在我的车库里对外面一个交通拥堵做出的对象识别:
给你的树莓派机器人一个增强版大脑
我在写前一篇 关于一台 $100 TensorFlow 机器人时发现,机器人可以在一个 30 美元的硬件上做深度学习是令人难以置信的。不幸的是,最令人失望的是机器人得用好几秒来做对象识别,因此,实时决策的工作效果并不好。但是,如果你的机器人用的是你的新 GPU 机器,你可做的就不仅是实时图像识别了,而且计算边界框的速度可达每秒 12-20 帧!
如果你按照我在 GitHub 说明 (http://github.com/lukas/robot),你可以构建一个机器人,以一种容易解析和快速的格式流放(stream)从摄像头中看到的一切。
我的朋友 Shawn Lewis 教给我了这篇文章中提到的每件事,所以我将我的两个树莓派机器人带到我朋友肖恩的办公室。他的梦想,据我所知也是许多机器人学家的梦想,是造一个机器人给他倒啤酒。这里是机器人和地上的瓶子战斗的情况:
如果你看着他的电脑,实际上,机器是在他的 GeForce 980 上实时对输入中的两个机器人图像进行对象识别。他声称他可以在内存耗尽之前一次处理四个视频输入。
创作艺术
使用神经网络可以做到的最有趣的事情之一就是复制 Google 的 Deep Dream 工作,即使没有 GPU,这也是可能的,但会花费***长的时间。基本上,这涉及修改输入图像以找到在神经元中驱动***响应的图像,因此它需要大量的计算能力。有很多不同的方法来做到这一点,而且输出通常是令人难以置信的奇怪和酷。
现成的一个很好的教程是 Google 发布的 Deep Dream 代码:https://github.com/google/deepdream/blob/master/dream.ipynb。
你需要安装 Jupyter 笔记本服务器 (http://jupyter.readthedocs.io/en/latest/install.html)(你不管怎么样都需要!)和 Caffe。
然后仔细阅读 Google 的教程。通过使用你的新机器,这些图像需要几分钟而不是几个小时就可以生成,这将是非常有趣的探索。
图 4. 我的邻居 Chris Van Dyke 和 Shruti Gandhi (https://twitter.com/atShruti) 在我的车库里听我解释 Deep Dream 实现的时候。
图 5. 我的朋友 Barney Pell 与他的国际象棋生日蛋糕
图 6. 这里是我的机器在 Deep Dream 它自己的一幅图片上运行!它看到到处都是狗(可能是因为模型的训练数据 ImageNet 全是狗,因为创作者包含了 120 个单独品种的示例图像)。
如果你想要更疯一点,这有一个通过 TensorFlow 实现的神经风格(Neural Style)(https://github.com/anishathalye/neural-style),基于 Deep Dream,可以做更多的惊人的事情,其中一些在这个令人兴奋的博客文章中 (http://genekogan.com/works/style-transfer/) 概述。
结论
你不需要花费数千美元来获得一个比你的笔记本电脑快得多的深度学习盒子。而且构建计算机并让一切运行它是一个很棒的学习经验,况且你还得到一台可升级的机器。我现在已经换成了一个具有相同架构的 Titan X 显卡,并且一切运行良好不用重新编译。
总而言之,这是一个胜利:这台机器运行速度与使用 K80 GPU 的 1 美元/小时的 Amazon P2 实例大致相同,具有更多的内存和较旧的架构。我大部分时候用它来训练模型,这也是这种方法真正炫的地方——也许这是一个后续博客的话题了。
原文:https://www.oreilly.com/learning/build-a-super-fast-deep-learning-machine-for-under-1000
【本文是51CTO专栏机构机器之心的原创译文,微信公众号“机器之心( id: almosthuman2014)”】