基于云CPU和云GPU的TensorFlow,誰更省錢?

責(zé)任編輯:editor006

作者:田曉旭

2017-12-26 16:11:07

摘自:it168網(wǎng)站

我一直在Keras和TensorFlow上進(jìn)行一些個(gè)人的深度學(xué)習(xí)項(xiàng)目,但是使用和等云服務(wù)進(jìn)行深度學(xué)習(xí)的訓(xùn)練并不是免費(fèi)的,作為個(gè)人項(xiàng)目的研究,我會(huì)額外關(guān)注開支

我一直在Keras和TensorFlow上進(jìn)行一些個(gè)人的深度學(xué)習(xí)項(xiàng)目,但是使用和等云服務(wù)進(jìn)行深度學(xué)習(xí)的訓(xùn)練并不是免費(fèi)的,作為個(gè)人項(xiàng)目的研究,我會(huì)額外關(guān)注開支,降低成本。因?yàn)镃PU實(shí)例比GPU實(shí)例更加便宜,而且經(jīng)過實(shí)際操作,我發(fā)現(xiàn)在這兩者中,我的訓(xùn)練模型姿勢(shì)慢了一點(diǎn)。因?yàn)槲疑钊胙芯苛诉@兩種類型實(shí)例的定價(jià)機(jī)制,來以了解CPU是否更適合我的需求。

Google Compute Engine上的起價(jià)為0.745美元/小時(shí)。幾個(gè)月前,Google 在現(xiàn)代英特爾 CPU架構(gòu)上 CPU實(shí)例多達(dá)64個(gè)vCPU 。更重要的是,它們也可以用在可,這些在GCE上可存在24小時(shí),可以在任何時(shí)候終止,但是花費(fèi)大約是標(biāo)準(zhǔn)實(shí)例價(jià)格的20%。具有64個(gè)vCPU和57.6GB RAM的可搶占n1-highcpu-64實(shí)例以及使用Skylake CPU的額外費(fèi)用為0.509美元/小時(shí),約為GPU實(shí)例成本的2/3。

如果64個(gè)vCPU的模型訓(xùn)練速度與GPU相當(dāng)(甚至稍微慢一點(diǎn)),那么使用CPU會(huì)更具成本效益。這是假設(shè)深度學(xué)習(xí)軟件和GCE平臺(tái)硬件以100%的效率運(yùn)行,如果不是100%,那么通過縮減vCPU的數(shù)量和成本可能會(huì)更加經(jīng)濟(jì)實(shí)惠。

由于GPU是針對(duì)深度學(xué)習(xí)硬件的刀片解決方案,所以沒有深度學(xué)習(xí)庫(kù)的基準(zhǔn)。得益于Google economies of scale,可搶占實(shí)例的存在使得成本出現(xiàn)了巨大的差異,所以相比于使用GPU,使用CPU來進(jìn)行深度學(xué)習(xí)模型訓(xùn)練更具經(jīng)濟(jì)效益。

建立

我已經(jīng)有了真實(shí)世界的深度學(xué)習(xí)用例、Docker容器環(huán)境的基準(zhǔn)測(cè)試腳本,以及來自TensorFlow與CNTK文章的結(jié)果日志。通過設(shè)置CLI參數(shù),可以對(duì)CPU和GPU實(shí)例做一些小的調(diào)整。我還重新構(gòu)建了Docker容器以支持最新版本的TensorFlow(1.2.1),并創(chuàng)建了一個(gè)CPU版本的容器,該容器安裝了CPU-appropriate TensorFlow庫(kù)。

有一個(gè)明顯的CPU特定的TensorFlow行為,如果從pip(如和教程推薦的)開始安裝并開始在TensorFlow中訓(xùn)練模型,則會(huì)在控制臺(tái)中看到以下警告:

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

為了解決這些警告,并從 / / 優(yōu)化中受益,我們,并創(chuàng)建了來完成這個(gè)任務(wù)。在新容器中訓(xùn)練模型時(shí),警告不再顯示,而且提高了速度,減少了訓(xùn)練時(shí)間。

因此,我們可以使用Google Compute Engine測(cè)試三個(gè)主要案例:

Tesla K80 GPU實(shí)例。

64個(gè)Skylake vCPU實(shí)例,其中TensorFlow是通過pip安裝的(以及8/16/32 vCPU的測(cè)試)。

64 Skylake vCPU實(shí)例,TensorFlow使用CPU指令來編譯,(+ 8/16/32 vCPU)

結(jié)果

針對(duì)每種模型架構(gòu)和軟/硬件配置,我計(jì)算了相對(duì)于GPU實(shí)例訓(xùn)練的總訓(xùn)練時(shí)間,以運(yùn)行提供的測(cè)試腳本的模型訓(xùn)練。在所有情況下,GPU 應(yīng)該是最快的訓(xùn)練配置,并且具有更多處理器的系統(tǒng)應(yīng)該比具有更少處理器的系統(tǒng)訓(xùn)練更快。

讓我們開始手寫加上常見的多層感知器(MLP)架構(gòu),以及密集的全連接層。訓(xùn)練時(shí)間越短越好。水平虛線下的所有配置都比GPU好; 虛線以上的所有配置都比GPU差。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

在這里,GPU是所有平臺(tái)配置中最快的,但這其中還有一些很有趣的現(xiàn)象,例如32 vCPUs 和 64 vCPUs之間的性能相似,在編譯TensorFlow庫(kù)時(shí),比8vCPUs和16 vCPUs的訓(xùn)練速度顯著提升。也許在vCPUs之間有過多的協(xié)商信息,從而消除了更多vCPUs的性能優(yōu)勢(shì),也許這些開銷與編譯TensorFlow的CPU指令不同。最后,它是一個(gè)黑盒,這就是為什么我喜歡黑盒基準(zhǔn)測(cè)試所有硬件配置而不是理論制作。

由于不同vCPU計(jì)數(shù)的訓(xùn)練速度之間的差異是最小的,因此通過縮小vCPU確實(shí)具有優(yōu)勢(shì)。對(duì)于每種模型架構(gòu)和配置,我計(jì)算相對(duì)于GPU實(shí)例訓(xùn)練成本的規(guī)范化訓(xùn)練成本。因?yàn)镚CE實(shí)例成本是按比例分配的(與Amazon EC2不同),所以我們可以簡(jiǎn)單地通過將實(shí)驗(yàn)運(yùn)行的總秒數(shù)乘以實(shí)例的成本(每秒)來計(jì)算實(shí)驗(yàn)成本。理想情況下,我們想要最小化成本。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

  越低越好,較低的CPU數(shù)量對(duì)于這個(gè)問題來說更具成本效益。

現(xiàn)在,讓我們看一下卷積神經(jīng)網(wǎng)絡(luò)(CNN)數(shù)字分類方法相同的數(shù)據(jù)集:

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

GPU比CNN上任何CPU的速度都要快兩倍,但成本結(jié)構(gòu)卻相同,除了64 vCPU 的成本比GPU更低。32 vCPU的訓(xùn)練速度要比64vCP快。

讓我們深入了解CNNs,看看cifar - 10圖像分類數(shù)據(jù)集,以及利用deep covnet + a multilayer perceptron和理想圖像分類的模型(類似于vgg16架構(gòu))。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

與簡(jiǎn)單的CNN案例中的類似行為相比,在這個(gè)實(shí)例中,所有的cpu在編譯后的TensorFlow庫(kù)中執(zhí)行得更好。

在IMDb reviews dataset上使用的fasttext算法可以判斷一個(gè)評(píng)論是積極的還是消極的,與其他方法相比,它的分類速度非常快。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

在這種情況下,GPU比CPU要快得多。降低CPU數(shù)量的好處并不那么明顯。盡管作為一個(gè)備用方案,正式的fasttext實(shí)現(xiàn)是為大量CPU設(shè)計(jì)的,并且可以更好地處理并行化。

Bidirectional long-short-term memory(LSTM)架構(gòu)非常適合處理像IMDb評(píng)論這樣的文本數(shù)據(jù),但是在我之前的基準(zhǔn)測(cè)試文章之后,注意到TensorFlow在GPU上使用了LSTM的低效實(shí)現(xiàn),所以差異會(huì)更加顯著。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

等等,什么?雙向LSTMs的GPU訓(xùn)練是CPU配置的兩倍。 (公平地說,基準(zhǔn)使用Keras LSTM default of implementation=0,CPU表現(xiàn)更好更好,而LSTM default of implementation=2,GPU表現(xiàn)更好,但是雙方之間的差距不會(huì)很大。)

最后,Nietzsche著作的LSTM文本生成遵循與其他體系結(jié)構(gòu)相似的模式,但是沒有對(duì)GPU的巨大沖擊。

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

實(shí)例比對(duì),基于云CPU和云GPU的TensorFlow,哪個(gè)更省錢?

結(jié)論

事實(shí)證明,64vcpu在深度學(xué)習(xí)的應(yīng)用中并不具備經(jīng)濟(jì)效益,當(dāng)前的軟硬件架構(gòu)并不能充分利用它們,所以使得64 vCPU總是和32vCPU性能相似,甚至還會(huì)更糟。在訓(xùn)練速度和成本方面,使用16vCPUs + compiled TensorFlow的訓(xùn)練模型似乎表現(xiàn)更好。編譯后的TensorFlow庫(kù)有30% - 40%的速度提升是一個(gè)意外的驚喜。我很驚訝谷歌竟然沒有提供一個(gè)預(yù)編譯版本的TensorFlow。

這里所顯示的成本優(yōu)勢(shì),僅在可搶占的情況下是不可能的。谷歌計(jì)算引擎的普通高CPU實(shí)例的成本大約為5x,因此完全消除了成本效益。

使用云CPU訓(xùn)練方法的一個(gè)主要隱含假設(shè)是,你不需要ASAP的訓(xùn)練模式。在專業(yè)的用例中,可能太浪費(fèi)時(shí)間了,但是在個(gè)人用例中,一個(gè)人可能一晚上就離開模型訓(xùn)練,這是一個(gè)極具成本效益的好選擇。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)