L20 gpu 显存有剩余但是无法继续分配显存

使用nvidia-smi 查看L20 GPU显存用量:28568MiB / 46068MiB,但是使用pytorch进行简单矩阵运算时有显存不足的报错:

Traceback (most recent call last):
  File "./test_pytorch.sh", line 7, in <module>
    matrix1 = torch.tensor([[1.0, 2.0], [3.0, 4.0]], device=device)
RuntimeError: CUDA error: out of memory

这是什么原因,应该如何排查问题

Hi @wolf11 :wave:

欢迎访问 NVIDIA 开发者论坛。我转给相关的同事看一下。

补充一下前提:这张gpu上有85路视频解码任务正在运行。
换了高分辨率的视频测了一下,也是85路,显存占用量比原来多了3G左右。85路以后无论是视频解码还是pytorch矩阵运算都无法分配显存。这样看来不是显存的问题,有点像并发量限制了,辛苦看下是否有并发量的限制。

用的什么工具,是不是buffer已经被分配了,但是还没有使用

用nvidia-smi看的显存使用情况,解码不同分辨率的视频,用的显存不一样,但都是支持85路,看现象像是有并发数量的限制呢。您说的buffer是显存吗,我应该怎样验证是否是分配而未使用?

我无法确定您的具体情况,比如您是并发处理85路视频,那么会在GPU中保留一部分显存,会有类似存储池之类的。这得看您使用的具体工具之类的

辛苦帮忙看一下, 我是使用ffmpeg进行视频解码,使用的ffmpeg命令是:

./ffmpeg  -hwaccel cuvid -c:v h264_cuvid -hwaccel_device 0  -i ${input} -vf "hwdownload, format=nv12, fps=fps=${fps}" -threads 6  -f image2 -y ./data/%d.jpg

最多只能进行85路解码,使用 nvidia-smi 指令查看显存使用情况:28568MiB / 46068MiB,gpu使用率45%,使用 nvidia-smi -q -d UTILIZATION | grep Decoder查看解码器使用率80%。开启第86路解码的时候会报错:

[AVHWDeviceContext @ 0x38d4b00] cu->cuCtxCreate(&hwctx->cuda_ctx, 4, cu_device) failed -> CUDA_ERROR_OUT_OF_MEMORY: out of memory
[h264_cuvid @ 0x3725c00] Error creating a CUDA device
cuvid hwaccel requested for input stream #:1, but cannot be initialized.
[h264_cuvid @ 0x3725c00] ff_get_format failed: -1

然后又使用pytorch做了简单的矩阵乘法运算,也是报错:

Traceback (most recent call last):
  File "./test_pytorch.sh", line 7, in <module>
    matrix1 = torch.tensor([[1.0, 2.0], [3.0, 4.0]], device=device)
RuntimeError: CUDA error: out of memory