编译优化选项(必选)
-O3 > -O2 > -O1 > -O0。O3优化效果最好,但编译速度最慢。O0无优化,编译最快。
输入数据来源(必选)
--input-source
- ddr 普通Feature,需满足数据layout的对齐要求,额外的padding会增加读写的数据量。
- 数据对齐受--input-layout 影响
- pyramid 和 resize 都是yuv420-nv12数据格式。数据量小,通常是最好的选择。
- --input-layout 选项不适用。
数据排布选项(必选)
--input-layout 和 --output-layout 分别指定模型输入和输出的数据排布。
- NHWC: 当输入C>4时或输出时,C bytes对齐 256*{0,1,...} + {0, 16, 32, 64, 128} 当输入C
- NCHW:W bytes对齐256*{0,1,...} + {0, 16, 32, 64, 128}
- BPU_RAW:shape对齐到layout block。
非BPU_RAW 会有额外的数据转换开销,通常BPU_RAW性能最好,如果编译器决定的BPU_RAW导致padding很大时,NCHW、NHWC可能会好。
实际对齐以编译结果为准(HBM中记录的对齐)
pyramid/resizer输入的数据格式是NV12,--input-layout 无效
优化目标选项
- --fast (默认)
以FPS为优化目标,使延迟最低(FPS最大化)
--ddr
以带宽为优化目标,使带宽最低(推理一次的读写数据量最少)
--balance 1
- 平衡ddr和fast,参数范围[0, 100]。0表示等同--ddr,100等同--fast
部分模型设置balance小于100后,FPS更大的原因:
由于编译时间限制,编译器内部未做全局搜索评估
评估时IR并不是汇编后的最终指令,会有些误差
建议:
当出现带宽瓶颈时可以尝试 --ddr 和 --balance选项,观察上板性能。
拆分输入选项
--split-by-input-dims 准备好部分输入就可以执行模型,模型执行时间会变长。不建议用。
额外输出选项
--dump-layer-output 调试用选项,额外的输出必然会降低性能。
执行时间选项
--max-time-per-fc 指定最长的BPU连续执行时间。限制执行时间会影响调度,导致性能下降。

