測試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 ...