4. 使用 PopRT

PopRT 成功安装后, 可以按照下面的说明使用 PopRT CLI.

4.1. 使用方法

4.1.1. CLI 使用

poprt is a tool to help quickly deploy ONNX models on IPUs.

usage: poprt
       [-h]
       [--available_memory_proportion AVAILABLE_MEMORY_PROPORTION]
       [--batches_per_step BATCHES_PER_STEP]
       [--check]
       [--checkpoints CHECKPOINTS]
       [--compiler_options KEY=VAL [KEY=VAL ...]]
       [--config_yaml CONFIG_YAML]
       [--convert_version CONVERT_VERSION]
       [--custom_library_so_paths CUSTOM_LIBRARY_SO_PATHS [CUSTOM_LIBRARY_SO_PATHS ...]]
       [--custom_pass_config CUSTOM_PASS_CONFIG]
       [--custom_shape_inference CUSTOM_SHAPE_INFERENCE]
       [--data_preprocess DATA_PREPROCESS]
       [--disable_compilation_progress_bar]
       [--disable_fast_norm]
       [--eightbitsio]
       [--enable_erf_gelu]
       [--enable_insert_remap]
       [--export_popef]
       [--fp16_skip_op_types FP16_SKIP_OP_TYPES]
       [--fp8_skip_op_names FP8_SKIP_OP_NAMES]
       [--fp8_params FP8_PARAMS]
       [--infer_shape_ahead]
       [-i INPUT_MODEL]
       [--input_shape INPUT_TENSOR_NAME = INPUT_SHAPE [INPUT_TENSOR_NAME = INPUT_SHAPE ...]]
       [--ipu_version {ipu2,ipu21}]
       [--list_all_passes]
       [--manual_sharding_config MANUAL_SHARDING_CONFIG]
       [--max_tensor_size MAX_TENSOR_SIZE]
       [--num_io_tiles NUM_IO_TILES]
       [--num_of_layers_keep_fp16 NUM_OF_LAYERS_KEEP_FP16]
       [--only_manual_sharding]
       [--output_dir OUTPUT_DIR]
       [--output_model OUTPUT_MODEL]
       [--pack_args KEY=VAL [KEY=VAL ...]]
       [--passes PASSES]
       [--perf_tuner]
       [--popart_options KEY=VAL [KEY=VAL ...]]
       [--precision {fp32,fp16,fp8,fp8_weight}]
       [--precision_compare]
       [--quantize]
       [--quantize_loss_type {mse,mae,snr,kld,cos_dist}]
       [--remap_mode {after_matmul,before_add,both}]
       [--run]
       [--serialize_matmul KEY=VAL [KEY=VAL ...]]
       [--serialize_matmul_add KEY=VAL [KEY=VAL ...]]
       [--show]
       [--skip_passes SKIP_PASSES]
       [-v]

Named Arguments

--available_memory_proportion

设置 MatMul/Conv/Gemm 算子的可用内存比例. 默认值 None.

--batches_per_step

设置 batches_per_step, 当前支持在导出 PopEF 时设置. 默认值 1.

Default: 1

--check

使能正确性检查, 当前只支持检查 popart_dependent_process 之前的 pass. 默认不使能.

Default: False

--checkpoints

将中间层的 tensor name 加入模型输出, 用于精度调试. 默认值 None. 例如 –checkpoints StatefulPartitionedCall/model_1/Embedding-Token/embedding_lookup:0.

--compiler_options

设置 PopRT 编译选项.

--config_yaml

通过 yaml 文件配置参数.

--convert_version

设置转换后模型的 ONNX Opset version. 默认值 11.

Default: 11

--custom_library_so_paths

设置自定义动态库的路径, 默认值 None.

--custom_pass_config

配置自定义 Pass 的配置文件路径.

--custom_shape_inference

设置自定义 Op Shape-Inference 的 Python 脚本路径.

--data_preprocess

选择量化所需的预处理后的校准数据, 要求为 pickle 格式, 存储为形如 {input_1: ndarray, input_2: ndarray,…} 的字典.

--disable_compilation_progress_bar

编译时不显示进度条.

Default: False

--disable_fast_norm

禁用将 Layernorm 算子转换为 FastNorm 算子. 默认不禁用.

Default: False

--eightbitsio

使能 8bit IO, 目前仅支持 ResNet50. 默认不使能.

Default: False

--enable_erf_gelu

使能将 Erf Gelu 模式替换为 Gelu Op. 默认不使能.

Default: False

--enable_insert_remap

使能自动插入 remap 以改善 tensor layout. 默认不使能.

Default: False

--export_popef

使能在转换过程中生成 PopEF 离线模型文件. 默认不使能.

Default: False

--fp16_skip_op_types

指定 fp16 模式下需要保留 fp32 的 Op 类型. 默认值 None. 例如 –fp16_skip_op_types GroupNormalization,Gelu.

--fp8_skip_op_names

指定 fp8 模式下需要保留 fp16/fp32 的 Op 名称. 默认值 None. 例如 –fp8_skip_op_names Conv_1,Conv_2.

--fp8_params

设置 fp8 模型的参数. 格式为 input_format,weight_format,input_scale,weight_scale. 默认值 F143,F143,0,0. 分别设置 fp8 conv/matmul/gemm 输入和权重的格式 (F143/F152) 及 scale(int). 例如 –fp8_params F143,F143,0,0.

Default: “F143,F143,0,0”

--infer_shape_ahead

转换过程中, 根据模型的输入 shape 首先进行常量折叠和形状推导. 默认不使能.

Default: False

-i, --input_model

被转换模型的路径.

--input_shape

设置模型的输入 shape. 默认值 None. 如果模型输入可变, 建议设置模型输入 shape. 设置格式为 –input_shape ${INPUT_TENSOR_NAME_1}=${INPUT_SHAPE_1} ${INPUT_TENSOR_NAME_2}=${INPUT_SHAPE_2} … 例如 –input_shape input_ids=1,512 attention_mask=1,512.

--ipu_version

Possible choices: ipu2, ipu21

指定 ipu 版本, ipu2 对应 Bow2000/M2000, ipu21 对应 C600, 默认值 ipu2.

Default: “ipu2”

--list_all_passes

列出所有已注册的 Pass. NOTE: 目前仅支持自定义选择部分 Pass, 参考 –passes.

Default: False

--manual_sharding_config

设置 Sharding 和 Pipelining 配置文件(yaml)路径. 默认为 None.

--max_tensor_size

设置 constant_folding 时可以生成的 tensor 的最大 size(单位为 bytes). 默认为-1, 即不限制生成 tensor 的最大 size. 例如 –max_tensor_size 41943040, 表示限制 constant_folding 生成的最大 tensor 为 40MB.

Default: -1

--num_io_tiles

设置 IO Tiles 的数量, 默认为 0. 如果大于 0, IPU 会运行在 OverlapIO 模式. 更多关于 overlap io 的信息可以见: https://docs.graphcore.ai/projects/popart-user-guide/en/latest/overlap_io.html.

Default: 0

--num_of_layers_keep_fp16

FP8 量化时指定 topk 大的损失对应的层为 FP16, 例如需要设置前 3 层量化损失最大的层为 FP16, 该值即设置为 3. 默认值是 0.

Default: 0

--only_manual_sharding

当前命令行仅对模型进行 Sharding 和 Pipelining 设置. 如果使能 only_manual_sharding, 当前命令行仅支持 –input_model, –output_model, –output_dir–manual_sharding_config 参数. –output_model–output_dir 是可选的.

Default: False

--output_dir

设置输出目录, 转换后的模型文件和 PopEF 文件 (如果开启相关选项) 会保存在这里. 默认指向当前目录.

Default: “./”

--output_model

转换后模型的名称, 将放在 –output_dir 目录下. NOTE: 这里只能指定模型名称, 设置转换后模型的保存路径应使用 –output_dir.

--pack_args

使能 packed transformer. 默认为不使能. 例如 –pack_args max_valid_num=90 segment_max_size=64 efficiency_priority=false.

--passes

选择在转换过程中需要用到的 Custom Pass, 参考 –list_all_passes. 默认值 None.

--perf_tuner

使能性能选优, 当前尚未实现. 默认不使能.

Default: False

--popart_options

设置 PopART Session 编译选项. 默认值 None.

--precision

Possible choices: fp32, fp16, fp8, fp8_weight

量化为目标精度模型, 可选项 fp32 / fp16 / fp8 /fp8_weight, 默认值 fp32. 例如 –precision fp16.

Default: “fp32”

--precision_compare

对比原始模型和转换后的模型在 conv/matmul/gemm 处的输出损失.

Default: False

--quantize

使能 FP8 模型量化. 默认不使能.

Default: False

--quantize_loss_type

Possible choices: mse, mae, snr, kld, cos_dist

选择量化损失, 可选为 mse/mae/snr/kld/cos_dist, 默认值 kld.

Default: “kld”

--remap_mode

Possible choices: after_matmul, before_add, both

remap 的模式, 支持 after_matmul/before_add/both 模式. 默认 after_matmul.

Default: “after_matmul”

--run

使能随机数运行模型, 默认不使能.

Default: False

--serialize_matmul

使能 MatMul 序列化节省片上内存. 默认不使能. 按 ${OP_NAME}=${FACTOR}/${MODE}/${KEEP_PRECISION} 或 ${OP_NAME}=${FACTOR}/${MODE} 或 ${OP_NAME}=${FACTOR} 对指定的 MatMul Op 进行序列化设置. Mode 可选项有 input_channels, output_channels, reducing_dim, none. 默认值是 output_channels. KEEP_PRECISION 可选项有 True, False. 默认值是 False. 例如 –serialize_matmul MatMul_1=4/input_channels/True MatMul_2=4/input_channels MatMul_3=4.

--serialize_matmul_add

使能序列化 MatMul weights 和 Add bias 以节省片上内存, 按 weights 最后一维进行序列化. 默认不使能. 按 ${MATMUL_OP_NAME}/${ADD_OP_NAME}=${FACTOR} 对指定的 MatMul 和 Add 进行序列化设置. 例如 –serialize_matmul_add MatMul_1/Add_2=4.

--show

输出模型的输入输出信息.

Default: False

--skip_passes

指定跳过特定的 passes. 默认值 None. 例如 –skip_passes layer_norm_pattern.

-v, --version

显示工具的版本.

Default: False