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