1. 程式人生 > >使用tensorflow-gpu時設定GPU

使用tensorflow-gpu時設定GPU

使用GPU跑tensorflow程式,預設載入所有的GPU,但計算過程中只會用其中一塊。也就是你看著所有GPU都被佔用了,以為是在GPU平行計算,但實際上只有其中一塊在執行;另外的所有顯示卡都閒著,但其視訊記憶體都被佔用了,所以別人也用不了。不過這種情況通過在程式之前加三行程式碼就可以解決:

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = "0"

這行程式碼加在TensorFlow程式開頭,就可以成功遮蔽掉系統中除 gpu0 (當然,這個gpu序號要根據實際情況來定)之外所有的GPU裝置了。

如果想使用GPU0和GPU1,可以將第三行程式碼改為:

os.environ['CUDA_VISIBLE_DEVICES'] = "0,1"

注意,第二行 os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" 也很重要,保證程式中的GPU序號是和硬體中的序號是相同的,否則可能會造成不少的麻煩。

如果不想使用GPU,也有辦法。這樣設定第三行程式碼 os.environ['CUDA_VISIBLE_DEVICES'] = "" ,這樣這個程式就不能看見所有的GPU了。

除此之外,TensorFlow程式會吃掉所用顯示卡的所有視訊記憶體,如果想讓程式需要多少視訊記憶體就用多少應該怎麼設定呢?建立 session

 的時候加一項設定:

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

程式執行過程中檢視視訊記憶體使用情況:

nvidia-smi