首頁>Club>
12
回覆列表
  • 1 # 論智

    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`。

  • 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包,能夠記錄下網路執行中每個操作的開始時間, 結束時間, 執行裝置等等,幫助我們確定出最耗時的操作,從而有針對性的改進網路。

  • 中秋節和大豐收的關聯?
  • 為什麼說“先有哈佛,後有美國″?