【问题标题】:ffmpeg - cuda encode - OpenEncodeSessionEx failed: out of memoryffmpeg - cuda 编码 - OpenEncodeSessionEx 失败:内存不足
【发布时间】:2017-09-24 18:35:40
【问题描述】:

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

我有 2 个 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 似乎根本没有使用,第一个上的内存足够多,可以支持第三个文件。

任何想法都会非常有帮助!

【问题讨论】:

  • 来自 ffmpeg 信息页面 here "有关交互式使用 ffmpeg 命令行工具的问题已离题。"
  • 你好 VelDev!你能改变你接受的答案吗?第二个答案实际上为您提供了解决问题的方法(即应用nvidia-patch)。

标签: ffmpeg gpu x264 multi-gpu


【解决方案1】:

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

【讨论】:

  • 为什么他们的 GTX 1050 Ti 被认为是不合格的,因此在官方矩阵中明确列出最多允许 3 个会话时,它支持最多 2 个会话?从哪里看出什么是合格的,什么是不合格的?
  • 回答我自己的问题,所有消费类 (GeForce) 卡都被认为是不合格的,所有专业版 (Quadro) 和服务器 (Tesla) 都是合格的。
【解决方案2】:
  1. 由于没有关于如何应用编码上下文的代码,我不知道为什么不使用第二个 gpu。您是否指定在av_opt_set() 或命令行参数中使用它?
  2. 这里更重要的问题是 geforce 卡在一个系统中不能拥有超过 2 个编码会话。如果你需要更多,你必须使用那些昂贵的,比如 quadro、tesla 等。

【讨论】:

  • 谢谢,不知道这些卡只支持 2 个 econding 会话,这非常令人失望。我尝试过使用 -gpu 1。
  • 我的命令:ffmpeg -analyzeduration 100M -probesize 100M -gpu 2 -hwaccel cuvid -c:v h264_cuvid -i in.mp4 -vf scale_npp=858:480 -maxrate 800K -bufsize 4000K -threads 0 -profile:v main -level 4.0 -movflags +faststart -preset fast -c:v h264_nvenc -ac 2 out.mp4
  • @VelDev 您没有在此类命令中指定编码 gpu。 -gpu-i 之前只适用cuvid 解码部分。应该有另一个-gpunvenc
猜你喜欢
  • 2018-07-06
  • 2021-05-20
  • 2022-10-17
  • 1970-01-01
  • 2019-01-20
  • 2012-02-09
  • 2011-06-26
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多