初學TensorRT框架的時候,build、engine、context和runtime這幾個類經常搞不清楚,不知道他們又什么作用,下面就這幾個類進行簡單說明,
1.builder:構建器,搜索cuda內核目錄以獲得最快的可用實作,必須使用和運行時的GPU相同的GPU來構建優化引擎,在構建引擎時,TensorRT會復制權重,
IBuilder* builder = createInferBuilder(gLogger);
INetworkDefinition* network = builder->createNetwork();
創建引擎
builder->setMaxBatchSize(maxBatchSize);
builder->setMaxWorkspaceSize(1 << 20);
ICudaEngine* engine = builder->buildCudaEngine(*network);
2.engine:引擎,不能跨平臺和TensorRT版本移植,若要存盤,需要將引擎轉化為一種格式,即序列化,若要推理,需要反序列化引擎,引擎用于保存網路定義和模型引數,
IHostMemory *serializedModel = engine->serialize();
// store model to disk
std::ofstream p("resnet18.engine");
p.write(reinterpret_cast<const char*>(modelStream->data()), modelStream->size());
// <…>
serializedModel->destroy();
3.context:背景關系,創建一些空間來存盤中間值,一個engine可以創建多個context,分別執行多個推理任務,
IExecutionContext *context = engine->createExecutionContext();
4.runtime:用于反序列化引擎,
IRuntime* runtime = createInferRuntime(gLogger);
ICudaEngine* engine = runtime->deserializeCudaEngine(modelData, modelSize, nullptr);
TensorRT的C++API手冊:
TensorRT:Main Page
tensorrt里的engine、context、buffer、profile等的關系:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257866.html
標籤:其他
上一篇:Modbus 協議與 ESP-Modbus-DTU 工業物聯網方案介紹
下一篇:LAUTERBACH 除錯介紹
