秘籍:如何用廉价硬件玩转深度学习,成本不到1000美元

作者Lukas Biewald,是CrowdFlower创始人。

量子位编译整理。

问:搭建一个深度学习系统拢共要花多少钱?

答:在树莓派上运行TensorFlow成本是39美元;在GPU驱动的亚马逊EC2节点上运行TensorFlow的成本是1美元,每小时。这些都是可行的方案。

当然要想玩得过瘾,可以自己搭建一个快速的深度学习系统,成本不到1000美元。

这也不是小数目,但这么做的好处是,一旦你有了自己的机器设备,可以运行数百个深度学习应用程序,比方增强的机器人大脑,或者搞点艺术创作。这套系统至少比Macbook Pro要强(除了功耗),而且可以实时升级一直用上好多年。

搭建这么一套设备非常有意思,而且做推理和学习比笔记本至少快20倍。

准备好了么?咱们先从需要采购的清单说起。

硬件清单

主板

主板的规格挺多,我不想搞多GPU系统,所以最便宜、最小的mini-ITX标准主板就可以了。最低要求是得有一个PCIe插槽,用以连接GPU,两个DDR4的内存插槽。最后我选的是华硕Mini ITX DDR4 LGA 1151 B150I PRO GAMING/WIFI/AURA主板,在亚马逊上售价125美元。这主板带WiFi天线,在我的地下室超级有用。

机箱

机箱无所谓,而且很便宜。DIY市场主要是游戏玩家,所以机箱往往五颜六色各种形状。为了匹配主板,我在亚马逊上花50美元买了这个:Tt Core V1 Mini ITX Cube。

内存

没想到内存这么便宜了……咱么要买DDR4内存查到主板上,价格都差不多,我花129美元买了两条8GB容量的海盗船复仇者。

我还多花了5美元,搞了带LED灯光的内存条。嗯。

CPU

我在网上看了一下CPU评测,感觉慢一点的CPU也够用,因为我要做的事情很少受制于CPU,除了训练神经网络,其他都用GPU。但是CPU也不能太差吧,所以最后选了英特尔i5-6600,花了214美元。

硬盘

硬盘也蛮便宜了。我花50美元买了一个1TB容量的SATA硬盘。没选SSD固态硬盘,是因为比较贵也用不着,深度学习的程序不受硬盘I/O接口限制,因为数据会批量加载到内存里然后处理很长时间。

显卡/GPU

怎么选显卡是最棘手的问题,玩深度学习,肯定得选NVIDIA,因为N记有CUDA框架和CuDNN库,所有的机器学习框架,包括TensorFlow,都有赖于它们。

然后,最重要的是属性可能是显存,如果TensorFlow不能把模型和当前批次的数据装入GPU的显存,就会错误的送到CPU里去。

另一个关键因素是显卡的架构。NVIDIA最新的几个架构,按照次序是:Kepler、Maxwell、Pascal。架构之间的差异影响着速度,Pascal Titan X的速度是Maxwell Titan X的两倍。

大多数机器学习的论文都是基于TITAN X显卡,但是这种显卡最便宜也得1000美元。大多数人预算都有限,所以最后用了NVIDIA GTX 900 series (Maxwell)或者NVIDIA GTX 1000 series (Pascal)。我最后选的GeForce GTX 1060 3GB,195美元。

电源

我花85美元买了一个650W的电源,电源还是买个放心的把。不过我这套系统,峰值功耗也没有超过250W。

散热片

我花35美元买了一个Cooler Master Hyper 212 EVO,用来让CPU冷静一下。

小结

除了上述种种,还得买显示器、键盘鼠标什么的。所以,最后总共花费883美元。

组装

装硬件

各种快递到齐之后,我开始装机,然而这里面坑还是挺多……搞了一个小时装好,却开不了机,不得已又给拆了。第二次我索性先把所有东西放在一个纸箱上。最后,搞定。

装系统

安装最新版的Ubuntu吧(下载地址:ubuntu.com),可以支持几乎所有的深度学习软件。可以把镜像拷在一个U盘上,然后参考这个简单的教程安装。Ubuntu现在挺好用的。(图解:6步安装Ubuntu,地址:ubuntu.com/download/desktop/create-a-usb-stick-on-ubuntu)

安装CUDA、OpenCV和TensorFlow

为了使用这台全新的设备进行深度学习,首先得安装CUDA和CudNN。目前最新的版本是CUDA 8.0,CudNN 5.1。CUDA是一个API,也是一个编译器,允许其他程序将CPU用于通用应用程序,CudNN是一个旨在使神经网络在GPU上运行更快的库。

(CUDA和CudNN的下载地址:developer.nvidia.com/cuda-toolkit)

OpenCV是大多数应用程序使用的图像处理开源库。最新版本的OpenCV 3.1不适用于EC2上最新版本的CUDA 8.0。我们可以通过把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是这里面最容易安装的。(这里是安装指南的传送门:tensorflow.org/get_started/os_setup)。

想检查是否启用了GPU支持,可以运营TensorFlow的测试程序,也可以用如下命令:

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

好玩的部分来了

截止到目前,已经花了大概1000美元,也花了无数个小时安装软件。现在是时候证明这一切物有所值了!有好多好玩的事情可以做~

对邻居进行实时对象识别

在房子外面按一个便宜USB摄像头或者带摄像头的树莓派,利用RPi摄像头模块(传送门:elinux.org/Rpi_Camera_Module),可以很容易的生成一个视频流。

YOLO

YOLO软件包也能对输入的图像进行实时识别。以前用Macbook,识别响应大概3-4秒,使用GPU,可以很准确的实时运行。

想用YOLO模型很简单,从github下载YOLO_tensorflow项目(地址:github.com/gliese581gg/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

由于Pi相机只是将文件放在网络服务器上,你可以直接链接到这个文件,并在流上进行实时图像识别。下面这段视频是我做的测试:

给树莓派一个更强的大脑

我之前发过一篇100美元做TensorFlow机器人的文章,机器人可以在一个30美元的硬件上做深度学习。不过,在那个环境下机器人要耗时数秒才能进行对象识别,而使用这次全新搭建的系统,不仅可以实时进行图像识别,还能在每秒12-20帧的速度上计算边框。

按照我在GitHub上的说明,你也可以搭建一个机器人,这个机器人通过摄像头看到的一切,都可以简单、快速的解析。

我和我的朋友各自搭建了一个树莓派机器人,然后进行了一场啤酒瓶之战。当时他的电脑上的GeForce 980对两个机器人进行实时馈送。

艺术创作!

搭建神经网络最好玩的事情之一,就是复制Google旗下Deep Dream的工作,不过如果没有GPU的加持这个工作永远也干不完。基本上,这涉及修改输入图像以驱动神经网络中最高响应,这需要很做的工作。实现这一点有很多变体,结果也往往非常奇怪。

对我而言,Google放出的Deep Dream代码是史上最棒的教程。(地址:github.com/google/deepdream/blob/master/dream.ipynb)

这得需要安装Jupyter笔记本服务器(传送门:jupyter.readthedocs.io/en/latest/install.html)和Caffe(又一个传送门:caffe.berkeleyvision.org/installation.html)。然后把朋友或者什么人的图片输入进去,只需要等待几分钟,一个艺术图片就出现了~

如果你想更疯狂一点,这里还有一个神经风格的TensorFlow实现(地址:https://github.com/anishathalye/neural-style),也是基于Deep Dream的工作。这个可以产生更多惊人的图片。

结论

咱们不需要花费数千美元,来搞一个比笔记本快很多的深度学习系统。动手DIY一套深度学习设备也是很宝贵的经验,而且DIY的东西还能升级。其实,我现在把显卡换成Titan X了,所有运行的程序并不需要重新编译。

总之这个方法还不错,机器的运行速度与用使用K80 GPU的亚马逊P2实例大致相同,后者的价格是1美元/小时。

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2017-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI派

还没准备好数据呢,为什么要着急用算法呢

开始之前,通知下我的读者,随着订阅读者越来越多,为了对读者们负责,有以下几件事情需要告知下:

1936
来自专栏AI研习社

博客 | Github开源人体姿态识别项目OpenPose中文文档

人体姿态识别与估计的应用场景:抖音尬舞机、体育动作教学、3D健身教练、3D试衣、绘画辅助、游戏人物动作采集。

6304
来自专栏人工智能头条

聚类分析算法在Netflix服务器异常自动侦测中的应用

1462
来自专栏腾讯大讲堂的专栏

AI异常计算点的监控调度

1697
来自专栏AI科技评论

业界 | 腾讯优图首个开源项目 ncnn 加入 ONNX

AI 科技评论按:腾讯优图首个 AI 开源项目 ncnn 目前已正式加入 ONNX,现已支持将 ONNX 文件转换为 ncnn 模型。本事件在雷锋网旗下学术频道...

991
来自专栏量子位

如何用Python从海量文本抽取主题?

作者:王树义 量子位 已获授权编辑发布 你在工作、学习中是否曾因信息过载叫苦不迭?有一种方法能够替你读海量文章,并将不同的主题和对应的关键词抽取出来,让你谈笑间...

5057
来自专栏新智元

留住老照片,谷歌用AI帮纽约时报讲了500万个故事

纸质老照片记录下了当时的珍贵时刻,其中的历史意义也更为重要,但纸质极容易损坏,人类该怎么保存它们,让它们恒久远永流传?

1114
来自专栏大数据挖掘DT机器学习

Microsoft 时序算法——结果预算+下期彩票预测篇)

前言 本篇我们将总结的算法为Microsoft时序算法的结果预测值,是上一篇文章Microsoft时序算法的一个总结,上一篇我们已经基于微软案例数据库的销售历史...

6276
来自专栏ATYUN订阅号

谷歌在云平台上提供包含5000万涂鸦的数据集

你可以通过涂鸦的方式来表现一个人:这是由谷歌创意实验室于2016年11月推出的一项互动式网络实验Quick Draw背后的想法。它招募了网友来用画图进行描述说明...

891
来自专栏AI科技评论

学界 | 继佩奇和布林的开山论文之后,谷歌团队又有哪篇经典入了WWW大会的法眼?

2017 年的The Seoul Test-of-Time Award 颁给了《Graph Structure in the Web》,这可谓是实至名归。 AI...

2715

扫码关注云+社区