tensorflow使用GPU加速

2021-10-09 14:24:28 字數 2336 閱讀 6015

測試faster-rcnn時,cpu計算速度較慢,調整**改為gpu加速運算

將 with tf.session() as sess: 替換為

1 gpu_options = tf.gpuoptions(per_process_gpu_memory_fraction=0.9)

2 with tf.session(config=tf.configproto(gpu_options=gpu_options,log_device_placement=true),graph=detection_graph) as sess:

3 with tf.device("/gpu:0"):

之後出現視訊記憶體佔滿、而gpu利用率為0的情況,經查閱官方文件得知「在gpu上,tf.variable操作只支援實數型(float16 float32 double)的引數。不支援整數型引數」

cpu計算幾乎佔滿,可見tensorflow的執行空間在視訊記憶體上,而計算實際是在cpu上執行的

用如下**可檢測tensorflow的能使用裝置情況:

1 from tensorflow.python.client import device_lib

2 print(device_lib.list_local_devices())

tensorflow程式可以通過tf.device函式來指定執行每乙個操作的裝置,這個裝置可以是本地cpu或gpu,也可以是某一台遠端伺服器。

tf.device函式可以通過裝置的名稱來指定執行運算的裝置。

如cpu在tensorflow中的名稱為/cpu:0。在預設情況下,即使機器有很多個cpu,tensorflow也不會區分它們,所有的cpu都使用/cpu:0作為名稱。

而一台機器上不同gpu的名稱是不同的,第n個gpu在tensorflow中的名稱為/gpu:n。

tensorflow提供了乙個會計的方式來檢視執行每乙個運算的裝置。在生成會話時,可以通過設定log_device_placement引數來列印執行每乙個運算的裝置。

1 import tensorflow as tf 

2 a=tf.constant([1.0,2.0,3.0],shape=[3],name='a')

3 b=tf.constant([1.0,2.0,3.0],shape=[3],name='b')

4 c=a+b

5 #通過log_device_placement引數來輸出執行每乙個運算的裝置

6 sess=tf.session(config=tf.configproto(log_device_placement=true))

7 print (sess.run(c))

在以上**中,tensorflow程式生成會話時加入了引數log_device_placement=true,所以程式會將執行每乙個操作的裝置輸出到螢幕。

在配置好gpu的環境中,如果操作沒有明確指定執行裝置,那麼tensorflow會優先選擇gpu。但是,儘管有4個gpu,在預設情況下,tensorflow只會將運算優先放到/gpu:0上。如果需要將某些運算放到不同的gpu或cpu上,就需要通過tf.device來手工指定。

1 import tensorflow as tf

2 3 a=tf.variable(0,name='a')

4 with tf.device('/gpu:0'):

5 b=tf.variable(0,name='b')

6 #通過allow_soft_placement引數自動將無法放在gpu上的操作放回cpu上

7 sess=tf.session(config=tf.configproto(allow_soft_placement=true,log_device_placement=true))

8 sess.run(tf.initialize_all_variables()

在以上**中可以看到生成常量a和b的操作被載入到cpu上,而加法操作被放到第二個gpu上。在tensorflow中,不是所有的操作都可以被放在gpu上,如果強行將無法放在gpu上的操作指定到gpu上,程式就會報錯。

在gpu上,tf.variable操作只支援實數型(float16 float32 double)的引數。不支援整數型引數。tensorflow在生成會話時可以指定allow_soft_placement引數。當這個引數設定為true時,如果運算無法由gpu執行,那麼tensorflow會自動將它放到cpu上執行。

tensorflow使用GPU小記

import os os.envrion cuda visible devices 0,1 在cmd中輸入 nvidia smi 要想不斷重新整理記錄 nvidia smi l 報錯 failed to create cublas handle cublas status alloc failed原...

Tensorflow中使用CPU及GPU的引數設定

在進行svm機器學習訓練時,報dst tensorflow is not initialized錯誤,為視訊記憶體使用溢位錯誤。解決方式為使用cpu或者限制gpu視訊記憶體。1 設定使用gpu還是cpu import os os.environ cuda visible devices 0 2 安裝...

TensorFlow 設定GPU使用量

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