用tensorrt的python api序列化生成的engine可以用于c++部署吗
1条回答 默认 最新
关注 - 以下回答由chatgpt基于相关博客总结生成:
可以将通过使用TensorRT Python API序列化生成的Engine文件用于C++部署。 需要注意以下问题: 1.在C++中需要使用C++ API来进行反序列化和执行推理,具体可以参考TensorRT C++ API的文档。 2.需要注意在C++中使用的数据类型和数据格式,需要与Python中保持一致。 3.在C++中需要手动分配内存并绑定输入输出,具体方式可以参考以下示例代码:
//创建logger:日志记录器 auto logger = make_shared<nvinfer1::ILogger>(); //读取Engine文件并反序列化 ifstream engine_file("sample.engine", ios::binary); if (!engine_file.good()) { throw runtime_error("文件读取失败"); } ostringstream buffer; buffer << engine_file.rdbuf(); string serialized_engine = buffer.str(); unique_ptr<nvinfer1::IRuntime> runtime{ nvinfer1::createInferRuntime(*logger) }; unique_ptr<nvinfer1::ICudaEngine> engine{ runtime->deserializeCudaEngine(serialized_engine.data(), serialized_engine.size(), nullptr) }; // 分配主机和设备buffers vector<void*> host_buffers(engine->getNbBindings()); vector<void*> device_buffers(engine->getNbBindings()); vector<int64_t> binding_sizes(engine->getNbBindings()); for (int32_t i = 0; i < engine->getNbBindings(); i++) { auto dims = engine->getBindingDimensions(i); int32_t volume = accumulate(begin(dims), end(dims), 1, multiplies<int32_t>()); binding_sizes[i] = volume * sizeof(float); cudaMalloc(&device_buffers[i], binding_sizes[i]); host_buffers[i] = malloc(binding_sizes[i]); if (engine->bindingIsInput(i)) { //如果是输入参数,则将数据从主机内存拷贝到设备内存 cudaMemcpy(device_buffers[i], input_data, binding_sizes[i], cudaMemcpyHostToDevice); } } //异步执行推理 unique_ptr<nvinfer1::IExecutionContext> context{ engine->createExecutionContext() }; context->enqueueV2(device_buffers.data(), cudaStream_t{ 0 }, nullptr); for (int32_t i = 0; i < engine->getNbBindings(); i++) { if (!engine->bindingIsInput(i)) { //如果是输出参数,则将数据从设备内存拷贝到主机内存 cudaMemcpy(host_buffers[i], device_buffers[i], binding_sizes[i], cudaMemcpyDeviceToHost); } }
解决 无用评论 打赏 举报- 以下回答由chatgpt基于相关博客总结生成:
悬赏问题
- ¥50 安装华大九天aether
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证