日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Tensorflow使用GPU加速

發(fā)布時(shí)間:2024/9/5 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 Tensorflow使用GPU加速 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

測(cè)試faster-rcnn時(shí),cpu計(jì)算速度較慢,調(diào)整代碼改為gpu加速運(yùn)算

將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"):

之后出現(xiàn)顯存占滿、而GPU利用率為0的情況,經(jīng)查閱官方文檔得知“在GPU上,tf.Variable操作只支持實(shí)數(shù)型(float16 float32 double)的參數(shù)。不支持整數(shù)型參數(shù)

CPU計(jì)算幾乎占滿,可見(jiàn)tensorflow的運(yùn)行空間在顯存上,而計(jì)算實(shí)際是在cpu上執(zhí)行的

用如下代碼可檢測(cè)tensorflow的能使用設(shè)備情況:

1 from tensorflow.python.client import device_lib
2 print(device_lib.list_local_devices()) 

Tensorflow程序可以通過(guò)tf.device函數(shù)來(lái)指定運(yùn)行每一個(gè)操作的設(shè)備,這個(gè)設(shè)備可以是本地CPU或GPU,也可以是某一臺(tái)遠(yuǎn)程服務(wù)器。

tf.device函數(shù)可以通過(guò)設(shè)備的名稱來(lái)指定執(zhí)行運(yùn)算的設(shè)備。

如CPU在tensorflow中的名稱為/cpu:0。在默認(rèn)情況下,即使機(jī)器有很多個(gè)CPU,tensorflow也不會(huì)區(qū)分它們,所有的CPU都使用/cpu:0作為名稱。
而一臺(tái)機(jī)器上不同GPU的名稱是不同的,第n個(gè)GPU在tensorflow中的名稱為/gpu:n。
tensorflow提供了一個(gè)會(huì)計(jì)的方式來(lái)查看運(yùn)行每一個(gè)運(yùn)算的設(shè)備。在生成會(huì)話時(shí),可以通過(guò)設(shè)置log_device_placement參數(shù)來(lái)打印運(yùn)行每一個(gè)運(yùn)算的設(shè)備。

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 #通過(guò)log_device_placement參數(shù)來(lái)輸出運(yùn)行每一個(gè)運(yùn)算的設(shè)備
6 sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
7 print (sess.run(c))

在以上代碼中,tensorflow程序生成會(huì)話時(shí)加入了參數(shù)log_device_placement=True,所以程序會(huì)將運(yùn)行每一個(gè)操作的設(shè)備輸出到屏幕。

在配置好GPU的環(huán)境中,如果操作沒(méi)有明確指定運(yùn)行設(shè)備,那么tensorflow會(huì)優(yōu)先選擇GPU。但是,盡管有4個(gè)GPU,在默認(rèn)情況下,tensorflow只會(huì)將運(yùn)算優(yōu)先放到/gpu:0上。如果需要將某些運(yùn)算放到不同的GPU或CPU上,就需要通過(guò)tf.device來(lái)手工指定。

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 #通過(guò)allow_soft_placement參數(shù)自動(dòng)將無(wú)法放在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上,而加法操作被放到第二個(gè)GPU上。在tensorflow中,不是所有的操作都可以被放在GPU上,如果強(qiáng)行將無(wú)法放在GPU上的操作指定到GPU上,程序就會(huì)報(bào)錯(cuò)。
在GPU上,tf.Variable操作只支持實(shí)數(shù)型(float16 float32 double)的參數(shù)。不支持整數(shù)型參數(shù)。tensorflow在生成會(huì)話時(shí)可以指定allow_soft_placement參數(shù)。當(dāng)這個(gè)參數(shù)設(shè)置為T(mén)rue時(shí),如果運(yùn)算無(wú)法由GPU執(zhí)行,那么tensorflow會(huì)自動(dòng)將它放到CPU上執(zhí)行。

改進(jìn)方式未完待續(xù)......

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

總結(jié)

以上是生活随笔為你收集整理的Tensorflow使用GPU加速的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。