使用tf 時gpu的設定

2021-10-08 15:59:15 字數 2112 閱讀 5687

使用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)

還可以設定視訊記憶體的使用量

config = tf.configproto()

config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 占用gpu90%的視訊記憶體

session = tf.session(config=config)

程式跑起來之後還檢視視訊記憶體使用情況:

如上面的**顯示我有兩塊gpu:裝置0為quadro k2200,裝置1為tesla k40c。我現在正在跑yolov3的**,只是用到了1號gpu,程序對應的pid是21971,占用的視訊記憶體是5631mib,gpu的浮動利用率是98%。

這裡需要注意的是:視訊記憶體占用和gpu占用是兩個不一樣的東西。顯示卡是由gpu和視訊記憶體等組成的,視訊記憶體和gpu的關係有點類似於記憶體和cpu的關係。我跑yolov3**的時候視訊記憶體占得少,gpu佔得多。

上面的**中:

第一欄的fan:n/a是風扇轉速,從0到100%之間變動,這個速度是計算機期望的風扇轉速,實際情況下如果風扇堵轉,可能打不到顯示的轉速。有的裝置不會返回轉速,因為它不依賴風扇冷卻而是通過其他外設保持低溫(比如我們實驗室的伺服器是常年放在空調房間裡的)。

第二欄的temp:是溫度,單位攝氏度。

第三欄的perf:是效能狀態,從p0到p12,p0表示最大效能,p12表示狀態最小效能。

第四欄下方的pwr:是能耗,上方的persistence-m:是持續模式的狀態,持續模式雖然耗能大,但是在新的gpu應用啟動時,花費的時間更少,這裡顯示的是off的狀態。

第五欄的bus-id是涉及gpu匯流排的東西,domain:bus:device.function。用lspci | grep -i nvidia*命令檢視連線到匯流排的nvidia裝置資訊,和**中的bus-id是一一對應的。

第六欄的disp.a是display active,表示gpu的顯示是否初始化。

第五第六欄下方的memory usage是視訊記憶體使用率。

第七欄是浮動的gpu利用率。

第八欄上方是關於ecc的東西。

第八欄下方compute m是計算模式。

下面一張表示每個程序占用的視訊記憶體使用率。

TF 設定GPU模式訓練

在終端執行程式時指定gpu cuda visible devices 1 python your file.py 這樣在跑你的網路之前,告訴程式只能看到1號gpu,其他的gpu它不可見 可用的形式如下 cuda visible devices 1 only device 1 will be seen...

tensorflow中使用GPU的設定方法

方法一 config tf.configproto allow soft placement true 如果你指定的裝置不存在,允許tf自動分配裝置 config.gpu options.allow growth true 動態分配記憶體 sess tf.session config config ...

TensorFlow 設定GPU使用量

在預設條件下,tensorflow會一次佔滿左右視訊記憶體!這對於我們想在同一臺機器上跑多個程式不利 後面的程式會報視訊記憶體不足的錯誤 可以通過以下方式,設定tensorflow中視訊記憶體的使用方式 在python 中指定gpu import os os.environ cuda device ...