TensorRT’s programming model
Published:
TensorRT’s programming model
- nvidia developer guide 중 2.2장을 요약 및 번역하였다.
TensorRT 는 크게 두가지 단계로 동작한다.
- Build Phase
- Model definition 을 TensorRT에 제공하고 타겟 GPU에 이를 최적화하는 단계이다.
- Runtime Phase
- 최적화된 모델을 Inference 하는 단계이다.
Build Phase
Build phase에서 가장 상위단계의 인터페이스는 Builder이다. Builder는 모델 최적화와 Engine을 만드는것을 담당한다.
Engine은 아래 세가지 단계를 통해 만들어진다.
- network definition 만들기
- builder configuration 정하기
- builder를 호출하여 engine 을 만들기
- builder는 dead computation을 없애거나 여러 operation 들을 최적화하여 GPU에 가장 적합하게 해준다.
- precision 등을 낮출 수도 있다.
- builder는 engine을 serialized form으로 만드는데 이를 plan이라 부른다. plan은 바로 deserialized 될 수도 있고, 디스크에 저장도 가능한다.
유의사항
- 만들어진 Engine은 만들어질 때 당시의 TensorRT 버전과 GPU에 특정지어진다.
- TensorRT 의 네트워크 정의는 deep-copy가 이뤄지지 않기 때문에 build phase가 끝날 때 release 해줘야한다
- builder를 돌릴 때는 다른 GPU사용하는것을 비추한다.
Runtime Phase
가장 상위단계의 인터페이스는 Runtime (C++, Python) 이다.
Runtime phase는 아래 순서로 이루어져있다.
- Deserialize a plan to create an engine
- Create an execution context from the engine
그 다음은 아래 단계가 반복적으로 동작한다.
- Populate input buffers for inference
- 한번 buffer가 셋업이 되면 inference는 synchronously 하게 또는 asynchronously하게 발생 될 수 있다.
- Call enqueue() or execute() on the execution context to run inference