看板 Python 關於我們 聯絡資訊
最近在玩強化訓練的時候遇到一點小問題就是 因為模型的深度很深需要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://www.ptt.cc/bbs/Python/M.1663825269.A.81B.html
lycantrope: 預測跟訓練只差在backpropagation,不太懂你的目的09/22 13:54
目的要縮減整個程式跑的時間 因為我default是用gpu在訓練 訓練上gpu訓練會比使用cpu快很多 但model訓練完之後做 predict predict時cpu速度會比較快 (雖然一次只差幾毫秒,玩一場遊戲下來會有幾百幾千步,每次都會用到predict, 兩者 的差異會很明顯) 所以我想要在使用gpu與cpu在loop中切換
chang1248w: 什麼情況用gpu跑會沒有效率?09/22 13:55
lycantrope: 應該沒有情況是gpu跑DL輸cpu09/22 13:57
我測試單純predict cpu會贏也 大概是gpu啟動需要時間吧!? 雖然只是幾毫秒 但是幾千步下來就差好幾十秒
chang1248w: 你要在cpu上做預測那就必須把上個epoch更新完的參數09/22 13:58
chang1248w: 備份到cpu上面跑,我不認為這會比傳結果快多少09/22 13:58
我有用model_colon是真的更慢沒錯==
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
chang1248w: predict有batch_size參數可以傳09/22 14:13
chang1248w: 然後你的模型如果是pure tf implement 的話,可以試09/22 14:17
chang1248w: 試xla,一般會有2-10倍的提速09/22 14:17
謝謝馬上來研究
chang1248w: https://www.tensorflow.org/xla/tutorials/09/22 14:17
chang1248w: autoclustering_xla09/22 14:17
chang1248w: https://bit.ly/3qY7PJq 09/22 14:18
chang1248w: 是說為啥predict 的時候要傳入y?09/22 14:19
抱歉打錯@@ ※ 編輯: snakei14702 (211.23.79.225 臺灣), 09/22/2022 14:29:39
lycantrope: 你一定是測錯 不太可能模型深gpu還比cpu慢... 09/22 14:50
chang1248w: 也不是沒有可能,.predict 的實現其實沒有很高效,常 09/22 18:30
chang1248w: 常會卡記憶體io,尤其預設的batch_size小的要死,這 09/22 18:30
chang1248w: 坑過我 09/22 18:30
chang1248w: 不過我也沒有驗證過就是 09/22 18:31
ToastBen: https://i.imgur.com/HJmE2OI.jpg 09/23 13:28
chang1248w: 長見識 09/23 20:32