TensorFlow™在磚
使用GPU
GPU(圖形處理器)是大多數現代計算機的一個組成部分,它是用來執行計算所需的3 d圖形。他們最常見的使用是為視頻遊戲執行這些操作,計算多邊形去展示遊戲用戶。有很多手揮舞,小型處理器GPU基本上是一個大陣,執行高度由計算。你現在主要有迷你型超級計算機還*運行!
雖然每個cpu的GPU相當緩慢,有很多,他們是專門進行數值處理。這意味著GPU可以執行很多簡單的數值處理任務在同一時間。在這樣的好運氣,這是完全許多機器學習算法需要做什麼。
沒有一個GPU嗎?
大多數現代(近十年)電腦有某種形式的GPU,即使它是建在你的主板。對於本教程的目的,這就足夠了。
你需要知道什麼類型的圖形卡。Windows用戶可以按照下列指示和其他係統的用戶需要谘詢係統的文檔。
Non-Nvidia顯卡的用戶
而其他圖形卡可能是合法的,本教程隻測試最近的NVidia圖形卡。如果你的顯卡是不同類型的,我建議你尋找一個NVidia圖形卡學習,買或借。如果這對你是很困難的,請聯係您當地大學或學校,看他們是否可以提供幫助。如果你仍然有困難,隨時閱讀,工作在一個標準的CPU。你將能夠遷移知識在稍後的日期。
*注意:不是一個超級計算機,但在許多方麵相似。
安裝GPU-enabled TensorFlow
如果你沒有安裝GPU-enabled TensorFlow早些時候我們需要做第一個。我們在第一課不要說的指令,所以如果你沒有去你的方式比你沒有啟用GPU支持。
我建議您創建一個新的水蟒的環境,而不是試圖更新你的前一個。
在開始之前
頭的官方TensorFlow安裝說明,遵循水蟒的安裝說明。的主要區別,我們所做的第一課,是你需要的GPU啟用為你的係統版本TensorFlow。然而,在你安裝TensorFlow到這個環境,你需要設置你的電腦與CUDA GPU啟用和CuDNN。官方的這一步一步TensorFlow文檔大綱,但我推薦本教程如果你想設置一個最近的Ubuntu安裝。最主要的原因是,在寫作的時候(2016年7月),CUDA尚未最近修建的Ubuntu版本,這意味著這個過程是更多的手冊。
使用GPU
這真的很簡單。至少,語法。隻有改變這種:
#設置操作與tf.Session ()作為稅:#運行代碼
:
與tf.device (“/ gpu: 0”):#設置操作與tf.Session ()作為稅:#運行代碼
這個新的線將會創建一個新的上下文管理器,告訴TensorFlow在GPU上執行這些操作。
讓我們看一看一個具體的例子。下麵的代碼創建了一個隨機矩陣大小命令行給出的。我們可以在CPU或GPU上運行的代碼使用命令行選項:
進口sys進口numpy作為np進口tensorflow作為特遣部隊從datetime進口datetimedevice_name = sys.argv [1]#從cmd線選擇設備。選擇:gpu和cpu形狀= (int(sys.argv [2]),int(sys.argv [2)))如果device_name = =“圖形”:device_name =“/ gpu: 0”其他的:device_name =“/ cpu: 0”與tf.device (device_name):random_matrix =特遣部隊。random_uniform(形狀=形狀,minval =0maxval =1)dot_operation =特遣部隊。matmul (random_matrix tf.transpose (random_matrix))sum_operation = tf.reduce_sum (dot_operation)
開始時間= datetime.now ()與tf.Session (config = tf.ConfigProto (log_device_placement =真正的))作為會話:結果= session.run (sum_operation)打印(結果)#很難看到終端的輸出結果,添加一些換行來提高可讀性。打印(“\ n”*5)打印(形狀:“、形狀、設備:“device_name)打印(時間:“datetime.now() -開始時間)打印(“\ n”*5)
你可以在命令行上運行這個:
python matmul。py gpu 1500
這將使用CPU的矩陣大小1500平方。使用以下的CPU上做同樣的操作:
python matmul。py cpu 1500
你會注意到的第一件事當運行GPU-enabled代碼輸出大量增加,而正常TensorFlow腳本。這就是我的電腦打印,之前它打印出任何結果的操作。
我tensorflow/stream_executor/dso_loader.cc:108年)成功打開libcublas CUDA圖書館。所以在本地我tensorflow/stream_executor/dso_loader.cc:108年)成功打開libcudnn.so CUDA圖書館5在本地我tensorflow/stream_executor/dso_loader.cc:108年)成功打開libcufft CUDA圖書館。所以在本地我tensorflow/stream_executor/dso_loader.cc:108年)成功打開libcuda.so CUDA圖書館1。在本地我tensorflow/stream_executor/dso_loader.cc:108年)成功打開libcurand CUDA圖書館。所以在本地我tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:925年)成功NUMA節點讀取從SysFS有負麵價值(1),但必須有在至少一個NUMA節點,所以NUMA節點返回零我tensorflow/核心/common_runtime/gpu/gpu_init.cc:102年)發現設備0與屬性:名稱:GeForce GTX公司950年米主要:5小:0memoryClockRate (GHz)1.124pciBusID0000年:01:00.0總內存:3.95直布羅陀海峽免費的記憶:3.50直布羅陀海峽我tensorflow/核心/common_runtime/gpu/gpu_init.cc:126年直接存儲器存取:0我tensorflow/核心/common_runtime/gpu/gpu_init.cc:136年]0Y:我tensorflow/核心/common_runtime/gpu/gpu_device.cc:838年)創建TensorFlow設備(/gpu:0)- - - - - ->(設備:0名稱:GeForce GTX公司950年米,pci總線id:0000年:01:00.0)
如果您的代碼不會產生輸出類似於自然,你不運行GPU Tensorflow啟用。另外,如果你得到一個錯誤等ImportError: libcudart.so.7.5:無法打開共享對象文件:沒有這樣的文件或目錄
CUDA庫,那麼你還沒有安裝正確。在這種情況下,您需要回到按照說明安裝CUDA在您的係統上。
嚐試運行上麵的代碼在CPU和GPU,慢慢增加。從1500年開始,然後打3000,然後4500,等等。你會發現CPU開始花很長時間,而GPU,很快在這個操作!
如果你有多個gpu,您可以使用。GPU 0——上麵的代碼訪問第一個GPU。改變設備gpu: 1
使用第二個GPU,等等。你也可以發送你計算一個GPU的一部分,一部分到另一個GPU。此外,您可以訪問您的計算機的cpu以類似的方式——隻使用cpu: 0
(或另一個號碼)。
什麼類型的我應該發送到GPU操作?
一般來說,如果流程的步驟可以被描述,如“做數學運算數千次”,然後將其發送到GPU。例子包括矩陣乘法,計算一個矩陣的逆矩陣。事實上,許多基本的矩陣操作是gpu的總理候選人。作為一個過於廣泛而簡單的規則,應該在CPU上執行其他操作。
還有一個變化的設備成本和使用gpu。gpu沒有直接訪問其他電腦(當然除了顯示)。因此,如果你在GPU上運行一個命令,你需要將所有數據複製到GPU第一,然後做手術,然後複製結果回您的計算機的內存。TensorFlow處理這種在引擎蓋下,代碼很簡單,但仍然需要執行的工作。
並不是所有的操作可以在gpu完成。如果你得到以下錯誤,你想做一個操作不能在GPU上完成:
不能將設備分配給節點“PyFunc”:不能滿足明確的設備規範' /設備:GPU: 1 '因為沒有設備匹配,規範注冊在這過程;
如果是這種情況,您可以手動改變一個CPU操作設備,或一組TensorFlow自動改變設備在這種情況下。要做到這一點,集allow_soft_placement
tp真正的
在配置中,作為創建會話的一部分。原型是這樣的:
與tf.Session (config = tf.ConfigProto (allow_soft_placement =真正的)):#運行您的圖
我也推薦日誌設備放置在使用gpu,這允許您輕鬆地調試相關問題不同的設備使用。這個打印設備的使用日誌,讓你看到當設備變化以及它如何影響圖。
與tf.Session (config = tf.ConfigProto (allow_soft_placement =真正的log_device_placement =真正的)):#運行您的圖
- 設置你的電腦使用GPU TensorFlow(或找到一個電腦借給如果你沒有最近的GPU)。
- 嚐試運行前麵的鍛煉在GPU上的解決方案。GPU可以執行哪些操作,不能嗎?
- 建立一個程序,使用GPU和CPU上的操作。我們看到在使用分析代碼5課估計將數據發送到的影響,GPU和檢索數據。
- 給我你的代碼!我想看看你的代碼的例子,如何使用Tensorflow,任何你發現的技巧。