1.指定GPU運算session
若是安裝的是GPU版本,在運行的過程當中TensorFlow可以自動檢測。若是檢測到GPU,TensorFlow會盡量的利用找到的第一個GPU來執行操做。函數
若是機器上有超過一個可用的GPU,除了第一個以外的其餘的GPU默認是不參與計算的。爲了讓TensorFlow使用這些GPU,必須將OP明確指派給他們執行。with......device語句可以用來指派特定的CPU或者GPU執行操做:spa
import tensorflow as tf import numpy as np with tf.Session() as sess: with tf.device('/cpu:0'): a = tf.placeholder(tf.int32) b = tf.placeholder(tf.int32) add = tf.add(a, b) sum = sess.run(add, feed_dict={a: 3, b: 4}) print(sum)
設備的字符串標識,當前支持的設備包括如下的幾種:日誌
cpu:0 機器的第一個cpu。code
gpu:0 機器的第一個gpu,若是有的話blog
gpu:1 機器的第二個gpu,依次類推內存
相似的還有tf.ConfigProto來構建一個config,在config中指定相關的GPU,而且在session中傳入參數config=「本身建立的config」來指定gpu操做資源
其中,tf.ConfigProto函數的參數以下:字符串
log_device_placement=True: 是否打印設備分配日誌it
allow_soft_placement=True: 若是指定的設備不存在,容許TF自動分配設備
import tensorflow as tf import numpy as np config = tf.ConfigProto(log_device_placement=True, allow_soft_placement=True) with tf.Session(config=config) as sess: a = tf.placeholder(tf.int32) b = tf.placeholder(tf.int32) add = tf.add(a, b) sum = sess.run(add, feed_dict={a: 3, b: 4}) print(sum)
2.設置GPU使用資源
上文的tf.ConfigProto函數生成的config以後,還能夠設置其屬性來分配GPU的運算資源,以下代碼就是按需分配
import tensorflow as tf import numpy as np config = tf.ConfigProto(log_device_placement=True, allow_soft_placement=True) config.gpu_options.allow_growth = True with tf.Session(config=config) as sess: a = tf.placeholder(tf.int32) b = tf.placeholder(tf.int32) add = tf.add(a, b) sum = sess.run(add, feed_dict={a: 3, b: 4}) print(sum)
使用 allow_growth option,剛開始會分配少許的GPU容量,而後按須要慢慢的增長,有與不會釋放內存,隨意會致使內存碎片。
一樣,上述的代碼也能夠在config建立時指定,
import tensorflow as tf import numpy as np gpu_options = tf.GPUOptions(allow_growth=True) config = tf.ConfigProto(gpu_options=gpu_options) with tf.Session(config=config) as sess: a = tf.placeholder(tf.int32) b = tf.placeholder(tf.int32) add = tf.add(a, b) sum = sess.run(add, feed_dict={a: 3, b: 4}) print(sum)
咱們還能夠給gpu分配固定大小的計算資源。
gpu_options = tf.GPUOptions(allow_growth=True, per_process_gpu_memory_fraction=0.5)
上述代碼的含義是分配給tensorflow的GPU顯存大小爲:GPU的實際顯存*0.5