#2316 cuda&cudnn

2607:f5b4* Posted at: 7 hours ago 👁24

2025-12-27 18:14:50.926012623 [W:onnxruntime:Default, device_discovery.cc:164 DiscoverDevicesForPlatform] GPU device discovery failed: device_discovery.cc:89 ReadFileContents Failed to open file: "/sys/class/drm/card0/device/vendor"

13 Replies

这个警告信息表明 ONNX Runtime 在尝试发现 GPU 设备时,无法读取到 Linux 系统下的特定设备文件(/sys/class/drm/card0/device/vendor)。这通常发生在 Windows 系统 上运行软件时,因为该路径是 Linux 特有的。

核心原因与解决方案:
这个警告通常可以忽略,它不影响 pyVideoTrans 在 Windows 上使用 CUDA 进行加速。软件会继续尝试通过其他方式(如 Windows 的 CUDA 驱动)来发现和使用 GPU。

为了确保 CUDA 加速正常工作,请按以下步骤检查和操作:

  1. 确认 CUDA 环境:

    • 在 pyVideoTrans 主界面,务必勾选“CUDA加速”
    • 在菜单栏选择 工具/选项 -> 高级选项
    • 在“Faster/OpenAI/Whisper 语音识别”区域,检查“CUDA数据类型”是否设置为 float16int8(这能有效减少显存占用,是推荐设置)。
  2. 验证 CUDA 是否真正启用:

    • 启动一个视频翻译任务。
    • 观察任务日志或控制台输出。如果看到类似 Using GPU 0Loading model with CUDA 的信息,说明 CUDA 加速已成功启用。
  3. 如果遇到显存不足 (CUDA out of memory) 错误:

    • 在“高级选项”中,将“CUDA数据类型”改为 int8
    • 将“识别准确度 (beam_size)”和“识别准确度 (best_of)”都改为 1
    • 考虑使用更小的语音识别模型(如从 large-v3 改为 medium)。
    • 勾选“强制批量推理”模式。

总结: 您看到的 [W:onnxruntime:Default...] 警告是 ONNX Runtime 在 Windows 环境下的一个无害的、预期内的日志,不影响核心功能。请重点关注上述步骤以确保 CUDA 加速配置正确。

如果后续在翻译过程中出现其他与 CUDA 相关的错误(如 CUDA error: out of memory),请再提供完整的错误日志。

有用的文档链接: windows上安装CUDA12.6和cuDNN9.8

2025-12-27 18:44:53.700888353 [W:onnxruntime:Default, device_discovery.cc:164 DiscoverDevicesForPlatform] GPU device discovery failed: device_discovery.cc:89 ReadFileContents Failed to open file: "/sys/class/drm/card0/device/vendor"
Unable to load any of {libcudnn_ops.so.9.1.0, libcudnn_ops.so.9.1, libcudnn_ops.so.9, libcudnn_ops.so}
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Traceback (most recent call last):
File "/home/ewegwag/ai/pyvideotrans/pyvideotrans/videotrans/task/_only_one.py", line 43, in run

trk.recogn()

File "/home/ewegwag/ai/pyvideotrans/pyvideotrans/videotrans/task/trans_create.py", line 379, in recogn

raise RuntimeError(self.cfg.basename + tr('recogn result is empty'))

RuntimeError: 01.mp4No subs recognized. Check Audio/Lang.

您遇到的错误表明 CUDA/cuDNN 环境配置不正确,导致语音识别模型无法在 GPU 上加载,最终识别失败。这是一个典型的 Linux 系统下 CUDA 驱动或 cuDNN 库缺失或版本不匹配的问题。

请按以下步骤解决:

1. 验证 CUDA 和 cuDNN 安装
在终端中执行以下命令,检查关键组件是否存在且版本兼容:

# 检查 NVIDIA 驱动和 CUDA 版本
nvidia-smi
# 检查 CUDA 运行时版本(应显示 12.x 或 11.x)
nvcc --version
# 检查 cuDNN 版本(关键步骤)
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

预期结果nvidia-smi 显示的 CUDA Version 应与 nvcc --version 一致。cuDNN 版本应存在(例如 8.x 或 9.x)。如果命令报错或 cuDNN 文件不存在,说明 cuDNN 未正确安装。

2. 安装/修复 cuDNN
如果 cuDNN 缺失或版本过低(错误提示需要 libcudnn_ops.so.9.*):

  • 前往 NVIDIA 官网 下载与您 CUDA 版本匹配的 cuDNN 库(例如 CUDA 12.x 对应 cuDNN 8.9.x 或更高)。
  • 按照官方指南安装(通常是解压后复制文件到 /usr/local/cuda/ 对应目录)。
  • 完成后,务必更新动态链接库缓存

    sudo ldconfig

3. 在 pyVideoTrans 中调整设置(临时方案)
在修复系统环境前,可以临时使用 CPU 模式完成任务:

  • 在软件主界面,取消勾选“CUDA加速”
  • 这将强制使用 CPU 进行识别,速度会慢很多,但可以保证任务完成。

4. 检查任务本身
错误信息末尾的 No subs recognized. Check Audio/Lang. 也可能是由于视频本身无人声、音量过低或语言选择错误导致。请确保:

  • 视频中包含清晰的人声。
  • 在“语音识别”行正确选择了视频的发音语言(如果不确定,选 auto)。

总结:核心问题是 cuDNN 库缺失或版本不匹配。请优先执行第 1、2 步修复系统环境。修复后,重新勾选“CUDA加速”即可正常使用 GPU 加速。

有用的文档链接: windows上安装CUDA12.6和cuDNN9.8(虽然标题是 Windows,但其中关于 CUDA 与 cuDNN 版本匹配的原理是通用的)

2025-12-27 19:28:46.036913355 [W:onnxruntime:Default, device_discovery.cc:164 DiscoverDevicesForPlatform] GPU device discovery failed: device_discovery.cc:89 ReadFileContents Failed to open file: "/sys/class/drm/card0/device/vendor"
/home/ewegwag/ai/pyvideotrans/pyvideotrans/.venv/lib/python3.10/site-packages/zhconv/zhconv.py:33: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools

这个警告信息包含两个独立部分,均不影响软件核心功能,可以安全忽略。以下是详细解释和操作建议:1. ONNX Runtime GPU 发现警告(第一行)原因:这是 ONNX Runtime 库在 Linux 系统上尝试通过特定系统文件路径发现 GPU 时产生的无害警告。由于您使用的是 Linux 系统(路径为 /home/ewegwag/...),该警告是预期内的,不代表 CUDA 加速失败。操作:无需处理。只要您在软件中正确配置了 CUDA 且任务能正常使用 GPU 加速,即可忽略此警告。2. zhconv 库的弃用警告(第二行)原因:软件依赖的 zhconv 库使用了即将被移除的旧 API (pkg_resources)。这是一个来自 Python 生态的库维护警告,不影响软件当前任何功能的正常运行。操作:无需处理。这是上游库的问题,等待未来 zhconv 库更新即可。核心操作建议:请忽略这些警告,它们只是信息提示,并非错误。请关注任务执行过程中是否出现真正的错误(如 CUDA out of memory、识别失败等)。如果任务能正常完成,则说明一切功能正常。如果遇到影响功能的实际错误,请提供完整的错误日志。

2025-12-27 19:29:38,472 - WARNING - FFmpeg 命令执行失败 (force_cpu=True)。
命令: ffmpeg -hide_banner -ignore_unknown -threads 0 -y -ss 00:00:00.000 -t 80.450000 -i /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/489202/bf4b572741/novoice.mp4 -an -c:v libx264 -g 1 -preset veryfast -crf 20 -pix_fmt yuv420p -vf tpad=stop_mode=clone:stop_duration=0.2,setpts=PTS -fps_mode vfr -t 80.450000 /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/489202/bf4b572741/gap-0-1766834978.2738633.mp4
错误: Unrecognized option 'fps_mode'.
Error splitting the argument list: Option not found

这个错误是由于您系统中安装的 ffmpeg 版本过低,不支持 -fps_mode 参数导致的。该参数是在较新版本的 FFmpeg 中引入的。请按以下步骤解决:1. 升级 FFmpeg在终端中执行以下命令,检查当前 FFmpeg 版本并升级:bash# 检查当前版本ffmpeg -version# 升级 FFmpeg (以 Ubuntu/Debian 为例)sudo apt update && sudo apt upgrade ffmpeg# 或者使用官方 PPA 获取最新版 (Ubuntu)sudo add-apt-repository ppa:jonathonf/ffmpeg-4sudo apt updatesudo apt install ffmpeg对于其他 Linux 发行版(如 CentOS、Fedora、Arch),请使用对应的包管理器升级 ffmpeg。2. 验证升级升级后,再次运行 ffmpeg -version,确保版本号较新(建议 4.3 或更高)。3. 临时解决方案(不推荐)如果无法立即升级,可以尝试修改 pyVideoTrans 的源代码来移除有问题的参数。但这需要一定的技术能力,且可能影响其他功能。建议优先采用升级 FFmpeg 的方案。总结:核心问题是系统 FFmpeg 版本过旧。升级到最新稳定版即可解决此错误。升级后,请重启 pyVideoTrans 再试。

命令: ffmpeg -hide_banner -ignore_unknown -threads 0 -y -progress /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/528443/77a32c94b8/compose1766836677.2727463.txt -i /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/528443/77a32c94b8/novoice.mp4 -i /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/528443/77a32c94b8/origin_audio.m4a -map 0:v -map 1:a -c:v hevc_nvenc -c:a copy -vf subtitles=end.srt.ass -movflags +faststart -cq 24 -preset p2 -fps_mode vfr -t 177.840000 /home/ewegwag/ai/pyvideotrans/pyvideotrans/tmp/528443/77a32c94b8/laste_target.mp4
错误: Unrecognized option 'cq'.
Error splitting the argument list: Option not found

这个错误再次表明您系统中安装的 FFmpeg 版本过旧。错误信息 Unrecognized option 'cq' 说明当前 FFmpeg 不支持 NVIDIA NVENC 编码器的 -cq(恒定质量)参数。该参数是在较新版本的 FFmpeg NVENC 编码器中引入的。

解决方案:

  1. 升级 FFmpeg(首选且必须)
    您需要安装一个集成了最新 NVENC SDK 的 FFmpeg 版本。在 Linux 上,最简单的方法是使用官方静态构建。

    步骤:
    a. 下载最新静态构建(以 Ubuntu/Linux 通用为例):

    # 前往 FFmpeg 官方下载页面,或使用以下命令下载(请检查最新版本号)
    wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
    # 解压
    tar xvf ffmpeg-release-amd64-static.tar.xz
    # 进入解压目录
    cd ffmpeg-*-amd64-static/
    # 将 ffmpeg 和 ffprobe 复制到系统路径(或替换现有版本)
    sudo cp ffmpeg ffprobe /usr/local/bin/

    b. 验证安装

    ffmpeg -version | grep -E "(ffmpeg version|configuration|--enable-nvenc)"

    确保输出中包含 --enable-nvenc,并且版本号较新。

  2. 临时解决方案:修改 pyVideoTrans 编码参数(不推荐)
    如果无法升级 FFmpeg,您可以在 pyVideoTrans 中避免使用 NVENC 硬件编码,改用软件编码:

    • 在软件主界面,点击 “设置更多参数”
    • “视频输出控制” 区域,将 “视频编码”hevc_nvenc 改为 libx265(软件编码)。
    • 同时,将 “质量控制” 的参数从 cq 模式对应的数值,改为 crf 模式(例如 23)。

    注意: 软件编码(libx265)速度会比 NVENC 慢很多,但兼容性最好。

总结:
根本原因是 FFmpeg 版本太旧,不支持新版 NVENC 编码器的参数。强烈建议您执行第1步,升级 FFmpeg 到最新的静态构建版本,这是最彻底且一劳永逸的解决方法。升级后,pyVideoTrans 的硬件编码功能才能正常工作。

也可以在高级选项中,视频输出控制区域–强制软编码选中

下载下来该放哪个目录?

Model URL copied. Download & extract to [Split Vocal/BGM].
If blocked, try: https://pvt9.com/zh/getmodel

打开文档看看,不是有说明吗
image
软件目录下的models/onnx 文件夹内

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions