作者snakei14702 (阿中是我們的神)
看板Python
標題[問題] tensorflow- 訓練在gpu 預測在cpu
時間Thu Sep 22 13:41:07 2022
最近在玩強化訓練的時候遇到一點小問題就是
因為模型的深度很深需要GPU來跑
但是在run env 計算(中間有用到model.predict)一些東西的時候
如果用GPU跑就顯得太慢沒效率...
所以想要請教一下各位有沒有辦法在fit model時用GPU
然後用model.prict的時候用cpu呢?
簡化的代碼如下:
for i in range(1000):
model.fit(x,y)
model.predict(x)
基本上我有用過
for i in range(1000):
os.environ["CUDA_VISIBLE_DEVICES"]="0"
model.fit(x,y)
os.environ["CUDA_VISIBLE_DEVICES"]="-1"
model.predict(x)
and
for i in range(1000):
with tf.device('/GPU:0'):
model.fit(x,y)
with tf.device('/CPU:0'):
model.predict(x)
這兩個方法都沒效= =
有點難過
不知道版上強者沒有研究過,可以指導一下小弟
非常感謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.79.225 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1663825269.A.81B.html
1F:推 lycantrope: 預測跟訓練只差在backpropagation,不太懂你的目的09/22 13:54
目的要縮減整個程式跑的時間
因為我default是用gpu在訓練
訓練上gpu訓練會比使用cpu快很多
但model訓練完之後做 predict
predict時cpu速度會比較快
(雖然一次只差幾毫秒,玩一場遊戲下來會有幾百幾千步,每次都會用到predict, 兩者
的差異會很明顯)
所以我想要在使用gpu與cpu在loop中切換
2F:→ chang1248w: 什麼情況用gpu跑會沒有效率?09/22 13:55
3F:推 lycantrope: 應該沒有情況是gpu跑DL輸cpu09/22 13:57
我測試單純predict cpu會贏也
大概是gpu啟動需要時間吧!?
雖然只是幾毫秒
但是幾千步下來就差好幾十秒
4F:→ chang1248w: 你要在cpu上做預測那就必須把上個epoch更新完的參數09/22 13:58
5F:→ chang1248w: 備份到cpu上面跑,我不認為這會比傳結果快多少09/22 13:58
我有用model_colon是真的更慢沒錯==
6F:→ chang1248w: 你的寫法也不像平行處理09/22 14:00
※ 編輯: snakei14702 (211.23.79.225 臺灣), 09/22/2022 14:07:46
※ 編輯: snakei14702 (211.23.79.225 臺灣), 09/22/2022 14:11:10
7F:→ chang1248w: predict有batch_size參數可以傳09/22 14:13
8F:→ chang1248w: 然後你的模型如果是pure tf implement 的話,可以試09/22 14:17
9F:→ chang1248w: 試xla,一般會有2-10倍的提速09/22 14:17
謝謝馬上來研究
11F:→ chang1248w: autoclustering_xla09/22 14:17
13F:→ chang1248w: 是說為啥predict 的時候要傳入y?09/22 14:19
抱歉打錯@@
※ 編輯: snakei14702 (211.23.79.225 臺灣), 09/22/2022 14:29:39
14F:→ lycantrope: 你一定是測錯 不太可能模型深gpu還比cpu慢... 09/22 14:50
15F:→ chang1248w: 也不是沒有可能,.predict 的實現其實沒有很高效,常 09/22 18:30
16F:→ chang1248w: 常會卡記憶體io,尤其預設的batch_size小的要死,這 09/22 18:30
17F:→ chang1248w: 坑過我 09/22 18:30
18F:→ chang1248w: 不過我也沒有驗證過就是 09/22 18:31
20F:→ chang1248w: 長見識 09/23 20:32