手把手教你搭建$1000以下的超級(jí)深度學(xué)習(xí)機(jī)器
是的,你可以在 價(jià)值$39 的樹(shù)莓派上跑 TensorFlow。而且,你可以在 帶有 GPU 引擎的 EC2 節(jié)點(diǎn)上每小時(shí)只花 1 美元跑 TensorFlow。這些可選方案可能比構(gòu)建你自己的計(jì)算機(jī)更具實(shí)用感。但如果你像我一樣,你會(huì)渴望構(gòu)建你自己的高速深度學(xué)習(xí)機(jī)器。
好吧,一千美元花在一個(gè) DIY 項(xiàng)目上是太多了,但一旦你把機(jī)器搞起來(lái),你可以建立數(shù)百個(gè)深度學(xué)習(xí)應(yīng)用程序,從增強(qiáng)的機(jī)器人大腦到藝術(shù)項(xiàng)目(至少,我是如此為自己辯解的)。至少,這臺(tái)機(jī)器將在除了功耗之外的每個(gè)指標(biāo)上輕松超過(guò) $2,800 的 Macbook Pro,并且因?yàn)樗菀咨?jí),在接下來(lái)的幾年里也會(huì)保持領(lǐng)先。
自從 80 年代以來(lái),我還沒(méi)有組建一臺(tái)電腦,因?yàn)槲曳浅:ε略谝恍┪铱赡軣o(wú)法構(gòu)建的東西(而且也可能并不會(huì)真正使用)上放幾百美元。但我在這里告訴你,這樣做肯定沒(méi)問(wèn)題!此外,它真的很有趣,你會(huì)得到一個(gè)偉大的通用計(jì)算機(jī),會(huì)做常見(jiàn)的推理和學(xué)習(xí)而且在這方面比你的筆記本電腦快 20 倍。
主板
主板有不同的大小。由于我不想使用多 GPU,那種被稱(chēng)為 mini-ITX 的***和最小標(biāo)準(zhǔn)尺寸主板對(duì)這種項(xiàng)目就挺好了。我的***要求是有一個(gè) PCIe 插槽來(lái)插 GPU 和有兩個(gè) DDR4 插槽來(lái)插 RAM,我花$125 在 Amazon 上買(mǎi)了一個(gè)華碩 ASUS Mini ITX DDR4 LGA 1151 B150I PRO GAMING/WIFI/AURA 主板。它配備了一個(gè) WiFi 天線,這實(shí)際上在我的地下室里超級(jí)有用。
機(jī)箱
機(jī)箱并不重要,但它們相當(dāng)便宜,而且由于這個(gè) DIY 電腦市場(chǎng)里主要都是玩家,因此機(jī)箱有各種有趣的形狀和顏色。機(jī)箱尺寸應(yīng)該與主板相匹配,因此機(jī)箱名字中也應(yīng)有 mini-ITX 字樣。我在 Amazon 上花$50 買(mǎi)了一個(gè) Thermaltake Core V1 Mini ITX Cube 機(jī)箱。
RAM
我不能相信能拿到這么便宜的 RAM!你需要購(gòu)買(mǎi) DDR4 RAM 來(lái)匹配你的主板(這個(gè)最容易在網(wǎng)上找到),價(jià)格都是一樣的。我花$129 買(mǎi)了兩個(gè) 8GB of Corsair Vengeance。
我又額外花了 $5,因?yàn)閬嗰R遜評(píng)論說(shuō),「對(duì)于那些只是不能得到足夠的 LED 塞滿他們系統(tǒng)的人,這些是***的選擇。」如果你在你的地下室組建一臺(tái)電腦,同時(shí)你又不接受你內(nèi)心的反傳統(tǒng)(Burning Man)/青少年審美,你會(huì)花費(fèi)大量時(shí)間卻很難找到組件。
CPU
我在網(wǎng)上看過(guò) CPU 速度比較測(cè)試,我想如果 CPU 速度較慢我也沒(méi)問(wèn)題,因?yàn)槲易龅暮苌俚氖虑槭鞘芟抻?CPU 的(除了訓(xùn)練神經(jīng)網(wǎng)絡(luò),而這個(gè)我會(huì)使用 GPU)。但是我不能讓自己建造一臺(tái)裝有第三代 CPU 的計(jì)算機(jī)。我花 $214 用了 Intel I5-6600。
幾乎任何你可以在亞馬遜找到的 CPU 都還可以。我沒(méi)有多花$20 買(mǎi) I5-6600K,兩者幾乎差不多就是能超頻,因?yàn)閷?duì)于我來(lái)說(shuō),為了 10% 的增速而犧牲可靠性,簡(jiǎn)直就是瘋了。我也確實(shí)承認(rèn),開(kāi)始習(xí)慣建造自己機(jī)器的想法時(shí),也開(kāi)始后悔當(dāng)初這個(gè)決定了。所以誰(shuí)又能知道呢?構(gòu)建計(jì)算機(jī)可以改變你的人生觀。如果有了超頻芯片,可能遺憾會(huì)更少吧。另一方面,也許***還是保護(hù)自己不受自己的影響,把選項(xiàng)從腦子里去掉吧。
硬盤(pán)
我也不能相信能買(mǎi)到這么便宜的硬盤(pán)驅(qū)動(dòng)器。我$ 50 買(mǎi)了一個(gè) 1TB SATA 驅(qū)動(dòng)器。固態(tài)驅(qū)動(dòng)器能更快,但是也更貴,并且通常,我的深度學(xué)習(xí)程序沒(méi)有磁盤(pán) I / O 限制,因?yàn)樗鼈兺ǔ⑴鷶?shù)據(jù)加載到 RAM 中,然后對(duì)數(shù)據(jù)處理很長(zhǎng)時(shí)間。如果你想用計(jì)算機(jī)進(jìn)行繁重的文件傳輸工作或者只是想確保它在所有程序運(yùn)行上都明顯快過(guò)你朋友的 Macbook,那么,我建議你買(mǎi)個(gè)類(lèi)似 三星 850 EVO 250GB 2.5-Inch SATA III Internal SSD 的固態(tài)驅(qū)動(dòng)器,$ 98 容量 250Gb。
所有這些驅(qū)動(dòng)器會(huì)讓你意識(shí)到,蘋(píng)果公司給你的 Macbook Pro 擴(kuò)容 250G 加收 $ 200 簡(jiǎn)直就是在敲詐。
顯卡/GPU
選哪個(gè)顯卡是最重要的和最棘手的問(wèn)題。對(duì)于幾乎所有的機(jī)器學(xué)習(xí)應(yīng)用程序,你想要一個(gè) NVIDIA 卡,因?yàn)橹挥?NVIDIA 有你必需的 CUDA 框架和 CuDNN 庫(kù),這是包括 TensorFlow 在內(nèi)的所有機(jī)器學(xué)習(xí)框架所依賴(lài)的。
我并非一個(gè) GPU 專(zhuān)家,我發(fā)現(xiàn)這里面的術(shù)語(yǔ)非常容易讓人糊涂,但這對(duì)選擇一款 GPU 來(lái)說(shuō)是非常基本的知識(shí)。
也許對(duì)深度學(xué)習(xí)來(lái)說(shuō)最需要重要關(guān)注的屬性是卡上可用的 RAM 大小。如果 TensorFlow 不能將模型和當(dāng)前批次的訓(xùn)練數(shù)據(jù)放入 GPU 的 RAM 中,則會(huì)將故障轉(zhuǎn)移到 CPU——這會(huì)使 GPU 毫無(wú)存在的意義。
另一個(gè)需要關(guān)鍵考慮的是顯卡的架構(gòu)。NVIDIA 推出的幾個(gè)***的架構(gòu)依次被稱(chēng)為「Kepler」、「Maxwell」和「Pascal」。架構(gòu)之間的差異對(duì)速度的影響非常大;例如根據(jù) 該基準(zhǔn) (https://github.com/jcjohnson/cnn-benchmarks), Pascal Titan X 是 Maxwell Titan X 速度的兩倍。
大多數(shù)機(jī)器學(xué)習(xí)的文章使用 TITAN X 卡,它很棒,但成本至少$ 1,000,即使是一個(gè)較舊的版本。大多數(shù)進(jìn)行機(jī)器學(xué)習(xí)而沒(méi)有預(yù)算限制的人會(huì)使用 NVIDIA GTX 900 系列(Maxwell)或 NVIDIA GTX 1000 系列(Pascal)。
要了解顯卡的架構(gòu),您可以看看 NVIDIA 令人吃驚的混亂命名規(guī)則:9XX 卡使用 Maxwell 架構(gòu),而 10XX 卡使用 Pascal 架構(gòu)。但是由于更高的時(shí)鐘速度和更多的 RAM,980 顯卡仍然可能明顯快于 1060 顯卡。
你將不得不基于所能獲得的 GPU 的體系結(jié)構(gòu)為 NVIDIA 卡打上不同的標(biāo)簽。但最重要的卻是任何 9XX 或 10XX 顯卡將會(huì)幾個(gè)數(shù)量級(jí)地快于你的筆記本電腦。所以不要被選項(xiàng)難倒;如果你沒(méi)有使用過(guò) GPU,你會(huì)發(fā)現(xiàn)他們都會(huì)遠(yuǎn)比你現(xiàn)在用的要好。
我選了標(biāo)價(jià)為 195 美元的 GeForce GTX 1060 3G,它運(yùn)行模型的速度比我的 MacBook 快 20 倍,但偶爾會(huì)因?yàn)榕苣承?yīng)用而耗盡內(nèi)存,所以我可能應(yīng)該再加 60 美元買(mǎi) GeForce GTX 1060 6GB。
電源
我要談的是標(biāo)價(jià) 85 美元的 650W power supply。這個(gè)產(chǎn)品很煩人而且有電源問(wèn)題的時(shí)候很難調(diào)試,看來(lái)似乎不應(yīng)該在這上面省錢(qián)。另一方面,我從沒(méi)見(jiàn)過(guò)我的機(jī)器在峰值負(fù)載下超過(guò) 250W。
散熱
我記得我工作的***家創(chuàng)業(yè)公司把服務(wù)器放在他們的壁櫥里,風(fēng)扇的聲音非常吵,甚至透過(guò)壁櫥的門(mén)都覺(jué)得吵。這樣的日子似乎已經(jīng)過(guò)去很久了。盡管如此,650W 的電源得以讓你將幾乎 10 倍的能量充入你的筆記本電腦,而這種能量必須從某個(gè)地方散發(fā)出來(lái)。也許并不是必需的,但我仍花$ 35 買(mǎi)了一個(gè)非常棒的 Cooler Master Hyper 212 EVO 散熱器。它使 CPU 保持涼爽,同時(shí)運(yùn)行超靜音。
概況
要實(shí)際使用這些東西,你還需要一個(gè)顯示器、鼠標(biāo)和鍵盤(pán)。這些事情都很容易(我手頭就有)。到目前為止,總數(shù)是 883 美元,所以距花 1000 美元左右組建一個(gè)稱(chēng)心的機(jī)器還有留有許多空間。
將計(jì)算機(jī)組裝起來(lái)
當(dāng)所有快遞包裹開(kāi)始陸續(xù)到貨時(shí),我相當(dāng)興奮,同時(shí)我發(fā)現(xiàn)組裝計(jì)算機(jī)只是貌似容易。按各機(jī)器部件附帶的說(shuō)明書(shū),我大約花了一個(gè)小時(shí)組裝完。但***電腦打不開(kāi),我不得不更換主板,這讓人沮喪,但結(jié)果還 OK。
差不多第二次,我先在一個(gè)紙板箱上把所有的東西組合在一起檢查了一下,機(jī)器運(yùn)行了。
基本上,如果你把一切東西都插入到看起來(lái)可能適合的地方,一切似乎都能運(yùn)行良好。
圖 1. 放在桌上的半組裝電腦,已裝上可于測(cè)試的最少部件。
圖 2. 連上巨大散熱器的電腦看起來(lái)更強(qiáng)大
圖 3. 這里插上硬盤(pán)驅(qū)動(dòng)器后的俯視圖
引導(dǎo)機(jī)器
安裝***版本的 Ubuntu 能讓你的生活更輕松,因?yàn)?Ubuntu 支持幾乎所有你將安裝的深度學(xué)習(xí)軟件。你可將圖像存在 U 盤(pán)上,并 按這個(gè)簡(jiǎn)單的分步指南進(jìn)行安裝。因?yàn)槲以?90 年代與 drivers 斗爭(zhēng)的日子,linux 桌面安裝過(guò)程已經(jīng)改變了很多——現(xiàn)在變得難以想象的流暢。
新的 Ubuntu 桌面也很棒。自從建立它以來(lái),我經(jīng)常使用這臺(tái)機(jī)器作為個(gè)人電腦。有了大量 RAM,相當(dāng)快的 CPU 和輕量級(jí)操作系統(tǒng),它已經(jīng)是迄今為止我家最快的機(jī)器了。
安裝 CUDA,OpenCV 和 TensorFlow
為了使用你的全新深度學(xué)習(xí)機(jī),你首先需要安裝 CUDA 和 CudNN;***版本的 CUDA 是 8.0,***版本的 CudNN 是 5.1。從高層次看:CUDA 是一個(gè) API 及編譯器,它得以使其他程序?qū)?GPU 用于通用應(yīng)用程序,CudNN 是一個(gè)旨在使神經(jīng)網(wǎng)絡(luò)在 GPU 上運(yùn)行得更快的庫(kù)。你需要從 NVIDIA 網(wǎng)站下載該軟件。
OpenCV 是大多數(shù)應(yīng)用程序使用的圖像處理開(kāi)源庫(kù)。現(xiàn)在,***版本的 OpenCV(3.1)不適用于 EC2 上***版本的 CUDA(8.0)。你可以通過(guò)將 CUDA_GENERATION 標(biāo)志顯式設(shè)置為 Kepler,Maxwell 或 Pascal 來(lái)使其工作,這取決于你購(gòu)買(mǎi)的 GPU 的類(lèi)型。這里是下載 OpenCV 并設(shè)置它運(yùn)行的命令序列:
***,近期證明 TensorFlow 是很容易的——只需在該網(wǎng)站查看安裝指南。
要查看是否啟用了 GPU 支持,可以運(yùn)行 TensorFlow 的測(cè)試程序,也可以執(zhí)行命令行:
應(yīng)該開(kāi)始訓(xùn)練一個(gè)沒(méi)有錯(cuò)誤的模型。
有趣的部分!
現(xiàn)在你已經(jīng)支付了超過(guò) 1000 美元,并花費(fèi)了無(wú)數(shù)小時(shí)構(gòu)建和安裝軟件,是時(shí)候來(lái)證明你的投資了!GPU 使得運(yùn)行速度明顯加快,因此你需要能發(fā)揮速度優(yōu)勢(shì)的應(yīng)用程序。幸運(yùn)的是,你可以做許多有趣的事。
對(duì)鄰居的實(shí)時(shí)對(duì)象識(shí)別
在你家房子外面安裝一個(gè)便宜的 USB 相機(jī)或帶相機(jī)的樹(shù)莓派(Raspberry Pi)。你可以很容易地使用 RPi 相機(jī)模塊(RPi Camera Module)制作一個(gè) Pi 流視頻,我曾在上一篇關(guān)于 $ 100 TensorFlow 機(jī)器人 (https://www.oreilly.com/learning/how-to-build-a-robot-that-sees-with-100-and-tensorflow) 的文章中談到。
YOLO
YOLO 包將對(duì)進(jìn)入的數(shù)據(jù)進(jìn)行實(shí)時(shí)對(duì)象識(shí)別。我發(fā)現(xiàn),使用 Macbook 進(jìn)行有邊界框的對(duì)象識(shí)別需要 3-4 秒,但是使用 GPU 我能實(shí)時(shí)進(jìn)行對(duì)象識(shí)別,且準(zhǔn)確度相當(dāng)不錯(cuò)。
通過(guò) YOLO_tensorflow (https://github.com/gliese581gg/YOLO_tensorflow) 項(xiàng)目使用 YOLO 模型并將其在 TensorFlow 上運(yùn)行是很容易的。安裝 Darknet 也很有趣,這是一個(gè)不同的深度學(xué)習(xí)框架,YOLO 最初即被設(shè)計(jì)與其一同運(yùn)作:
一旦安裝 Darkne,你能通過(guò)下面的方式運(yùn)行它處理圖片:
由于 Pi 相機(jī)只是將文件放在一個(gè) Web 服務(wù)器上,你可以直接鏈接到該文件,并在流上進(jìn)行實(shí)時(shí)對(duì)象識(shí)別。這是我在我的車(chē)庫(kù)里對(duì)外面一個(gè)交通擁堵做出的對(duì)象識(shí)別:
給你的樹(shù)莓派機(jī)器人一個(gè)增強(qiáng)版大腦
我在寫(xiě)前一篇 關(guān)于一臺(tái) $100 TensorFlow 機(jī)器人時(shí)發(fā)現(xiàn),機(jī)器人可以在一個(gè) 30 美元的硬件上做深度學(xué)習(xí)是令人難以置信的。不幸的是,最令人失望的是機(jī)器人得用好幾秒來(lái)做對(duì)象識(shí)別,因此,實(shí)時(shí)決策的工作效果并不好。但是,如果你的機(jī)器人用的是你的新 GPU 機(jī)器,你可做的就不僅是實(shí)時(shí)圖像識(shí)別了,而且計(jì)算邊界框的速度可達(dá)每秒 12-20 幀!
如果你按照我在 GitHub 說(shuō)明 (http://github.com/lukas/robot),你可以構(gòu)建一個(gè)機(jī)器人,以一種容易解析和快速的格式流放(stream)從攝像頭中看到的一切。
我的朋友 Shawn Lewis 教給我了這篇文章中提到的每件事,所以我將我的兩個(gè)樹(shù)莓派機(jī)器人帶到我朋友肖恩的辦公室。他的夢(mèng)想,據(jù)我所知也是許多機(jī)器人學(xué)家的夢(mèng)想,是造一個(gè)機(jī)器人給他倒啤酒。這里是機(jī)器人和地上的瓶子戰(zhàn)斗的情況:
如果你看著他的電腦,實(shí)際上,機(jī)器是在他的 GeForce 980 上實(shí)時(shí)對(duì)輸入中的兩個(gè)機(jī)器人圖像進(jìn)行對(duì)象識(shí)別。他聲稱(chēng)他可以在內(nèi)存耗盡之前一次處理四個(gè)視頻輸入。
創(chuàng)作藝術(shù)
使用神經(jīng)網(wǎng)絡(luò)可以做到的最有趣的事情之一就是復(fù)制 Google 的 Deep Dream 工作,即使沒(méi)有 GPU,這也是可能的,但會(huì)花費(fèi)***長(zhǎng)的時(shí)間。基本上,這涉及修改輸入圖像以找到在神經(jīng)元中驅(qū)動(dòng)***響應(yīng)的圖像,因此它需要大量的計(jì)算能力。有很多不同的方法來(lái)做到這一點(diǎn),而且輸出通常是令人難以置信的奇怪和酷。
現(xiàn)成的一個(gè)很好的教程是 Google 發(fā)布的 Deep Dream 代碼:https://github.com/google/deepdream/blob/master/dream.ipynb。
你需要安裝 Jupyter 筆記本服務(wù)器 (http://jupyter.readthedocs.io/en/latest/install.html)(你不管怎么樣都需要!)和 Caffe。
然后仔細(xì)閱讀 Google 的教程。通過(guò)使用你的新機(jī)器,這些圖像需要幾分鐘而不是幾個(gè)小時(shí)就可以生成,這將是非常有趣的探索。
圖 4. 我的鄰居 Chris Van Dyke 和 Shruti Gandhi (https://twitter.com/atShruti) 在我的車(chē)庫(kù)里聽(tīng)我解釋 Deep Dream 實(shí)現(xiàn)的時(shí)候。
圖 5. 我的朋友 Barney Pell 與他的國(guó)際象棋生日蛋糕
圖 6. 這里是我的機(jī)器在 Deep Dream 它自己的一幅圖片上運(yùn)行!它看到到處都是狗(可能是因?yàn)槟P偷挠?xùn)練數(shù)據(jù) ImageNet 全是狗,因?yàn)閯?chuàng)作者包含了 120 個(gè)單獨(dú)品種的示例圖像)。
如果你想要更瘋一點(diǎn),這有一個(gè)通過(guò) TensorFlow 實(shí)現(xiàn)的神經(jīng)風(fēng)格(Neural Style)(https://github.com/anishathalye/neural-style),基于 Deep Dream,可以做更多的驚人的事情,其中一些在這個(gè)令人興奮的博客文章中 (http://genekogan.com/works/style-transfer/) 概述。
結(jié)論
你不需要花費(fèi)數(shù)千美元來(lái)獲得一個(gè)比你的筆記本電腦快得多的深度學(xué)習(xí)盒子。而且構(gòu)建計(jì)算機(jī)并讓一切運(yùn)行它是一個(gè)很棒的學(xué)習(xí)經(jīng)驗(yàn),況且你還得到一臺(tái)可升級(jí)的機(jī)器。我現(xiàn)在已經(jīng)換成了一個(gè)具有相同架構(gòu)的 Titan X 顯卡,并且一切運(yùn)行良好不用重新編譯。
總而言之,這是一個(gè)勝利:這臺(tái)機(jī)器運(yùn)行速度與使用 K80 GPU 的 1 美元/小時(shí)的 Amazon P2 實(shí)例大致相同,具有更多的內(nèi)存和較舊的架構(gòu)。我大部分時(shí)候用它來(lái)訓(xùn)練模型,這也是這種方法真正炫的地方——也許這是一個(gè)后續(xù)博客的話題了。
原文:https://www.oreilly.com/learning/build-a-super-fast-deep-learning-machine-for-under-1000
【本文是51CTO專(zhuān)欄機(jī)構(gòu)機(jī)器之心的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】