ffmpeg - cuda编码 - OpenEncodeSessionEx失败:内存不足

时间:2017-09-24 18:35:40

标签: ffmpeg gpu x264 multi-gpu

我在使用GPU(CUDA)进行ffmpeg视频编码时出现问题。

我有2x nVidia GTX 1050 Ti

当我尝试进行多个并行编码时出现问题。超过2个进程和ffmpeg就像这样死:

[h264_nvenc @ 0xcc1cc0] OpenEncodeSessionEx failed: out of memory (10)

问题是nvidia-smi显示gpu上有很多可用的资源:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.66                 Driver Version: 384.66                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 105...  Off  | 00000000:41:00.0 Off |                  N/A |
| 40%   37C    P0    42W /  75W |    177MiB /  4038MiB |     30%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 105...  Off  | 00000000:42:00.0 Off |                  N/A |
| 40%   21C    P8    35W /  75W |     10MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

似乎根本没有使用第二个GPU,并且第一个GPU上剩余的内存足够多,以支持第三个文件。

任何想法都会非常有用!

2 个答案:

答案 0 :(得分:2)

  1. 由于没有关于如何应用编码上下文的代码,我无法说明为什么不使用第二个gpu。您是否已在if currentNode.isRightChild() and currentNode.parent.isLeftChild(): self.rotateLeft(currentNode.parent) self.rotateRight(currentNode.parent.parent) // Here elif currentNode.isLeftChild() and currentNode.parent.isRightChild(): self.rotateRight(currentNode.parent) self.rotateLeft(currentNode.parent.parent) // Here 或命令行参数中指定使用它?
  2. 这里更重要的问题是geforce卡在一个系统中不能拥有超过2个编码会话。如果你需要更多,你必须使用那些昂贵的,如quadro,特斯拉等。

答案 1 :(得分:2)

实际上您的卡是“不合格的”(就NVIDIA而言)并且仅支持2个同时会话。您可以咨询https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder或下载NVENC SDK,其中包含带有合格和非合格GPU许可条款的pdf。有一些驱动程序补丁(375.39和396.24,对于linux)禁用会话计数检查,你可以试试https://github.com/keylase/nvidia-patch