mmdeploy环境部署过程中遇到的巨坑

news2024/11/15 9:03:33

之前已经写了一篇mmdeploy环境部署流程,在使用中却发现了很多问题,特此记录。

注意一:

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

这两个环境变量一定要写入到.bashrc中,否则会出现net backend not found: tensorrt错误。

注意二:

from mmdeploy.apis import inference_model

deploy_cfg = "mmdeploy/configs/mmdet/detection/detection_tensorrt-fp16_dynamic-320x320-1344x1344.py"
model_cfg = "mmdetection/configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py"
backend_files = ["mmdeploy_model/faster-rcnn-fp16/end2end.engine"]
img = "mmdetection/demo/demo.jpg"
device = "cuda"
result = inference_model(model_cfg, deploy_cfg, backend_files, img, device)

print(result)

以上代码可以用于推理,但速度较慢,

如果要集成到自己的应用,可以创建Detector

from mmdeploy_runtime import Detector
import cv2
import datetime

# 读取图片
img = cv2.imread("../mmdetection3/demo/demo.jpg")
# 创建检测器
detector = Detector(
    model_path="faster-rcnn-onnx",
    device_name="cuda",
    device_id=0,
)
startTime = datetime.datetime.now()
# 执行推理
bboxes, labels, _ = detector(img)
print(1)
# 使用阈值过滤推理结果,并绘制到原图中
indices = [i for i in range(len(bboxes))]
for index, bbox, label_id in zip(indices, bboxes, labels):
    [left, top, right, bottom], score = bbox[0:4].astype(int), bbox[4]
    if score < 0.3:
        continue
    cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0))
endTime = datetime.datetime.now()
durTime = '推理-----时间:%dms' % ((endTime - startTime).seconds * 1000 + (endTime - startTime).microseconds / 1000)
print(durTime)
cv2.imwrite("output_detection2.png", img)

注意三:

转onnx的时候如果提示
RuntimeError: Error when binding input: There's no data transfer registered for copying tensors from Device:[DeviceType:1 MemoryType:0 DeviceId:0] to Device:[DeviceType:0 MemoryType:0 DeviceId:0]

说明你安装了onnxruntime和onnxruntime-gpu,卸载掉其中一个即可,因为我希望用gpu跑onnx,所以留下onnxruntime-gpu,卸载onnxruntime

pip uninstall onnxruntime-gpu

注意四:

转onnx的时候如果提示一个IOB啥的错误,说明onnxruntime-gpu版本有问题。

我测试用1.15.0版本没问题,所以要pip install onnxruntime-gpu==1.15.0以及使用Release ONNX Runtime v1.8.1 · microsoft/onnxruntime · GitHub 版本的运行时环境。

注意五:

如果创建Detector需要用GPU预测,那一定要安装mmdeploy-runtime-gpu版本

pip install mmdeploy-runtime-gpu

因为mmdeploy-runtime 支持 onnxruntime 推理,mmdeploy-runtime-gpu 支持 onnxruntime-gpu tensorrt 推理

注意六:

如果执行

detector = Detector(
    model_path="faster-rcnn",
    device_name="cuda",
    device_id=0,
)
提示 [mmdeploy] [error] [common.cpp:67] Device "cuda" not found那就pip把mmdeploy-runtime卸载了,然后用gpu版本pip install mmdeploy-runtime-gpu

注意七:

执行

detector = Detector(
    model_path="faster-rcnn",
    device_name="cuda",
    device_id=0,
)
如果提示
Net backend not found: tensorrt, available backends: [("onnxruntime", 0)]

是因为没设置tensorrt环境变量

cd TensorRT-8.6.1.6
export TENSORRT_DIR=$(pwd)
export LD_LIBRARY_PATH=$TENSORRT_DIR/lib:$LD_LIBRARY_PATH

注意八:

运行
detector = Detector(
    model_path="faster-rcnn",
    device_name="cuda",
    device_id=0,
)
如果提示libonnxruntime_providers_cuda.so with error: libcudnn.so.8: cannot open shared object file: No such file or directory

那是cudnn环境变量没设置导致的

cd cudnn
export CUDNN_DIR=$(pwd)
export LD_LIBRARY_PATH=$CUDNN_DIR/lib:$LD_LIBRARY_PATH

注意九:

运行
detector = Detector(
    model_path="faster-rcnn-onnx",
    device_name="cuda",
    device_id=0,
)
如果提示Segmentation fault (core dumped)
那说明ONNXRuntime-gpu版本和cuda不匹配
我的cuda11.7,那就要用ONNXRuntime-gpu的版本是1.15.0,ONNXRuntime-gpu和运行时一定要对得上,注意:用1.18.0有问题。

注意十:

运行
detector = Detector(
    model_path="faster-rcnn-onnx",
    device_name="cuda",
    device_id=0,
)
如果提示 [mmdeploy] [error] [tensor.cpp:137] mismatched data type FLOAT vs HALF
那说明转onnx应该用了configs/mmdet/detection/detection_onnxruntime-fp16_dynamic.py这个配置,换成configs/mmdet/detection/detection_onnxruntime_dynamic.py重新转onnx即可。

注意十一:

如果要同时使用trt和onnx,编译mmdeploy时

cmake -DCMAKE_CXX_COMPILER=g++-9 -DMMDEPLOY_TARGET_BACKENDS="trt;ort" -DTENSORRT_DIR=/root/TensorRT-8.6.1.6/ -DCUDNN_DIR=/root/cudnn -DONNXRUNTIME_DIR=/root/onnxruntime-linux-x64-gpu-1.15.0 .
make -j$(nproc) && make install

编译sdk的时候

cmake . \
    -DCMAKE_CXX_COMPILER=g++-9 \
    -DMMDEPLOY_BUILD_SDK=ON \
    -DMMDEPLOY_BUILD_EXAMPLES=ON \
    -DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
    -DMMDEPLOY_TARGET_DEVICES="cuda;cpu" \
    -DMMDEPLOY_TARGET_BACKENDS="trt;ort" \
    -Dpplcv_DIR=/root/ppl.cv/cuda-build/install/lib/cmake/ppl/ \
    -DTENSORRT_DIR=/root/TensorRT-8.6.1.6/ \
    -DCUDNN_DIR=/root/cudnn/ \
    -DONNXRUNTIME_DIR=/root/onnxruntime-linux-x64-gpu-1.15.0
make -j$(nproc) && make install

测试发现,创建Detector如果用trt的gpu识别一张图11ms,而onnx的gpu识图需要3s,大概率环境问题吧,谁爱整谁整去吧,我心累了!!!!!!!!!

参考:

使用SDK推理时报错,645738 Segmentation fault (core dumped) · Issue #2645 · open-mmlab/mmdeploy (github.com)

paddle使用fp16模式推理时报错ONNXRuntimeError无法加载libcublasLt.so.11类似错误 – 行星带 (beltxman.com) mmdeploy/docs/en/01-how-to-build/linux-x86_64.md at v1.3.1 · open-mmlab/mmdeploy (github.com)

CUDA lazy loading is not enabled_cuda lazy loading is not enabled. enabling it can -CSDN博客 

TensorRT ubuntu18.04 安装过程记录_importerror: libnvinfer.so.8: cannot open shared o-CSDN博客 安装使用MMDeploy(Python版)_pycharm怎么用mmdeploy-CSDN博客

MMDeploy安装、python API测试及C++推理_mmdeploy c++-CSDN博客 

Windows系统下MMDeploy预编译包的使用_mmdeploy masrkrcnn-CSDN博客 

mmdeploy环境部署流程_mmdeploy 实现dcnv4模型部署-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI大模型】ChatTTS——颠覆传统,赋能未来的文本到语音技术

文章目录 一、项目介绍二、代码解释三、从技术角度进行分析四、技术细节与实现五、优缺点分析六、应用场景分析七、未来展望八、结论 一、项目介绍 随着人工智能技术的不断进步&#xff0c;语音合成&#xff08;TTS&#xff09;技术得到了飞速发展。ChatTTS项目作为一个开源的…

零基础如何制作一个GIS可视化大屏?免费无难度!

一.GIS是什么&#xff1f; GIS&#xff08;地理信息系统&#xff09;开发是一种利用计算机技术对地理信息进行处理、分析、存储和展示的技术。GIS开发可以应用在很多领域&#xff0c;如城市规划、环境保护、交通管理、农业生产等。 二.如何将GIS与数字孪生结合起来&#xff1f…

C++并发之阻塞队列(block,queue)

目录 1 概述2 实现3 测试3 运行 1 概述 最近研究了C11的并发编程的线程/互斥/锁/条件变量&#xff0c;利用互斥/锁/条件变量实现一个支持多线程并发的阻塞队列&#xff0c;队列大小没有限制。 阻塞队列是一个模板类&#xff0c;有两个模块参数&#xff0c;参数1是元素类型&…

小红书营销:解锁企业增长新引擎,与小红书集成实现精准获客

在数字化营销的新时代&#xff0c;小红书以其独特的社区文化和精准的用户定位&#xff0c;成为了品牌和企业争相入驻的热门平台。今天将探讨如何通过小红书平台进行营销获客&#xff0c;并强调与企业集成的重要性&#xff0c;以实现更高效的品牌增长。 一、小红书营销的独特优…

API的优势及应用场景(淘宝API测试的详细步骤)

一、API的优势 API的出现为应用程序间的通信提供了一种新的方式&#xff0c;它有以下优势&#xff1a; 1、降低开发难度 开发者可以通过API访问其他应用程序的数据和功能&#xff0c;避免了重复开发&#xff0c;降低了开发难度。 2、提高开发效率 API提供了一种标准化的通…

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir Cookie技术Cookie简单示意图Cookie常用方法Cookie创建Cookie读取JSESSIONID读取指定Cookie Cookie修改Cookie生命周期Cookie的有效路径Cookie作业布置Cookie注意事项Cookie中文乱码问题 Session技术Session原理示意图Session常用方法Session底层机制Session生命周期Sessi…

山洪灾害无线预警广播系统解决方案

一、国家政策 2021年水利部印发了《全国山洪灾害防治项目实施方案&#xff08;2021-2023年&#xff09;》&#xff0c;提出“到2023年&#xff0c;山洪灾害防治体系进一步健全&#xff0c;监测预警能力进一步提升&#xff0c;努力补齐山洪灾害防治当前存在的明显短板”的建设目…

ArcGIS Desktop使用入门(四)——ArcMap软件闪退无法打开问题

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

【前端项目笔记】5 分类管理

分类管理 效果展示&#xff1a; 创建商品管理的子分支 git代码回顾 git branch 查看所有分支&#xff08;*代表当前所处分支&#xff09; git checkout -b goods_cate 新建分支goods_cate git push -u origin goods_cate 将当前分支保存到云端origin命名为goods_cate&#x…

CVPR24新作:教你网络“影分身术”,半小时生成专属数字人的GaussianAvatar

论文标题&#xff1a; GaussianAvatar: Towards Realistic Human Avatar Modeling from a Single Video via Animatable 3D Gaussians 论文作者&#xff1a; Liangxiao Hu, Hongwen Zhang, Yuxiang Zhang, Boyao Zhou, Boning Liu, Shengping Zhang, Liqiang Nie 项目地址&…

如何运用Midjourney探究新中式美学?

新中式美学最近真是越来越火了&#xff0c;把传统中式元素和现代设计结合起来&#xff0c;不仅看着舒服&#xff0c;还特别有文化韵味。 1. 研究和准备 首先&#xff0c;得先弄清楚什么是新中式美学。说白了&#xff0c;就是把传统中式元素和现代设计结合起来。你可以看看相关…

费控4.0全面解决方案从源头破解企业费用管理痛点

随着企业数字化变革的加速&#xff0c;费控报销正处于最具有发展潜力的细分赛道&#xff0c;且无疑是具有 “长坡厚雪”属性的投资标的。但回归企业管理视角&#xff0c;作为一个用于企业非生产性费用管理的管理工具&#xff0c;费控报销平台的评判标准只有两个&#xff1a;好不…

开通商家转账到零钱最简单直接的办法

想要一次性开通微信支付商家转账到零钱功能&#xff0c;您可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保您的商户号主体是没有正在处罚中的公司。个体工商户目前暂不支持此功能。同时&#xff0c;仔细检查是否存在严重的违规处罚记录&#xff0c;如果只是轻微的风…

剪辑如何剪辑制作视频短视频剪辑学习怎么学,难吗?

工欲善其事必先利其器&#xff0c;有一个好的工具能让你的工作如鱼得水&#xff0c;果你想在短视频中制作精良的视频&#xff0c;你就考虑电脑制作软件了。果你想制作精良的视频&#xff0c;你就考虑电脑制作软件了。 如何找到剪辑软件了&#xff1f;你可以直接去软件的官方。你…

常见的排序算法【总结】

目录 排序的基本概念与分类排序的稳定性内排序与外排序简单排序冒泡排序时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) 简单选择排序排序原理&#xff1a;时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) 插入排序排序原理&#xff1a;时间复杂度&#xff1a; O ( n 2 ) O(n^…

MCP2515汽车CAN总线支持SPI接口的控制器芯片替代型号DPC15

器件概述 DPC15是一款独立CAN控制器&#xff0c;可简化需要与CAN总线连接的应用。可以完全替代兼容MCP2515 图 1-1 简要显示了 DPC15 的结构框图。该器件主要由三个部分组成&#xff1a; 1. CAN 模块&#xff0c;包括 CAN 协议引擎、验收滤波寄存 器、验收屏蔽寄存器、发送和接…

解锁最强比较工具Beyond_Compare十大功能及下载注册

Beyond Compare是一款功能强大的文件和文件夹比较工具&#xff0c;以下是其十大用法&#xff1a; 文件内容比较&#xff1a; Beyond Compare能够详细比较两个文件的内容&#xff0c;以绿色表示添加的内容&#xff0c;红色表示删除的内容&#xff0c;黄色表示修改的内容。 用户…

基线管理是什么

0、背景 作为数据开发人员&#xff0c;我们日常工作的一部分就是夜间值班。”夜间值班“对于没有实际工作经验的同学来说可能比较陌生。 所谓夜间值班&#xff0c;主要是为了保证数据可以在我们的对外承诺时间前产出。而由于日常生产任务依赖关系异常复杂&#xff0c;上游任务…

QT自定义信号和槽函数

在QT中最重要也是必须要掌握的机制&#xff0c;就是信号与槽机制&#xff0c;在MFC上也就是类型的机制就是消息与响应函数机制 在QT中我们不仅要学会如何使用信号与槽机制&#xff0c;还要会自定义信号与槽函数&#xff0c;要自定义的原因是系统提供的信号&#xff0c;在一些情…

PointCloudLib-滤波模块(Filtering)-直通滤波

使用直通过滤器过滤点云 在本教程中,我们将学习如何沿着 指定维度 – 即,切断位于 或 在给定用户范围之外。 代码 首先,创建一个文件,比方说,在你最喜欢的 编辑器,并将以下内容放入其中:passthrough.cpp #include <iostream> #include <pcl/point_types.h&g…