tensorflow-gpu分配顯存tf.ConfigProto和tf.GPUOptions

初次使用tensorflow-gpu時用的sess = tf.Session()啓動圖,這時總報如下錯誤

但是程序邏輯是沒有問題的,後來發現是需要爲其分配顯存,因此需要將sess = tf.Session()改爲:

config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

allow_growth設置爲True時,分配器將不會指定所有的GPU內存而是根據需求增長,但是由於不會釋放內存,所以會導致碎片 

也可以改爲:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

per_process_gpu_memory_fraction指定了每個GPU進程中使用顯存的上限,但它只能均勻作用於所有GPU,無法對不同GPU設置不同的上限 。

tf.ConfigProto()的參數羅列如下:

 

示例如下:

  • log_device_placement=True : 是否打印設備分配日誌
  • allow_soft_placement=True : 如果你指定的設備不存在,允許TF自動分配設備   
  • inter_op_parallelism_threads=0:設置線程一個操作內部並行運算的線程數,如果設置爲0,則表示以最優的線程數處理
  • intra_op_parallelism_threads=0:設置多個操作並行運算的線程數
import tensorflow as tf
import numpy as np

# 假設有一個W = [0.100, 0.200],b = [0.300]的線性模型
x_data = np.float32(np.random.rand(2, 100)) 
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 構造線性模型並初始化參數
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 損失函數採用最小化方差
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# 初始化變量
init = tf.global_variables_initializer()


# 啓動圖 (graph)
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
sess.run(init)

# 訓練模型並打印結果
for step in range(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章