1. 简介
PopRT 是一个针对 IPU 处理器的高性能推理引擎, 它负责把训练完导出的模型, 针对推理进行深度编译优化, 生成能在 IPU 上运行的可执行程序 PopEF, 并提供灵活的 Runtime, 能够对 PopEF 进行低延时, 高吞吐的推理.
1.1. 背景
Graphcore Poplar SDK 提供了多种框架, 这些框架既支持训练也支持推理, 其在做优化策略时需要兼顾到训练和推理, 而 PopRT 是一个专门针对推理的引擎, 因此可以针对推理场景做更有针对性的优化.
PopRT 主要具有以下的功能:
ONNX 模型的低精度转换 (FP16/FP8)
转换 ONNX 模型的 opset version
对模型应用各种优化, 包含通用优化和适用于 IPU 的优化方法
提供灵活的 Runtime 对 PopEF 进行推理
1.2. 架构
PopRT 同时提供了 CLI 命令行的使用和 Python/C++ API 的调用, 内部的实现主要包含 Converter, Compiler 和 Runtime 三部分.
PopRT 主要由如下组件组成:
Converter: 负责对其它框架导出的模型进行优化, 目前只支持 ONNX Converter, 后续可以扩展其它框架的 Converter
Pass: 对于特定框架模型 IR 的图优化, 目前只支持 ONNX Pass
Compiler: 对 PopART IR 进行针对推理的图优化, 包括 Pattern 和 Transform. 编译完生成可序列化的二进制文件 PopEF
Pattern: 用于算子匹配和替换
Transform: 进行整图优化
Custom Op: 针对推理场景增加的自定义算子库
Runtime: 加载 PopEF 并进行低延时, 高吞吐的推理
Tools: 提供一些通用工具, 如 FP8 量化工具, 命令行工具等
1.3. 工作流程
PopRT 对模型的转换, 编译, 运行的工作流程如下: