Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C++部署错误,更改mode_infer.cpp生成的dll和lib文件,MFC调用. #1174

Open
shlucky opened this issue Sep 29, 2021 · 12 comments
Open
Assignees

Comments

@shlucky
Copy link

shlucky commented Sep 29, 2021

问题类型:模型部署
问题描述
设备硬件环境:英伟达2080ti,CUDA10.2,CUNN7.6,TensorRT 7.0
PaddleX分支PaddleX-release-2.0.0rc3
参考model_infer.cpp 更改为分割模型,生成dll和lib,编写MFC程序,初始化模型时选择GPU方式,调用生成的dll和lib。读取文件夹下的图片可以实现图像的分割,接入工业相机采集后,将采集的图像(一段内存地址)内部已经生成为opnecv的Mat图像传给深度学习预测推理程序就报错,报错的地方为ppinference_engine.cpp的Infer函数,中的 in_tensor->CopyFromCpu(im_tensor_data);这句话,我一开始觉得是相机没有数据或者数据的格式不对,特地在传入推理程序前,将相机采集的图像保存,图像没有问题,后来我将初始化时改为CPU方式,也可以实现图像的语义分割。想问下这个是什么问题?读取文件夹下的图片进行语义分割没有问题,改为CPU方式下读取工业相机也没有问题,在GPU下就出现上述错误?

请在这里描述您在使用过程中的问题,说明您的部署环境,部署需求,模型类型和应用场景等,便于开发人员快速响应。

@shlucky
Copy link
Author

shlucky commented Sep 29, 2021

6fb5e538c22bd94c4ae8796cf21cf68

@FlyingQianMM
Copy link
Collaborator

FlyingQianMM commented Sep 30, 2021

关于gpu下能否正常预测,之前有试过直接用给出的demo和模型做预测能正常运行么?

另外自己修改哪些地方?

@heliqi
Copy link
Collaborator

heliqi commented Sep 30, 2021

是不是使用了多线程?
我看报错提示是因为同时访问了inputs导致的报错

@shlucky
Copy link
Author

shlucky commented Oct 8, 2021

@heliqi 您好,没有使用多线程,看文档多线程 使用PredictorPool,打开PaddleX-release-2.0.0rc3\dygraph\deploy\cpp ,没有PredictorPool类。看文档CopyFromCpu(data) 是从cpu获取数据,设置到tensor内部。我是使用同一个模型对多个相机的输入图像进行预测,请问这样有问题吗?

@shlucky
Copy link
Author

shlucky commented Oct 8, 2021

@FlyingQianMM 您好,直接给的demo和模型可以正常运行,我修改的部分主要是将demo里的model_infer,目标检测任务改为语义分割,输出的是对应的label。

@FlyingQianMM
Copy link
Collaborator

我是使用同一个模型对多个相机的输入图像进行预测

这个具体是指 把多个相机的输入图像放到同一个batch里面做预测还是怎么的?

@shlucky
Copy link
Author

shlucky commented Oct 9, 2021

@FlyingQianMM 不是将多个相机的输入图像放进一个batch里面进行预测,而是相机有触发信号,采集图像传入预测程序,因为是流水线上不同相机拍摄工件的不同位置,但是调用的是同一个预测程序,请问这样有问题吗?

@FlyingQianMM
Copy link
Collaborator

那是每个相机一个线程,然后调用同一个模型?

@shlucky
Copy link
Author

shlucky commented Oct 9, 2021

@FlyingQianMM 真是应用场景是这样的,但是我现在测试的时候只是链接一个相机,加载完模型选择GPU模式,然后触发相机拍照,对采集的图像推理时就报错,改为cpu模式就没问题,改为GPU模式处理文件夹下的图片也没问题。

@shlucky
Copy link
Author

shlucky commented Oct 19, 2021

@heliqi @muare如果需要, 你们可以远程整台电脑复现一下这个错误。

@heliqi
Copy link
Collaborator

heliqi commented Oct 19, 2021

  1. 如果只有一个模型实例, 确保线程中的推理已经完成,再传入新的图片调用推理。 比如下面这个PR中的multi_thread_infer2.cpp例子中的 future1.get(); 就是保证线程计算完毕:
    增加多线程demo #1179
  2. 请使用线程池,初始化线程数量后,重复复用这些线程。避免线程频繁的销毁创建,导致底层cuda问题

@chliang
Copy link
Contributor

chliang commented Jan 4, 2022

缺 cuda的库 cusolver64_10.dll, 拷贝到运行目录中

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants