ffmpeg - cuda 编码 - OpenEncodeSessionEx 失败:内存不足
ffmpeg - cuda encode - OpenEncodeSessionEx failed: out of memory
我在使用 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 似乎根本没有使用,第一个 GPU 上剩余的内存绰绰有余,可以支持第三个文件。
任何想法都会非常有帮助!
- 由于没有关于如何应用编码上下文的代码,我不知道为什么不使用第二个 gpu。您是否在
av_opt_set()
或命令行参数中指定使用它?
- 这里更重要的问题是geforce卡在一个系统中不能拥有超过2个编码会话。如果你需要更多,你必须使用那些昂贵的,如 quadro、tesla 等。
实际上您的显卡是 'non-qualified'(就 NVIDIA 而言)并且仅支持 2 个同时会话。您可以咨询 https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder or download NVENC SDK, which contains pdf with license terms for qualified and non-qualified GPUs. There are some patches for drivers which disables session count checking, you could try them https://github.com/keylase/nvidia-patch
我在使用 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 似乎根本没有使用,第一个 GPU 上剩余的内存绰绰有余,可以支持第三个文件。
任何想法都会非常有帮助!
- 由于没有关于如何应用编码上下文的代码,我不知道为什么不使用第二个 gpu。您是否在
av_opt_set()
或命令行参数中指定使用它? - 这里更重要的问题是geforce卡在一个系统中不能拥有超过2个编码会话。如果你需要更多,你必须使用那些昂贵的,如 quadro、tesla 等。
实际上您的显卡是 'non-qualified'(就 NVIDIA 而言)并且仅支持 2 个同时会话。您可以咨询 https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder or download NVENC SDK, which contains pdf with license terms for qualified and non-qualified GPUs. There are some patches for drivers which disables session count checking, you could try them https://github.com/keylase/nvidia-patch