請問用pytorch訓練過程,是否可以實現GPU一直處於訓練狀態,模型評價交給CPU?

時間 2021-05-10 23:39:08

1樓:

當然可以啦,但是有兩個問題需要你考慮:

第乙個是大部分的pytorch程式都是使用CPU對DataLoader進行操作的,也就是說就算是你的GPU一直實在處於訓練狀態,你的CPU也不是閒著的,這個很好看,開個nvidia-smi同時再開個htop看看cpu和gpu佔用率就知道了。另外你應該聽說過調numworker和prefetch factor有可能能提高GPU佔用率,這也是這個原因之一。 這時候你要是在CPU上再開乙個推理任務,很有可能CPU就卡脖子了,GPU資料不足也被卡了,整體效率底下。

第二,這個在GPU上個train好的模型是要把資料拷貝回CPU才能進行推理的。這個拷貝的過程一般是同步的,也就是說這個期間CPU、GPU都不能幹其他的活 (當然前提是你只有乙個stream),如果你評價的次數比較多的話,又會被卡脖子,得不償失。

所以現在主流的還是都上GPU直接在GPU上執行就好了,一般情況下速度很快的。

2樓:醒了麼

當然可以,訓練乙個程序,模型評估乙個程序,前者訓練生成模型,後者讀取模型進行評估,可以用佇列來完成兩者之間的通訊。

當然,也可以在乙個主機上訓練,在另乙個主機上模型評估,使用RabbitMQ訊息佇列來完成兩者之間的通訊。

不過,用cpu來模型評估怕是…

3樓:xiedidan

這個當然是可以的,開乙個新程序初始化CPU就行

但是這樣節約不了多少時間,一般評價都不會設計得太長,加之CPU推理速度遠低於GPU,增加整個Pipeline的複雜度是否划算?

更好的方案依然是用所有GPU去訓練,之後用所有GPU去評價,GPU一直不空也就發揮最大價值了

4樓:未成型的工程師

跟你稍微不一樣的地方,我是用兩塊GPU開了兩個程序,乙個程序用於訓練,乙個程序用於驗證

整體思路:

(1).用shell指令碼同時開啟訓練程序和驗證程序nohup python train.py --GPU=0 >train.log &

python evaluate.py --GPU=1(2)train.py

(3)evaluate.py 用pyinotify實現實時監控是否有新模型生成,如果有就進行驗證

具體可參考:

5樓:Lanking

gpu訓練時cpu也是協同使用的。比較精細的做法是可以限制使用cpu核心數,比如只用一般的核心,修改omp thread 變數。然後剩下一半用來做別的事情。

這種情況下需要開兩個python程序,乙個訓練乙個驗證

6樓:最大的夢想家

沒有很大意義,因為訓練也是需要CPU參與的,CPU的空閒算力幾乎沒有。然後evaluate本身也是執行模型呀,在CPU上是很慢的。結果反而效率會更差。

飛行學員在飛行訓練過程中的13小時篩選是否合格的標準是什麼?

Y C喜餅 不知道這個13小時是不是屬於放單時間,國外學飛的我這兒是20小時,20小時放不了的話就需要籤乙個可能停飛協議,然後可以延長到25小時!主要就是考察乙個人獨自操控飛機的能力,不光是飛飛機,而是所有的多工處理的能力! select 我在國外學飛,五邊的要求是25個小時,考察點,很多,主要觀念...

深度學習訓練過程中loss不下降,驗證集的準確率不斷上公升,是怎麼回事?

一路念向北 用focal loss進行二分類,就出現loss不下降,但準確率不斷上公升,迭代幾次後val accuracy達到1,不知道怎麼調參。嘗試改了幾組,要麼還是這種情形,要麼變成loss等於nan,快愁死我了 論智 這很正常,就像考試平均分沒漲,但通過率提高了 可能是有些不及格的人考得更差了...

哪些能力是你刻意訓練過的?

比起該如何解決乙個問題,更難能可貴的是如何提乙個問題。這個資訊篩選能力不是指單純的應付閱讀理解的那個資訊篩選能力,而是乙個綜合判斷能力。舉個例子,對於大多數人來說,總會有那麼幾個人生轉折點,比如高考,比如選專業。那這一條河該不該過?你聽誰的?聽松鼠的,還是聽老牛的?松鼠和老牛尚且是倖存者偏差裡的存活...