用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基于相关博客总结生成:
悬赏问题
- ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
- ¥15 怎么看我在bios每次修改的日志
- ¥15 python+mysql图书管理系统
- ¥15 Questasim Error: (vcom-13)
- ¥15 船舶旋回实验matlab
- ¥30 SQL 数组,游标,递归覆盖原值
- ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
- ¥20 gitlab 中文路径,无法下载
- ¥15 用动态规划算法均分纸牌
- ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据