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)