在第 11 章搁胆,我們討論了幾種可以明顯加速訓(xùn)練的技術(shù):更好的權(quán)重初始化阔逼,批量標(biāo)準(zhǔn)化,復(fù)雜的優(yōu)化器等等烛谊。 但是风响,即使采用了所有這些技術(shù),在具有單個 CPU 的單臺機(jī)器上訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)可能需要幾天甚至幾周的時間丹禀。
在本章中状勤,我們將看到如何使用 TensorFlow 在多個設(shè)備(CPU 和 GPU)上分配計算并將它們并行運(yùn)行(參見圖 12-1)鞋怀。 首先,我們會先在一臺機(jī)器上的多個設(shè)備上分配計算持搜,然后在多臺機(jī)器上的多個設(shè)備上分配計算密似。
與其他神經(jīng)網(wǎng)絡(luò)框架相比,TensorFlow 對分布式計算的支持是其主要亮點之一葫盼。 它使您可以完全控制如何跨設(shè)備和服務(wù)器分布(或復(fù)制)您的計算圖残腌,并且可以讓您以靈活的方式并行和同步操作,以便您可以在各種并行方法之間進(jìn)行選擇剪返。
我們來看一些最流行的方法來并行執(zhí)行和訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)废累,這讓我們不再需要等待數(shù)周才能完成訓(xùn)練算法,而最終可能只會等待幾個小時脱盲。 這不僅可以節(jié)省大量時間邑滨,還意味著您可以更輕松地嘗試各種模型,并經(jīng)常重新訓(xùn)練模型上的新數(shù)據(jù)钱反。
還有其他很好的并行化例子掖看,包括當(dāng)我們在微調(diào)模型時可以探索更大的超參數(shù)空間,并有效地運(yùn)行大規(guī)模神經(jīng)網(wǎng)絡(luò)面哥。
但我們必須先學(xué)會走路才能跑步哎壳。 我們先從一臺機(jī)器上的幾個 GPU 上并行化簡單圖形開始。
一臺機(jī)器上多設(shè)備
只需添加 GPU 卡到單個機(jī)器尚卫,您就可以獲得主要的性能提升归榕。 事實上,在很多情況下吱涉,這就足夠了刹泄。 你根本不需要使用多臺機(jī)器。 例如怎爵,通常在單臺機(jī)器上使用 8 個 GPU特石,而不是在多臺機(jī)器上使用 16 個 GPU(由于多機(jī)器設(shè)置中的網(wǎng)絡(luò)通信帶來的額外延遲),可以同樣快地訓(xùn)練神經(jīng)網(wǎng)絡(luò)鳖链。
在本節(jié)中姆蘸,我們將介紹如何設(shè)置您的環(huán)境,以便 TensorFlow 可以在一臺機(jī)器上使用多個 GPU 卡芙委。 然后逞敷,我們將看看如何在可用設(shè)備上進(jìn)行分布操作,并且并行執(zhí)行它們灌侣。
安裝
為了在多個 GPU 卡上運(yùn)行 TensorFlow兰粉,首先需要確保 GPU 卡具有 NVidia 計算能力(大于或等于3.0)。 這包括 Nvidia 的 Titan顶瞳,Titan X玖姑,K20 和 K40(如果你擁有另一張卡愕秫,你可以在https://developer.nvidia.com/cuda-gpus 查看它的兼容性)。
如果您不擁有任何 GPU 卡焰络,則可以使用具有 GPU 功能的主機(jī)服務(wù)器戴甩,如 Amazon AWS。 在 ?igaAvsec 的博客文章中闪彼,提供了在 Amazon AWS GPU 實例上使用 Python 3.5 設(shè)置 TensorFlow 0.9 的詳細(xì)說明甜孤。將它更新到最新版本的 TensorFlow 應(yīng)該不會太難。 Google 還發(fā)布了一項名為 Cloud Machine Learning 的云服務(wù)來運(yùn)行 TensorFlow 圖表畏腕。 2016 年 5 月缴川,他們宣布他們的平臺現(xiàn)在包括配備張量處理器(TPU)的服務(wù)器,專門用于機(jī)器學(xué)習(xí)的處理器描馅,比許多 GPU 處理 ML 任務(wù)要快得多把夸。 當(dāng)然,另一種選擇只是購買你自己的 GPU 卡铭污。 Tim Dettmers 寫了一篇很棒的博客文章來幫助你選擇恋日,他會定期更新它。