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 三部分.

_images/poprt_arch.png

Fig. 1.1 PopRT 架构

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 对模型的转换, 编译, 运行的工作流程如下:

_images/poprt_workflow.png

Fig. 1.2 PopRT 工作流