是的,你可以在一個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
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。出來的效果更神奇,你可以在這個腦洞大開的博文裡看到部分的成果。
原文釋出時間為:2017-02-15
本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号