最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 運(yùn)行一段時間后出現(xiàn)GPU OOM的問題

 更新時間:2021年06月01日 17:18:54   作者:ASR_THU  
這篇文章主要介紹了pytorch 運(yùn)行一段時間后出現(xiàn)GPU OOM的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

pytorch的dataloader會將數(shù)據(jù)傳到GPU上,這個過程GPU的mem占用會逐漸增加,為了避免GPUmen被無用的數(shù)據(jù)占用,可以在每個step后用del刪除一些變量,也可以使用torch.cuda.empty_cache()釋放顯存:

del targets, input_k, input_mask
torch.cuda.empty_cache()

這時能觀察到GPU的顯存一直在動態(tài)變化。

但是上述方式不是一個根本的解決方案,因為他受到峰值的影響很大。比如某個batch的數(shù)據(jù)量明顯大于其他batch,可能模型處理該batch時顯存會不夠用,這也會導(dǎo)致OOM,雖然其他的batch都能順利執(zhí)行。

顯存的占用跟這幾個因素相關(guān):

模型參數(shù)量

batch size

一個batch的數(shù)據(jù) size

通常我們不希望改變模型參數(shù)量,所以只能通過動態(tài)調(diào)整batch-size,使得一個batch的數(shù)據(jù) size不會導(dǎo)致顯存OOM:

ilen = int(sorted_data[start][1]['input'][0]['shape'][0])
olen = int(sorted_data[start][1]['output'][0]['shape'][0])
# if ilen = 1000 and max_length_in = 800
# then b = batchsize / 2
# and max(1, .) avoids batchsize = 0
# 太長的句子會被動態(tài)改變bsz,單獨成一個batch,否則padding的部分就太多了,數(shù)據(jù)量太大,OOM
factor = max(int(ilen / max_length_in), int(olen / max_length_out))
b = max(1, int(batch_size / (1 + factor)))
#b = batch_size
end = min(len(sorted_data), start + b)
minibatch.append(sorted_data[start:end])
if end == len(sorted_data):
    break
start = end

此外,如何選擇一個合適的batchsize也是個很重要的問題,我們可以先對所有數(shù)據(jù)按照大?。ㄩL短)排好序(降序),不進(jìn)行shuffle,按照64,32,16依次嘗試bsz,如果模型在執(zhí)行第一個batch的時候沒出現(xiàn)OOM,那么以后一定也不會出現(xiàn)OOM(因為降序排列了數(shù)據(jù),所以前面的batch的數(shù)據(jù)size最大)。

還有以下問題

pytorch increasing cuda memory OOM 問題

改了點model 的計算方式,然后就 OOM 了,調(diào)小了 batch_size,然后發(fā)現(xiàn)發(fā)現(xiàn)是模型每次迭代都會動態(tài)增長 CUDA MEMORY, 在排除了 python code 中的潛在內(nèi)存溢出問題之后,基本可以把問題定在 pytorch 的圖計算問題上了,說明每次迭代都重新生成了一張計算圖,然后都保存著在,就 OOM 了。

參考

CUDA memory continuously increases when net(images) called in every iteration

Understanding graphs and state

說是會生成多個計算圖:

loss = SomeLossFunction(out) + SomeLossFunction(out)

準(zhǔn)備用 sum來避免多次生成計算圖的問題:

loss = Variable(torch.sum(torch.cat([loss1, loss2], 0)))

然而,調(diào)著調(diào)著就好了,和報錯前的 code 沒太大差別。估計的原因是在pycharm 遠(yuǎn)程連接服務(wù)器的時候 code 的保存版本差異問題,這個也需要解決一下。

還有個多次迭代再計算梯度的問題,類似于 caffe中的iter_size,這個再仔細(xì)看看。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Unittest原理及基本使用方法

    Python Unittest原理及基本使用方法

    這篇文章主要介紹了Python Unittest原理及基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python Web程序搭建簡單的Web服務(wù)器

    Python Web程序搭建簡單的Web服務(wù)器

    這篇文章主要介紹了Python Web程序搭建簡單的Web服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python基于Kivy寫一個圖形桌面時鐘程序

    python基于Kivy寫一個圖形桌面時鐘程序

    這篇文章主要介紹了python如何基于Kivy 寫一個桌面時鐘程序,幫助大家更好的利用python開發(fā)圖形程序,感興趣的朋友可以了解下
    2021-01-01
  • 基于python純函數(shù)實現(xiàn)井字棋游戲

    基于python純函數(shù)實現(xiàn)井字棋游戲

    這篇文章主要介紹了基于python純函數(shù)實現(xiàn)井字棋游戲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • pycharm創(chuàng)建一個python包方法圖解

    pycharm創(chuàng)建一個python包方法圖解

    在本篇文章中小編給大家分享了關(guān)于pycharm怎么創(chuàng)建一個python包的相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-04-04
  • python編寫接口測試文檔(以豆瓣搜索為例)

    python編寫接口測試文檔(以豆瓣搜索為例)

    接口測試的方式有很多,比如可以用工具(jmeter,postman)之類,也可以自己寫代碼進(jìn)行接口測試,這篇文章主要給大家介紹了關(guān)于python編寫接口測試文檔,本文以豆瓣搜索功能為例,需要的朋友可以參考下
    2021-07-07
  • Python OpenCV中的resize()函數(shù)的使用

    Python OpenCV中的resize()函數(shù)的使用

    這篇文章主要介紹了Python OpenCV中的resize()函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 分解oracle存儲過程或函數(shù)調(diào)試過程步驟

    分解oracle存儲過程或函數(shù)調(diào)試過程步驟

    這篇文章主要介紹了調(diào)試oracle存儲過程或函數(shù)過程步驟,文中附含詳細(xì)的圖文操作步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 詳解Python中的序列化與反序列化的使用

    詳解Python中的序列化與反序列化的使用

    這篇文章主要介紹了詳解Python中的序列化與反序列化的使用,針對pickle和cPickle對象進(jìn)行了探究,需要的朋友可以參考下
    2015-06-06
  • Python調(diào)用MySQLdb插入中文亂碼的解決

    Python調(diào)用MySQLdb插入中文亂碼的解決

    這篇文章主要介紹了Python調(diào)用MySQLdb插入中文亂碼的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

栾城县| 房山区| 顺昌县| 姜堰市| 宜章县| 罗源县| 会宁县| 天等县| 通道| 嘉善县| 基隆市| 永定县| 亳州市| 邹平县| 霞浦县| 舟山市| 大埔县| 桑日县| 申扎县| 翼城县| 胶州市| 长沙县| 阳朔县| 雅安市| 仙游县| 山阴县| 锡林郭勒盟| 青海省| 会同县| 游戏| 图木舒克市| 静宁县| 湟源县| 溆浦县| 白沙| 衡阳市| 宁夏| 丁青县| 大石桥市| 静安区| 平利县|