2017-03-31 37 views
8

因爲我只有AMD A10-7850 APU,並且沒有資金花在800美元到1200美元的NVIDIA圖形卡上,所以我試圖通過我擁有的資源來加速通過張量流的深度學習/ keras。如何加速非NVIDIA設置的深度學習?

最初,我使用了Tensorflow的預編譯版本。 InceptionV3需要大約1000-1200秒來計算1個紀元。它一直非常緩慢。

爲了加速計算,我首先用優化器(使用AVX和SSE4指令)自編Tensorflow。這導致計算時間大約減少40%。上面執行的相同計算僅需要大約600秒來計算。它幾乎可以忍受 - 有點像你可以看着油漆乾燥。

我在尋找進一步減少計算時間的方法。我只有一個集成的AMD顯卡,它是APU的一部分。 (如何)(C/c)我是否利用這個資源來加速計算?

更一般地說,假設有其他人有類似的貨幣限制和英特爾設置。沒有獨立NVIDIA卡的人如何能夠利用其集成的圖形芯片或其他非NVIDIA設置來實現比僅CPU性能更快的速度?那可能嗎?爲什麼/爲什麼不?需要做些什麼才能實現這一目標?或者這可能在不久的將來(2-6個月)?怎麼樣?

回答

15

研究這個話題了幾個月後,我可以看到前進3.5可能的路徑:

1)Tensorflow + OPENCL在上述意見中提到:

似乎有一些運動回事這個領域。在Codeplay上,Lukasz Iwanski剛剛發表了一篇關於如何在這裏使用opencl運行張量流的綜合答案(我將僅提供如上所述的鏈接,因爲信息可能在那裏改變):https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

可能使用集成圖形是誘人的。也值得探討與APU的組合使用。但我不確定這樣做會有多好,因爲OpenCl支持還處於開發早期,並且硬件支持非常有限。此外,OpenCl與手工優化代碼庫不同。 (更新2017-04-24:我得到的代碼編譯後遇到一些問題here!)不幸的是,希望速度改進ON MY SETUP(iGPU)沒有實現。

CIFAR 10數據集:

  1. Tensorflow(經由PIP AK未優化):在390%的CPU利用率 1700sec /時期。
  2. Tensorflow(SSE4,AVX):390%CPU 利用率爲1100sec/epoch。
  3. Tensorflow(opencl + iGPU):5800秒/時代150%CPU 和100%GPU利用率。

您的里程可能會有很大差異。所以我想知道其他人在你的設置上相對來說(未優化vs優化vs opencl)是什麼?

需要注意的是:opencl的實現意味着所有繁重的計算都應該在GPU上完成。 (更新於2017/4/29)但事實上情況並非如此,因爲一些功能尚未實現。這導致unnecessary copying back and forth of data between CPU and GPU ram。再次,imminent changes應該改善這種情況。此外,對於那些有興趣幫助和想要加速的人,我們可以做一些對opencl的張量性能有顯着影響的事情。

但現在它代表:1 iGPU < < 4 CPUS與SSE + AVX。也許更強大的GPU和更大的RAM和/或opencl 2.0實現可能會有更大的差異。

在這一點上,我應該補充一點,至少Caffe和/或Theano + OpenC1正在進行類似的努力。所有情況下的限制步驟似乎都是將CUDA/cuDNN功能手動移植到openCl範例。

2)的ROCm + MIOpen

RocM代表的Radeon開放計算,似乎是舉措大雜燴是/將使深學習的非NVIDIA(大部分的Radeon設備)成爲可能。它包括3個主要組件:

  • HIP:一種將CUDA代碼轉換爲可供AMD GPU使用的代碼的工具。
  • ROCk:AMD CPU + GPU設備的64位Linux內核驅動程序。
  • HCC:將代碼編譯爲異構系統架構環境(HSA)的代碼的C/C++編譯器。

顯然,RocM旨在發揮同時擁有CPU和GPU技術的AMD實力。他們加快深度學習的方法利用了這兩個組件。作爲APU的老闆,我對這種可能性特別感興趣。但作爲警示:Kaveri APU支持有限(僅支持集成Graphcs)。未來的APU尚未發佈。而且看起來,這裏還有很多工作要做,以使這個項目進入一個成熟的狀態。鑑於AMD宣佈他們的Radeon Instinct卡將於今年(2017年)發佈,很多工作都希望在一年內實現這種方法的可行性。

這裏給我的問題是,RocM提供了建立深度學習庫的工具。他們本身並不代表深度學習庫。作爲一個不專注於工具開發的數據科學家,我只想要一些有用的東西。並且我不一定有興趣去建立我想要學習的東西。沒有足夠的時間來做好我所在公司的工作。

NVIDIA當然有CUDA和cuDNN,它們是針對NVIDIA GPU優化的手工彙編代碼庫。所有主要的深度學習框架都建立在這些專有庫的基礎之上。 AMD目前根本沒有這樣的東西。

我不確定AMD在這方面將取得怎樣的成功。但是,有些光線正在照耀着Carlos Perez在4/3/2017 here上發表的一篇文章中AMD的意圖。最近的lecture at Stanford也對Ryzen,Vega和深度學習融合在一起進行了一般性討論。本質上,文章指出MIOpen將代表這個手工製作的針對AMD器件的優化深度學習函數庫。這個圖書館將於2017年上半年發佈。我不確定這些圖書館多快將被納入主要的深度學習框架,以及當時的功能實施範圍如何。

但顯然,AMD has already worked with the developers of Caffe to "hippify" the code basis。基本上,CUDA代碼通過HIP自動轉換爲C代碼。自動化處理絕大部分代碼基礎,只留下少於0.5%的代碼必須進行更改,並且需要手動注意。將其與手動翻譯爲openCl代碼相比較,人們開始感覺這種方法可能更具可持續性。我不清楚的是底層彙編語言優化進來的地方。

(更新2017-05-19)但隨着AMD Vega卡即將發佈(專業Frontier版卡不會爲消費者第一),有提示major deep learning frameworks will be supported through the MIOpen framework。今天發佈的Forbes article顯示MiOpen在過去幾個月的表現中取得的進展:看起來很重要。 (更新2017-08-25)MiOpen已正式發佈。我們不再在這裏假設這裏討論。現在我們只需要嘗試一下這個框架的工作情況。

3)霓虹燈

Neon是Nervana的(現已被英特爾收購)的開源深學習框架。我提到這個框架的原因是它似乎相當簡單易用。語法和Keras一樣簡單直觀。但更重要的是,由於這些計算的一些手工彙編語言優化,此框架在some benchmarks上的速度比Tensorflow快了2倍。可能將計算時間從500秒/時間減少到300秒/時代是沒有什麼可打噴嚏的。 300秒= 5分鐘。所以一個小時內可以得到15個時代。在大約3.5小時內約有50個時代!但理想情況下,我想在一小時內完成這些計算。爲了達到這些水平,我需要使用GPU,此時,只有NVIDIA在這方面提供全面支持:當GPU可用時,Neon也使用CUDA和cuDNN(當然,它必須是NVIDIA GPU )。如果您有權訪問其他英特爾硬件,這當然是一種有效的追求方式。最後,Neon的出發點是爲了讓事情在非NVIDIA設置(如Nervana的定製CPU,現在是Intel FPGA或Xeon Phis)上以最佳方式工作。

3.5)英特爾Movidius

更新2017年8月25日:我看過this article來了。英特爾發佈了基於USB3.0的「深度學習」加速器。顯然,它與咖啡廳一起工作,並允許用戶執行常見的基於咖啡廳的網絡微調和推理。這一點很重要:如果你想從頭開始訓練自己的網絡,這裏的措辭非常模糊。因此,我將假設,除了對網絡進行微調之外,培訓本身仍應該用更多的並行計算來完成。真正的踢球者是這樣的:當我檢查價格時,這根棍子的價格僅爲79美元。與普通的NVIDIA 1070-80(ti)顯卡相比,這並不算什麼。如果您僅僅想使用已經可用於一些相關任務的通用網絡拓撲來解決一些視覺問題,那麼您可以使用此控制桿將其微調爲自己的用途,然後編譯代碼並將其放入該控制桿中以快速進行推理。許多使用案例可以用這個棒子覆蓋,再花79美元就可以了。這就是英特爾,他們提議全力以赴英特爾。他們的模型是使用雲(即Nervana Cloud)進行培訓。然後,將此芯片用於能耗非常重要的原型推斷或推理。讀者可以回答這是否正確。

這時,看起來像沒有NVIDIA的深度學習仍然很難實現。通過使用opencl,一些有限的速度增益是困難的,但可能是有可能的。其他舉措聽起來很有希望,但需要時間來梳理這些舉措將產生的實際影響。

+0

您能指點我關於如何運行您使用_CIFAR 10數據集引用的基準測試的說明嗎? –

2

如果你的平臺支持opencl,你可以看看使用tensorflow。在Linux上有一些實驗性的支持,其編號爲this github repository。一些初步說明在the documentation section of of this github repository

+0

這裏有一些關於OpenCL實施狀態的高級信息,以防萬一也有幫助。但Benoit的分支鏈接是正確的地方去https://www.codeplay.com/portal/02-14-17-bringing-the-acceleration-of-opencl-to-tensorflow-with-sycl –

+0

希望你不要'不介意......我會在本週末回覆。 – Thornhale