-
1 # 論智
-
2 # 北航秦曾昌
Tensorflow是Google推出的一款人工智慧學習系統,我們基於tensorflow框架編寫的程式,透過GPU就能極大的加速執行速度。下面就介紹一些在Python中用GPU加速神經網路訓練的一些技巧和方法。
1. 指定GPU
如果在有多塊GPU的話,可以透過如下這句話來指定呼叫哪一塊GPU。
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
2. 設定GPU的使用量
如果是多個程式使用一塊GPU,就需要對每個程式制定GPU的視訊記憶體使用量。可以用下面這句話來實現:
config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
3. 並行使用多個GPU
並行使用GPU可以分為兩種,一種是資料並行,也就是將訓練資料平均到多個GPU中進行訓練,然後在統一進行引數的更新;另一種則是模型並行,即將模型分成多個部分在多個GPU上訓練。具體實踐的方法可以參考下面的連結:https://blog.csdn.net/lqfarmer/article/details/70339330
4. 在特定操作上制定CPU執行
GPU更適合於大矩陣的運算,而CPU則適合資料的複雜計算。因此為了儘可能的加速訓練,我們可以對不同的操作制定不同的執行裝置。
with tf.device("/cpu:0"):
v1 = tf.constant([1.0, 2.0, 3.0], shape=[3], name="v1")
v2 = tf.constant([1.0, 2.0, 3.0], shape=[3], name="v2")
sumV12 = v1 + v2
5. 監督GPU的執行
此外我們還可以透過在命令列中輸入watch nvidia-smi來監督GPU的執行情況,來判斷程式使用GPU的效率如何。
如果GPU-Util一欄中的GPU利用率過低,則說明程式大部分時間沒有在訓練,而是可能在讀取輸入資料。因此需要對程式進行修改。
6. 固定計算圖
在TensorFlows中圖的定義和構建是同圖的計算模型分開處理的。因此如果在定義計算圖之後,再新增計算節點,會導致GPU的使用率越來越低,網路訓練的速度越來越慢。檢查的方法也很簡單,只需要在開始訓練迴圈之前,呼叫tf.getDefaultGraph().finalize() 把計算圖鎖定,之後想要新增任何新的操作都會產生錯誤。
7. tensorflow的除錯工具
在tensorflow的除錯工具當中,有官方出品的tensorboard十分好用,你可以用它來可視化出訓練過程中的損失變化、引數變化、模型的計算圖以及輸出結果。而且tensroboard能夠實時更新訓練的結果,因此是網路訓練中除錯的好幫手。此外也推薦使用timeline包,能夠記錄下網路執行中每個操作的開始時間, 結束時間, 執行裝置等等,幫助我們確定出最耗時的操作,從而有針對性的改進網路。
回覆列表
Tensorflow支援GPU,而且預設情況下,在操作同時支援GPU和CPU的情況下,會優先使用GPU。所以Tensorflow的GPU加速訓練是開箱即用的,唯一需要注意的是安裝的時候不要裝錯了版本。
如何安裝正確版本首先,確保你的硬體沒問題。一般來說,不是太老或太低端的N卡基本上都沒問題。具體支援的硬體可以檢視Nvidia的文件(https://developer.nvidia.com/cuda-gpus),根據你的顯示卡所屬的系列,檢視是否支援(需要支援CUDA 3.5以上,CUDA 3.0以上,但小於3.5的話,需要透過原始碼編譯安裝Tensorflow)。
(Nvidia網站截圖)
其次,確保你的軟體依賴沒問題:
顯示卡驅動CUDA Toolkit 9.0cuDNN SDK v7libcupti-devNVIDIA TensorRT 3.0 (可選)然後,就是安裝TensorFlow了。
注意,透過`pip install tensorflow`安裝的是CPU版本!你需要使用`pip install tensorflow-gpu`!pip3同理。相應地,如果你選擇透過docker安裝,也別忘了加上-gpu字尾,比如`nvidia-docker run -it tensorflow/tensorflow:latest-gpu bash`。