Tensorflow使用GPU加速

測試faster-rcnn時,cpu計算速度較慢,調整代碼改成gpu加速運算python

  • 將 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,也能夠是某一臺遠程服務器。spa

tf.device函數能夠經過設備的名稱來指定執行運算的設備。.net

如CPU在tensorflow中的名稱爲/cpu:0。在默認狀況下,即便機器有不少個CPU,tensorflow也不會區分它們,全部的CPU都使用/cpu:0做爲名稱。
而一臺機器上不一樣GPU的名稱是不一樣的,第n個GPU在tensorflow中的名稱爲/gpu:n。
tensorflow提供了一個會計的方式來查看運行每個運算的設備。在生成會話時,能夠經過設置log_device_placement參數來打印運行每個運算的設備。code

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,因此程序會將運行每個操做的設備輸出到屏幕。blog

在配置好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上執行。it

改進方式未完待續......

ref:https://blog.csdn.net/VioletHan7/article/details/82769531

相關文章
相關標籤/搜索