当前位置: 首页 > news >正文

【人工智能学习之MMdeploy部署踩坑总结】

【人工智能学习之MMdeploy部署踩坑总结】

  • 报错1:TRTNet: device must be a GPU!
  • 报错2:Failed to create Net backend: tensorrt
  • 报错3:Failed to load library libonnxruntime_providers_shared.so
      • 1. 确认库文件是否存在
      • 2. 重新安装 ONNX Runtime
      • 3. 检查系统依赖
      • 4. 验证安装
  • 报错4:libcudnn.so.9: cannot open shared object file: No such file or directory
      • 1. 确认 Conda 环境内的 CuDNN 路径
      • 2. 设置环境变量(临时生效)
      • 3. 永久配置环境变量(虚拟环境内)
      • 4. 检查 CuDNN 版本兼容性(关键!)
      • 5. 验证环境
  • 报错5:Inconsistency detected by ld.so: dl-version.c: 205: _dl_check_map_versions: Assertion `needed != NULL' failed!
  • 报错6:mismatched data type FLOAT vs HALF
  • 版本对应表

以下是我在使用mmdeploy部署时踩过的坑,在此分享帮助大家,欢迎补充和指正。

报错1:TRTNet: device must be a GPU!

是说用tenserRT推理必须使用gpu,你应该在代码中选择的是cpu,需要改成cuda。注意!是:“cuda”,不是"gpu"写gpu是无效的。

列如:

self.recognizer = VideoRecognizer(model_path=onnx_path, device_name='cuda', device_id=int(gpu_id))

报错2:Failed to create Net backend: tensorrt

是因为没设置tensorrt环境变量,需要将trt路径写入到.bashrc中:

echo "export LD_LIBRARY_PATH=/root/TensorRT-8.6.1.6/lib:/root/cudnn/lib:$LD_LIBRARY_PATH" >> ~/.bashrc && \
source ~/.bashrc

报错3:Failed to load library libonnxruntime_providers_shared.so

完整的详细报错为:
[mmdeploy] [error] [ort_net.cpp:205] unhandled exception when creating ORTNet: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1080 void onnxruntime::ProviderSharedLibrary::Ensure() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_shared.so with error: libonnxruntime_providers_shared.so: cannot open shared object file: No such file or directory

是系统找不到 libonnxruntime_providers_shared.so 这个共享库文件,这通常与 ONNX Runtime 的安装不完整或环境配置问题有关。

1. 确认库文件是否存在

首先检查系统中是否实际存在 libonnxruntime_providers_shared.so

# 在系统中搜索该文件
sudo find / -name "libonnxruntime_providers_shared.so" 2>/dev/null
  • 如果找到该文件(例如路径为 /path/to/libonnxruntime_providers_shared.so),需要将其所在目录添加到系统库路径:
    # 临时生效(当前终端)
    export LD_LIBRARY_PATH=/path/to/directory-containing-the-file:$LD_LIBRARY_PATH# 永久生效(添加到 ~/.bashrc 或 ~/.zshrc)
    echo "export LD_LIBRARY_PATH=/path/to/directory-containing-the-file:\$LD_LIBRARY_PATH" >> ~/.bashrc
    source ~/.bashrc
    

2. 重新安装 ONNX Runtime

如果未找到该文件,说明 onnxruntime-gpu 安装不完整,重新安装:

# 先卸载现有版本
pip uninstall -y onnxruntime-gpu# 安装与 mmdeploy 兼容的版本 
pip install onnxruntime-gpu

注意:mmdeploy 对 ONNX Runtime 版本有一定兼容性要求,过新的版本(如 1.18.0)可能存在适配问题,降低版本通常能解决此类库缺失问题。

3. 检查系统依赖

libonnxruntime_providers_shared.so 可能依赖系统级的 CUDA 或 CUDNN 库,确保:

  • 系统已安装与 onnxruntime-gpu 1.16.0 兼容的 CUDA(推荐 11.6+)和 CUDNN(推荐 8.4+)
  • CUDA 和 CUDNN 的路径已正确添加到环境变量(如 LD_LIBRARY_PATH 包含 /usr/local/cuda/lib64 等)

4. 验证安装

重新安装后,通过以下命令验证 ONNX Runtime 是否正常工作:

import onnxruntime as ort
print("ONNX Runtime 版本:", ort.__version__)
print("可用执行 providers:", ort.get_available_providers())

如果输出包含 ['CUDAExecutionProvider', 'CPUExecutionProvider'],说明安装成功,此时再尝试运行 mmdeploy 相关代码即可。

如果以上步骤仍未解决,可能需要检查 mmdeploy 与 ONNX Runtime 的编译/安装匹配性(例如是否使用源码编译 mmdeploy 时指定了正确的 ONNX Runtime 路径)。

报错4:libcudnn.so.9: cannot open shared object file: No such file or directory

完整的详细报错为:
[mmdeploy] [error] [ort_net.cpp:205] unhandled exception when creating ORTNet: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1131 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcudnn.so.9: cannot open shared object file: No such file or directory [mmdeploy] [error] [net_module.cpp:54] Failed to create Net backend: onnxruntime
报错核心是系统找不到 libcudnn.so.9,这是 CuDNN 库的问题,结合你用 Conda 虚拟环境(mmdeploy_zhr),按以下步骤解决:

1. 确认 Conda 环境内的 CuDNN 路径

先找到虚拟环境中 CuDNN 库的位置:

# 激活环境(确保已激活 mmdeploy_zhr)
conda activate mmdeploy# 查找 libcudnn.so.9 所在目录
find $CONDA_PREFIX -name "libcudnn.so.9"

正常情况下,会输出类似:
/root/miniconda3/envs/mmdeploy_zhr/lib/libcudnn.so.9
记住这个路径的父目录(比如上面的路径,父目录是 /root/miniconda3/envs/mmdeploy_zhr/lib )。

2. 设置环境变量(临时生效)

在运行脚本前,手动设置 LD_LIBRARY_PATH 包含 CuDNN 库路径:

# 替换成你实际的 CuDNN 库父目录
export LD_LIBRARY_PATH=/root/miniconda3/envs/mmdeploy/lib:$LD_LIBRARY_PATH# 再次运行脚本
python onnx_run.py

如果临时设置后不报错,说明环境变量配置有效,继续看步骤 3 永久配置。

3. 永久配置环境变量(虚拟环境内)

为了让虚拟环境每次激活时自动加载 CuDNN 路径,在 Conda 环境中配置:

# 激活环境
conda activate mmdeploy_zhr# 添加环境变量到虚拟环境的 activate.d 目录
echo "export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:\$LD_LIBRARY_PATH" >> $CONDA_PREFIX/etc/conda/activate.d/cudnn.sh# 添加取消环境变量到 deactivate.d 目录(可选,退出环境时清理)
echo "unset LD_LIBRARY_PATH" >> $CONDA_PREFIX/etc/conda/deactivate.d/cudnn.sh# 重新激活环境使配置生效
conda deactivate
conda activate mmdeploy_zhr

这样每次激活 mmdeploy_zhr 环境时,LD_LIBRARY_PATH 会自动包含 CuDNN 库路径,无需每次手动设置。

4. 检查 CuDNN 版本兼容性(关键!)

你的报错里是 libcudnn.so.9,说明当前环境用的是 CuDNN 9.x,但要注意:

  • ONNX Runtime GPU 版本(尤其是旧版,如你之前用的 1.15.1)对 CuDNN 9.x 兼容性可能不佳,容易出现段错误。
  • 建议降级 CuDNN 到 8.x 版本(更稳定,适配大多数框架):
    # 先卸载当前 CuDNN
    conda uninstall -y cudnn# 安装 CuDNN 8.9(适配 CUDA 11/12,兼容性好)
    conda install -y -c nvidia cudnn=8.9.2
    
    安装后重新运行 find $CONDA_PREFIX -name "libcudnn.so.8" 确认路径,再回到步骤 2/3 配置环境变量。

5. 验证环境

完成上述步骤后,通过以下命令验证:

# 激活环境
conda activate mmdeploy_zhr# 检查 CuDNN 库是否能被找到
ldd $CONDA_PREFIX/lib/libonnxruntime_providers_cuda.so | grep cudnn

如果输出类似:
libcudnn.so.8 => /root/miniconda3/envs/mmdeploy_zhr/lib/libcudnn.so.8 (0x00007f...)
说明 CuDNN 路径已正确配置,再运行 onnx_run.py 应该能解决 libcudnn.so.9 找不到的问题。

总结:核心是让系统找到 CuDNN 库文件,优先通过 Conda 环境配置 LD_LIBRARY_PATH,并检查 CuDNN 版本(推荐 8.x)与 ONNX Runtime、mmdeploy 的兼容性,避免因版本过高导致段错误。

报错5:Inconsistency detected by ld.so: dl-version.c: 205: _dl_check_map_versions: Assertion `needed != NULL’ failed!

是动态链接器(ld.so)检测到库版本不兼容 的错误,通常是因为不同库对系统底层依赖(如 glibc、CUDA 库)的版本要求冲突,或虚拟环境内的库与系统全局库混用导致。
一般重装就可以解决。最可能的原因是 CUDA 版本 与 ONNX Runtime 版本 不兼容导致的。

报错6:mismatched data type FLOAT vs HALF

是模型的数据类型和输入的数据类型不匹配,要么增加前处理,要么重新导出所需数据类型的模型。

版本对应表

以下是官网的版本对应表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文章转载自:

http://zGo61UWE.Lsqnw.cn
http://VfUNKYwD.Lsqnw.cn
http://UEgpUND1.Lsqnw.cn
http://rao4KFYL.Lsqnw.cn
http://cq5jffXl.Lsqnw.cn
http://dPkAyl8O.Lsqnw.cn
http://EGzkOnKo.Lsqnw.cn
http://4MonJZn3.Lsqnw.cn
http://Q3U2x81w.Lsqnw.cn
http://ASMrW7Rx.Lsqnw.cn
http://90EhtkqB.Lsqnw.cn
http://p4ddmXnp.Lsqnw.cn
http://qQpYhErw.Lsqnw.cn
http://TuTxkskT.Lsqnw.cn
http://kOjypgwg.Lsqnw.cn
http://KeL4htIc.Lsqnw.cn
http://UQrUQ92w.Lsqnw.cn
http://yoYiANC0.Lsqnw.cn
http://KfXQOTqK.Lsqnw.cn
http://BiztbJUH.Lsqnw.cn
http://oPhXgf0e.Lsqnw.cn
http://g5zUSZ4A.Lsqnw.cn
http://fIE31M8f.Lsqnw.cn
http://IgooLjfP.Lsqnw.cn
http://nVGHNyzT.Lsqnw.cn
http://ZFPj15Z5.Lsqnw.cn
http://7Sj0lstT.Lsqnw.cn
http://st1YNykr.Lsqnw.cn
http://SW9WH71q.Lsqnw.cn
http://N6lQ1mBJ.Lsqnw.cn
http://www.dtcms.com/a/365021.html

相关文章:

  • Linux之shell-awk命令详解
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • AI时代:智能体系统构建基本范式
  • 峰谷套利+动态增容:工商业储能能量管理系统的妙用
  • Docker容器与镜像:两种导入导出方式全解析
  • 洛谷 P3128 [USACO15DEC] Max Flow P -普及+/提高
  • 企业实用——MySQL的备份详解
  • Airsim 笔记:Python API 总结
  • 部署jenkins并基于ansible部署Discuz应用
  • 【ASP.NET Core】基于MailKit(SMTP 协议)实现邮件发送
  • Hadoop HDFS-SecondaryNameNode(2nn)详细介绍
  • 趣味学RUST基础篇(泛型)
  • OpenCL 中 内存对象完全详解和实战示例
  • 【Cursor-Gpt-5-high】StackCube-v1 任务训练结果不稳定性的分析
  • Vue3 + Ant Design Vue 实现多选下拉组件(支持分组、搜索与标签省略)
  • 【教程】IDEA中导入springboot-maven工程
  • websocket用于控制在当前页只允许一个用户进行操作,其他用户等待
  • 【教程】2025 IDEA 快速创建springboot(maven)项目
  • 通过IDEA写一个服务端和一个客户端之间的交互
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等)
  • Linux 对目录授予用户读写权限的方法
  • kafka:【1】概念关系梳理
  • 华清远见25072班I/O学习day4
  • Flutter代码生成:告别重复劳动,效率飙升
  • 51单片机-LED与数码管模块
  • OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚
  • 学习嵌入式的第三十二天——网络编程——TCP
  • 【机器学习学习笔记】逻辑回归实现与应用
  • 爬取m3u8视频完整教程
  • GitHub 上那些值得收藏的英文书籍推荐(计算机 非计算机类)