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

2023-11-10 10:30

本文主要是介绍秘籍:如何用廉价硬件玩转深度学习,成本不到1000美元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来自AI新媒体量子位(QbitAI)

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

答:在树莓派上运行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美元。

组装

装硬件

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

装系统

安装最新版的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)。然后把朋友或者什么人的图片输入进去,只需要等待几分钟,一个艺术图片就出现了~

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

结论

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

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

作者Lukas Biewald,是CrowdFlower创始人。量子位编译整理。


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

这篇关于秘籍:如何用廉价硬件玩转深度学习,成本不到1000美元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382061

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security