1. 程式人生 > >TensorFlow指定GPU裝置、分配視訊記憶體

TensorFlow指定GPU裝置、分配視訊記憶體

一、使用GPU加速運算

        1.TensorFlow程式中可以通過tf.device函式來指定執行的裝置。

          CPU名稱為"/cpu:0",即使有多個CPU,所有的CPU都使用/cpu:0作為名稱。

          GPU則不同,是"/gpu:n",n可替換。n=0,即是第一個GPU,以此類推。

        2.觀察每個運算所用的裝置:

          使用log_device_placement傳入會話當中的配置引數。具體程式碼:

            import tensorflow as tf            sess=tf.Session(config=tf.ConfigProto(log_devic_placement=True))             sess.run(...)    

            執行程式後會顯示每一個操作所用的裝置顯示到螢幕上:

          如果沒有明確指定執行裝置,那麼TensorFlow會優先選擇GPU。

        2.指定運算到指定的裝置

          需要tf.device來手工指定。程式碼如下:

          

          得到如下結果:

          

          注意:有些操作是不能在GPU上完成,否則會報錯。

              比如:tf.Variable()操作只支援實數型資料的引數在GPU上執行,整數型就會報錯。

              具體哪些不能在GPU上執行,參考:官方部分文件

        為了避免不知道某個操作是否確定在GPU上執行,可指定GPU裝置後,在構建會話時,傳入引數:                allow_soft_placement=True,使得不能在GPU裝置上完成的自動移到CPU上完成,具體程式碼:

sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) 二、TensorFlow動態分配GPU和視訊記憶體

          TensorFlow會預設佔用所有GPU以及每個GPU的所有視訊記憶體。

          1.如果只想使用部分GPU,2種方法進行設定:

            第一種:

            執行.py程式時指定:CUDA_VISIBLE_DEVICES=0, 1 python xx.py

            這時候就會只有第一塊、第二塊GPU會使用。

            第二種:

            在程式中指定:

import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" #只使用第三塊GPU           2.動態分配視訊記憶體

          讓TensorFlow按需分配視訊記憶體:      

config = tf.ConfigProto() config.gpu_options.allow_growth = True           直接指定視訊記憶體比例:

config.gpu_options.per_process_gpu_memory_fraction = 0.4 #佔用GPU40%            再傳入會話當中:

session = tf.Session(config=config)