我正在嘗試使用 PyTorch 訓練模型。開始模型訓練時,我收到以下錯誤訊息:
RuntimeError: CUDA out of memory. Tried to allocate 5.37 GiB (GPU 0; 7.79 GiB total capacity; 742.54 MiB already allocated; 5.13 GiB free; 792.00 MiB reserved in total by PyTorch)
我想知道為什么會發生此錯誤。從我看來,我有 7.79 GiB 的總容量。它宣告的數字 (742 MiB 5.13 GiB 792 MiB) 加起來不會超過 7.79 GiB。當我檢查時,nvidia-smi我看到這些行程正在運行
| 0 N/A N/A 1047 G /usr/lib/xorg/Xorg 168MiB |
| 0 N/A N/A 5521 G /usr/lib/xorg/Xorg 363MiB |
| 0 N/A N/A 5637 G /usr/bin/gnome-shell 161MiB |
我意識到將所有這些數字相加可能會使其接近(168 363 161 742 792 5130 = 7356 MiB),但這仍然小于我的 GPU 規定的容量。
uj5u.com熱心網友回復:
這更像是評論,但值得指出。
一般來說,原因確實是 talonmies 所評論的,但您對數字的總結不正確。讓我們看看當張量移動到 GPU 時會發生什么(我在我的 PC 上用 RTX2060 和總共 5.8G 可用 GPU 記憶體試過這個):
讓我們以互動方式運行以下 python 命令:
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.zeros(1).cuda()
>>> b = torch.zeros(500000000).cuda()
>>> c = torch.zeros(500000000).cuda()
>>> d = torch.zeros(500000000).cuda()
以下是輸出watch -n.1 nvidia-smi:
torch匯入后:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
在創建之后a:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 1251MiB |
如您所見,1251MB即使您只需要一個浮點數,也需要讓 pytorch 開始使用 CUDA。
在創建之后b:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 3159MiB |
b需要500000000*4 bytes = 1907MB,這與python行程使用的記憶體增量相同。
在創建之后c:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
這里并不奇怪。
在創建之后d:
| 0 N/A N/A 1121 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 14701 C python 5067MiB |
沒有進一步的記憶體分配,并拋出OOM錯誤:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: CUDA out of memory. Tried to allocate 1.86 GiB (GPU 0; 5.80 GiB total capacity; 3.73 GiB already allocated; 858.81 MiB free; 3.73 GiB reserved in total by PyTorch)
明顯地:
- “已分配”部分包含在“PyTorch共預留”部分。您不能將它們相加,否則總和超過可用記憶體總量。
- 在 GPU (
1251M)上運行 pytorch 所需的最小記憶體不包括在“保留總數”部分中。
所以在你的情況下,總和應該包括:
- 792MB(共預留)
- 1251MB(在 GPU 上運行 pytorch 的最小值,假設這對我們倆來說都是一樣的)
- 5.13GB(免費)
- 168 363 161=692MB(其他行程)
它們的總和約為 7988MB=7.80GB,這正是您的 GPU 總記憶體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/364535.html
上一篇:測驗資料集的ROC曲線
下一篇:應用插補np.nan值后仍然存在
