4.星空加速卡X3教程--RainBuilder模型转化(linux)



  • 1 概述

    鲲云工具链RainBuilder是鲲云CAISA架构对应的开发和部署工具链,包含编译器(RbCompiler)、运行时(RbRuntime)和驱动(RbDriver)三个部分,其中编译器用于将已训练好的深度学习网络转译成CAISA引擎兼容的表达形式,运行时和驱动共同组成了CAISA加速处理是的软件层程序。

    在案例1-benchmark中,用于已经通过cr-example(或pyruntime)调用RbRuntime和RbDriver实现了模型在CAISA引擎上的加速。

    该案例主要目的在于帮助用户了解如何使用RbCompiler将TensorFlow、Caffe和ONNX框架的模型转换成RbRuntime可运行的中间表达式(SG-IR)。

    通过案例2的操作,用户会获得如caisa-models中存放的模型的SG-IR,用户在完成对应模型的操作后,便可使用自己生产的SG-IR作为输入代替案例1中对应的输入进行运行,实现CAISA引擎部署和运行的全流程操作。

    RainBuilder支持的前端和该案例所涵盖的应用项如下表所示。

    表 1‑1 网络案例列表

    企业微信截图_16034404253453.png

    RainBuilder的前端操作主要围绕脚本指令RbCli进行,在docker容器中,输入如下指令。

    RbCli
    

    会有如下指令使用打印。

    Usage: RbCli [OPTIONS] COMMAND [ARGS]...
    
     RbCompiler CLI: a command-line tool for the RainBuilder Compiler.
    
    Options:
     --debug / --no-debug
     -v, --version
     --help        Show this message and exit.
    
    
    Commands:
     caffe   Generate SG IR from given caffe model
     onnx    Generate SG IR from given onnx model
     quant   Quant SG from given SG IR
     tf          Generate SG IR from given tf frozen model
     view     Export model coefficient from SG IR
    

    2 RbCompiler运行

    进入参考模型路径

    cd ~/workspace/corerain-models/reference-models
    

    在运行路径中预先存放了模型文件,每个文件中都含有模型的 .pb文件和该模型对应的图像前处理程序 preprocess.py。具体文件示例结构如下。

     reference-models
    ├─ deeplab_v3
    ├─ inception_v4
    ├─ kynet_ssd
    │  ├─ model
    │  │  └─ kynet_ssd.pb
    │  └─ preprocess.py
    ├─ resnet_v1_101
    ├─ resnet_v1_50
    ├─ ssd_fpn
    ├─ unet
    ├─ vgg_16
    ├─ vgg_19
    ├─ yolov3
    └─ ...
    

    2.1 SG-IR流图生成

    SG流图的生成指令有

    # TensorFlow
    RbCli [OPTIONS] tf [ARGS]...
    
    # Caffe
    RbCli [OPTIONS] caffe [ARGS]...
    
    # ONNX
    RbCli [OPTIONS] onnx [ARGS]...
    
    # PyTorch
    RbCli [OPTIONS] torch [ARGS]
    

    不同的框架对应不同的前端指令,以基于TensorFlow框架的kynet_ssd为例,用户可以执行以下指令完成模型的转化

    RbCli tf kynet_ssd/model/kynet_ssd.pb \
       --model-name kynet_ssd \
       --output-dir kynet_ssd/compilation/sg \
       --with-json True
    

    该指令会将对应的输入模型转换成初始的SG-IR,并将输出结果保存在指定文件夹中。

    2.2 SG-IR流图量化

    量化是将初始的SG-IR进行低比特数据压缩的过程,以上一步生成的浮点SG-IR为输入,输出8bit整型SG-IR。

    SG流图的量化需要用户指定图像的预处理程序、量化范围,以及量化数据集路径,具体参数如下表所示。

    表 2‑2量化参数列表

    企业微信截图_16034406181830.png

    对应指令:

    RbCli [OPTIONS] quant [ARGS]...
    

    同样,以kynet_ssd为例,用户执行以下指令完成SG流图的量化

    RbCli quant kynet_ssd/compilation/sg/kynet_ssd.sg \
    
       kynet_ssd/preprocess.py \
    
       --preprocess-range -123,151 \
    
       --img-dir ~/workspace/corerain-datasets/03-fddb/quants-data/ \
    
       --output-dir kynet_ssd/compilation/quant/ \
    
       --gpu True \
    
       --use-kld True
    

    注意:量化指令示例中的--gpu参数仅在GPU版本的docker容器中使用,详情可见本《教程》第二章加载docker环境部分。同时,--use-kld True能够获得更小的精度损失,但会占用更多的计算资源,因此该参数也建议在GPU版本的docker容器中使用。

    至此,模型kynet_ssd的转化便已完成,其文件结构如下。

     kynet_ssd
    ├─ compilation
    │  ├─ quant
    │  │  └─ kynet_ssd_8bit.sg
    │  └─ sg
    │      ├─ kynet_ssd.json
    │      └─ kynet_ssd.sg
    ├─ model
    │  └─ kynet_ssd.pb
    └─ preprocess.py
    

    其中quant文件夹下的kynet_ssd_8bit.sg文件即本章01-Benchmark中用到的模型输入文件。

    其他更加详细的使用可以参考鲲云星空加速卡X3用户手册.pdf


登录后回复