TensorFlow指定GPU裝置 分配視訊記憶體

2021-08-29 22:37:33 字數 1556 閱讀 4559

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

tensorflow中指定GPU及GPU視訊記憶體設定

檢視機器上gpu情況 命令 nvidia smi 功能 顯示機器上gpu的情況 命令 nvidia smi l 功能 定時更新顯示機器上gpu的情況 其中左上側有0 1 2 3的編號,表示gpu的編號,在後面指定gpu時需要使用這個編號。在終端執行程式時指定gpu cuda visible devi...

Tensorflow指定顯示卡GPU執行

有些工作站配備了不止一塊顯示卡,比如4路泰坦。tensorflow會預設使用第0塊gpu,而以tensorflow為backend的keras會預設使用全部gpu資源。有時候有多個人需要跑實驗,如果乙個人占用了全部gpu,其他人就不能跑了。因此需要能夠指定使用特定的gpu。具體地,只需要在主 的開頭...

tensorflow設定gpu及gpu視訊記憶體使用

os.environ cuda visible devices 0 使用 gpu 0 os.environ cuda visible devices 0,1 使用 gpu 0,1 一是讓tensorflow在執行過程中動態申請視訊記憶體,需要多少就申請多少 第二種方式就是限制gpu的使用率。conf...