看板 DataScience 關於我們 聯絡資訊
想要請問版上各位pytorch的使用者會不會有記憶體管理的問題呢 我目前遇到的狀況是存下來的pth file約800MB 包含了optimizer之類的 所有關於training的參數與超參數,但是load進去環境裡面之後立刻就佔了2.4GB 我相信是會有一些overhead沒錯,但是三倍這個數字好像超乎我的理解之外了 接著是一張4000 * 6000的圖片就會佔100MB左右的記憶體,當我call model(img)之後,記憶體的使用量會瞬間暴增5GB,我有點不太懂這裡面到底 發生甚麼事,又應該要做甚麼來解決呢 我目前已經是有call .eval()也有在with torch.no_grad()裡面作業了 但是還是只能一次inference一張圖片,結果gpu的效果大打折扣 有沒有人遇到類似的情況或者知道該怎麼解決這個問題呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.218.7.190 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1616211193.A.78E.html
yiefaung: 看你model中間最大的feature map? 03/21 01:38
jameschiou: CNN需要intermidiate result才能做backpropagation 03/21 17:51
jameschiou: 喔喔抱歉沒仔細看問題...的確如樓上說要注意中間最大 03/21 17:54
jameschiou: 的feature map 03/21 17:54
yoyololicon: 你圖也太大了吧... 03/22 08:41
clansoda: 感謝各位回覆,確實可以研究這件事 03/22 22:23
clansoda: yoyo大,我這個是原始圖片,進去前會resize成800 * 800 03/22 22:23
clansoda: 想請問一下,我自己測試後發現我一開始讀取alexnet會吃 03/22 23:17
clansoda: 約1.4GB的記憶體,我模擬5 x 3 x 224 x 224的資料約佔 03/22 23:18
clansoda: 不到1MB的記憶體,我開啟no_grad之後跑model(inputs) 03/22 23:18
clansoda: 記憶體仍會從1414上升到1540,也就是上升了126MB的記憶 03/22 23:19
clansoda: 體用量,根據我的理解記憶體的使用量理論上應該是weight 03/22 23:20
clansoda: 加上gradients加上中間計算的hidden embedding size 03/22 23:20
clansoda: 前面weight已經計算過了,gradients我也先關掉了 03/22 23:20
clansoda: 難道剩下的記憶體就是中間計算層所占用的? 03/22 23:21
clansoda: 根據實驗,這個記憶體的佔用會隨著batch size上升而上升 03/22 23:21
clansoda: 請問有人知道這個記憶體的使用是來自哪裡呢? 03/22 23:21
yiefaung: 就真的是feature map 不然你中間結果是存在哪裡...當然 03/23 11:07
yiefaung: 也跟batch size成正比 03/23 11:07
yiefaung: 如果你圖剛讀進來是用int8存 5*3*224*224/1024/1024= 03/23 11:10
yiefaung: 0.717 的確不到1MB 然後你運算的時候用float32 就直接4 03/23 11:13
yiefaung: 倍起跳 再來你圖變大 batch size變大 feature map變大 03/23 11:13
yiefaung: 記憶體用量當然也變大 03/23 11:13
watashino: 正常feature map不會比圖本身大阿 03/27 01:00
watashino: 當然還是要看你model啦 03/27 01:00
yoyololicon: feature map幾乎都比圖大才對吧 第一層直接三個chan 03/27 08:48
yoyololicon: nel變64個channel之類 03/27 08:48