群组信息 私有

Global Moderators

Forum wide moderators

成员列表

  • RainBuilder介绍及使用指南

    RainBuilder介绍及使用指南







    本教程旨在介绍RainBuilder编译工具中编译器Compiler的使用方法,以及模型在FPGA加速卡上的部署流程。

    Note:

    1. 本教程中各步骤均通过提前编写好的shell脚本文件实现。
    2. Linux用户需要进入docker,并在docker中执行本教程中涉及compiler的所有步骤。docker的进入方法如下:
    sudo docker start <container>
    sudo docker exec -ti <container> /bin/bash
    



    〇、资料下载

    资料名称 下载地址
    NA-100a http://cloud.corerain.com:8082/share.cgi?ssid=0eoxsbj
    NA-100a-docs http://cloud.corerain.com:8082/share.cgi?ssid=05t030q
    corerain-datasets http://cloud.corerain.com:8082/share.cgi?ssid=0PSeFUu
    corerain-public-tools http://cloud.corerain.com:8082/share.cgi?ssid=0TKhYIi
    • NA-100a:包含每次发布的CAISA软件包,其子路径为独立的软件版本,建议始终使用最新的发行版本。每一个软件发行版路径内包含CAISA的硬件bitstream,RainBuilder安装包,pcie驱动,案例工程(源码发布)。

    • NA-100a-docs:包含四个文档:

      • 星空加速卡产品介绍:星空加速卡的产品规格信息及板卡安装指南。
      • 浪潮 FPGA 加速卡用户手册:浪潮原厂参考手册

      以上两个文档与发布版本无关。

      • 星空加速卡教程:星空加速卡案例工程的操作说明,包含快速指南,用户在安装好板卡后,从该文档开始对板卡进行操作和了解。
      • 星空加速卡用户手册:星空加速卡开发时的调用指令和API集合,建议用户在了解加速卡使用后,参考该文档进行二次开发。

      ​ 以上两个文档与软件发布版本相关,请对应下载与版本匹配的文档。

    • corerain-datasets:鲲云测试用的公有数据集,由于数据量较大,下载后请保存长期使用。

    • corerain-public-tools:包含一些工具包,可根据需要进行下载,同时,使用案例里的网络也会在该路径下备份




    通过本教程,用户能够了解或掌握:

    1. 如何通过RainBuilder将模型部署至星空FPGA加速卡。
    2. 编译器命令行工具RbCli的使用。
    3. 编译器Runtime的使用。



    一、 RbCompiler介绍与说明

    在“CAISA架构与Rainbuilder编译工具介绍”中我们已经介绍了CompilerCompiler通过命令行工具RbCli实现对网络模型进行解析和转换。

    RbCli命令由五个部分组成:RbCli freezeRbCli tf/onnx/caffeRbCli quantRbCli optRbCli export,描述如下:

    # 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:
      freeze  Freeze a TensorFlow model from checkpoints
      tf      Generate SG IR from given tf frozen model
      caffe   Generate SG IR from given caffe model
      onnx    Generate SG IR from given onnx model
      quant   Quant SG from given SG IR
      opt     Optimization SG from given SG IR
    

    Note:
    在“CAISA架构与Rainbuilder编译工具介绍”中,我们已经介绍了运行星空加速卡所需的下载资料,解压NA-100a后,在R2500004201908/corerain-use-cases/02-rainbuilder/frontend-tools`文件夹中预置了本教程所需的所有指令脚本,用户可以通过依次运行这些脚本完成模型的编译。本教程的讲解也将基于这些脚本进行。




    二、 模型预处理

    由于模型在训练结束之后仍然保留着训练的状态,比如数据的输入仍然为一个队列,输入的shapebatch_size仍然为一个比较大的值。因此,在使用compiler进行模型编译之前,我们需要对模型进行一些预处理,使其能够被compiler正确编译。之后我们需要将其输入设置为placeholder,并且将batch_size置1。完成了模型预处理后,模型便能被compiler正确编译。




    三、 RbCli的使用步骤

    在“CAISA架构与Rainbuilder编译工具介绍”中介绍了运行星空加速卡所需的下载资料,我们在R2500003201908/corerain-use-cases/02-rainbuilder/reference-models路径下预置了经过训练的推演模型,且均已转换为pb文件。

    接下来我们将讲解如何通过compiler将该模型部署在星空FPGA加速卡上。

    3.1 冻结模型 RbCli freeze(TensorFlow特有,可选)

    TensorFlow在训练时通常使用checkpoint作为输出模型的格式,如果用户使用checkpoint模型格式,则需要在reference-models中建立一个对应的文件夹,并将checkpoint对应的模型文件放置其中。

    3.1.1 运行脚本

    ./00-freeze.sh <net name>
    

    具体命令如下:

    RbCli freeze ${MODELS_PATH}/${NET_NAME}/ckpt -m ${MODELS_PATH}/${NET_NAME}/${NET_NAME}.pb
    

    3.1.2 命令描述

    冻结命令RbCli freeze是将TensorFlow checkpoint路径下模型训练完成后的结果转化为冻结模型*.pb,一个训练完成的神经网络模型在checkpoint文件夹路径下应该包含以下三个文件:

    1. *.meta: 模型的Meta信息。
    2. *.data*: 训练数据文件。
    3. *.index: 索引文件。

    Note:
    在模型训练过程中,TensorFlow会保存所有阶段性训练的结果。在进行冻结模型前,需要在checkpoint文件中选择其中一个训练结果的文件路径,不能将所有保存下来的训练路径都存放在checkpoint文件中。

    以上三个文件为RbCli freeze的输入,输出为冻结模型文件*.pb,它定义了推理图的结构与各层神经网络的参数。


    3.2 生成SG RbCli sg

    3.2.1 运行脚本

    #TensorFlow
    ./01-sg.sh tf <net name>
    #Caffe
    ./01-sg.sh caffe <net name>
    #ONNX
    ./01-sg.sh onnx <net name>
    

    具体命令如下:

    #TensorFlow
    RbCli tf MODEL_FILE
    #Caffe
    RbCli caffe CAFFE_GRAPH CAFFE_MODEL
    #ONNX
    RbCli onnx MODEL_FILE
    

    3.2.2 命令描述

    RbCli tf命令以上一步的冻结模型*.pb文件作为输入,生成SG IR文件。

    RbCli caffe命令以caffe模型的.prototxt文件路径和.caffemodel文件路径作为输入,生成SG IR文件。

    RbCli onnx命令以onnx模型的.onnx文件路径作为输入,生成SG IR文件。

    SG IR是流图的中间表达形式。流图主要由两部分构成:

    1. 模型结构文件:使用protobuf协议,保存在以.pbtxt为后缀的文件中。
    2. 模型参数文件:使用h5py格式保存在以.h5为后缀的文件中。

    3.3 量化SG RbCli quant

    3.3.1 运行脚本

    ./02-quant.sh <netname>
    

    具体命令如下:

    RbCli quant [SG_DEF_FILE] [SG_H5_FILE] [PREPROCESS_PY]
           --preprocess-range -123, 151 
           --img-dir [Database_path] 
           --output-dir [Frozen_Model_path] 
           --with-coeff True
    

    3.3.2 命令描述

    可以使用RbCli quantSG IR进行8-bit量化操作。在执行此操作前,用户需要提前准备一定量的实际数据,数据应尽量与目标场景中的实际数据相似,并且使用python作为数据的处理方式。


    3.4 优化命令 RbCli opt

    3.4.1 运行脚本

    ./03-opt <netname>
    

    具体命令的如下:

    RbCli opt  SG_DEF_FILE SG_H5_FILE OPT_CONFIG
    

    其中opt_config为板卡的描述文件,该文件用于分配模型中不同节点的运算执行设备。

    RbCli opt [*_sg.pbtxt] [*_sg.h5] [opt_config] -o [Output_path]
    

    3.4.2 命令描述

    如果需要将神经网络模型部署在星空FPGA加速卡上执行,则需要生成匹配硬件计算资源的模型文件。所以,本步骤首先根据硬件的计算资源配置,将多个SGNode算子操作融合为一个计算操作,节省IO的时间损耗;另外,由于每个硬件板卡的计算资源和架构各有不同,不是所有SGNode都可以部署FPGA上实现硬件加速,有一些特殊计算操作需要分配到CPU上运行;最后,该步骤还会根据硬件加速板卡的硬件资源配置评估最佳的计算资源和并行度参数。




    4. RbRuntime介绍及使用流程

    4.1 简介

    RbRuntime作为RainBuilder的后端,配合RbCompiler使用,用于加载并运行RbCompiler生成的模型文件pbtxt和参数,生成对应的模型图SG,SG包含pbtxt文件里描述的所有节点,根据节点创建对应的OP,加载模型参数和输入数据,并调度计算节点,按照拓扑顺序将节点部署再相应的设备上执行计算,返回模型的计算结果。


    4.2 使用流程

    使用RbRuntime进行模型推理的基本流程为:

    ​ 1、读取pbtxt

    ​ 2、创建SG

    ​ 3、加载模型参数数据

    ​ 4、创建SGRunner

    ​ 5、准备输入数据

    ​ 6、运行计算图并获取计算结果

    以下提供一个简单的示例流程,假设已有yolo-v3的模型数据,其目录包括以下文件:

    • yolov3_sg.pbtxt
    • yolov3_coeff/float_little/

    1、根据pbtxt初始化SGDef

    this->sg_def = LoadSGDefFromFile("yolov3_sg.pbtxt");
    

    2、将SGDef数据转换为SG对象

    this->sg = BuildSG(this->sg_def);
    

    3、加载模型参数并确定输入节点信息

    this->const_data = LoadSGDataMapFromDir("yolov3_coeff/float_little");
    this->input_node_def = FindImageInput(this->sg_def);
    

    4、创建 SGRunner,指定工作线程数为 num_threads

    this->runner = BuildSGRunner(this->sg, this->const_data, num_threads);
    

    5、创建输入的 SGDataMap,并指定预处理和后处理函数 preprocessor_func 和 postprocessor_func 为预处理和后处理函数。

    //input_image_file_path 为输入图片的路径。 
    auto input_data_map = CreateInputSGDataMap(input_image_file_path, 
                input_node_def, 
                preprocessor_func); 
    input_data_map->SetupPostprocessor(postprocessor_func)
    

    前后处理函数

     auto post_processor = [=](SGDataMap *pOutputDataMap) {
     auto output_image_path = GetResultImagePath(image_path);
     processor->PostProcess(pOutputDataMap);
     processor->Print(pOutputDataMap, 5);
     cv::Mat image = cv::imread(image_path);
     processor->Draw(pOutputDataMap, image);
     processor->Write(pOutputDataMap, image, output_image_path);
     return 0;
    };
    input_data_map->SetupPostprocessor(post_processor);
    

    6、启动Runner开始计算并得到结果

    同步模式

    auto output_data_map = runner->Run(sg, const_data, input_data_map);
    

    异步模式

    auto futureobj = runner->RunAsync(sg, const_data, input_data_map);
    //do something else
    auto output_data_map = futureobj.get();
    
    发布在 星空加速卡使用指南
  • CAISA架构与Rainbuilder编译工具介绍

    CAISA架构与Rainbuilder编译工具介绍








    本文档主要介绍了运行星空加速卡所需的下载资料,并提供了CAISA架构,以及对应编译工具Rainbuilder的简单介绍。

    通过本文档,用户可以:

    1. 能够了解CAISA架构的基本原理
    2. 了解Rainbuiler编译工具的组成,以及各组成部分的作用
    3. 了解Rainbuilder编译工具的基本使用流程





    〇、资料下载


    资料名称 下载地址
    NA-100a http://cloud.corerain.com:8082/share.cgi?ssid=0eoxsbj
    NA-100a-docs http://cloud.corerain.com:8082/share.cgi?ssid=05t030q
    corerain-datasets http://cloud.corerain.com:8082/share.cgi?ssid=0PSeFUu
    corerain-public-tools http://cloud.corerain.com:8082/share.cgi?ssid=0TKhYIi

    • NA-100a:包含每次发布的CAISA软件包,其子路径为独立的软件版本,建议始终使用最新的发行版本。每一个软件发行版路径内包含CAISA的硬件bitstream,RainBuilder安装包,pcie驱动,案例工程(源码发布)。

    • NA-100a-docs:包含四个文档:

      • 星空加速卡产品介绍:星空加速卡的产品规格信息及板卡安装指南。
      • 浪潮 FPGA 加速卡用户手册:浪潮原厂参考手册

      以上两个文档与发布版本无关。

      • 星空加速卡教程:星空加速卡案例工程的操作说明,包含快速指南,用户在安装好板卡后,从该文档开始对板卡进行操作和了解。
      • 星空加速卡用户手册:星空加速卡开发时的调用指令和API集合,建议用户在了解加速卡使用后,参考该文档进行二次开发。

      ​ 以上两个文档与软件发布版本相关,请对应下载与版本匹配的文档。

    • corerain-datasets:鲲云测试用的公有数据集,由于数据量较大,下载后请保存长期使用。

    • corerain-public-tools:包含一些工具包,可根据需要进行下载,同时,使用案例里的网络也会在该路径下备份





    一、CAISA架构介绍



    硬件加速器平台的核心即CAISA加速引擎,鲲云的CAISA加速引擎采用定制人工智能数据流架构,针对深度学习算子进行优化和设计,架构具有高度可拓展性和适用于多种深度学习算法的通用性,实测能够实现硬件90%以上(当前实测最高可达98%)的理论峰值性能。


    目前CAISA架构所支持的算子列表如下:

    算子名称 备注
    AvgPool
    Conv2D
    Conv2DBackpropInput Deconvolution
    Concat
    FullyConnected
    LeakyRelu
    MaxPool2D
    Mean GlobalAveragePooling
    Relu
    Relu6
    Upsample NearestNeighbor



    二、编译工具RainBuilder介绍

    鲲云的编译工具链RainBuilder,为针对CAISA加速引擎开发的软件开发及部署工具系统,用户在使用CAISA加速引擎时,无需了解CAISA硬件级的运行机制和原理,从而可以专注在算法的开发、优化以及编译部署上。为使用者尤其是算法工程师和软件工程师提供了简单易用的开发部署流程。

    Rainbuilder由RbCompilerRbRuntimeRbDriver三部分构成,Rainbuilder的原理如下图所示:


    • RainBuilder Compiler(下文称为RbCompiler或Compiler)可以将用户在TensorFlow、Caffe、ONNX等深度学习框架下开发的算法模型进行全自动算法模型编译优化,并提取数据流中间表达式SG IR。模型编译过程中自动进行数据量化、节点融合、软硬件分割等操作。

    • RainBuilder Runtime为CAISA加速引擎的软件运行时,负责将SG-IR进行加载并使用CAISA加速引擎对深度学习网络进行运行加速,该部分组件以C/C++ API接口的形式开放给用户进行二次开发和部署使用。

    • RainBuilder Driver是底层CAISA架构的相关驱动模块,支持CAISA硬件架构驱动、硬件模块计算调度、以及硬件模型分析。对于应用开发者透明,自动进行细粒度性能优化及调度。


    因此对于开发者来说,使用RainBuilder进行开发的具体流程如下图所示:


    接下来将分别介绍 RbCompilerRbRuntime 的使用流程。



    2.1 RbCompiler使用流程介绍

    在介绍RbCompiler的使用过程前,我们需要提前熟悉下列关键词:

    • SG: Streaming Graph, Compiler使用的数据结构, 每个SG图由一些列SGNodes组成。
    • SG IR: 将SG串行组合链接得到的结果称为SR IR, SR IR文件使用protobuf文件格式,由模型结构文件(.pbtxt)和模型数据文件(.bin)组成。
    • SGNode: SGNode 描述了模型中的一系列计算方式,举例来说,一个卷积计算可以代表一个SGNode。

    RbCompiler对于算法模型的操作流程如下图所示:


    Front-End:进行模型解析,可支持TensorFlow、Caffe、ONNX等深度学习算法开发框架。

    SG转化:将模型转化为SG-IR。

    量化SG:对SG IR进行8bit量化,精度损失可以接受的情况下进行位宽压缩,从而减少计算资源的消耗。

    优化SG:根据FPGA加速卡的计算资源配置,进行算子的融合和SG节点的硬件分配。


    2.2 RbCompiler支持的 API

    RbCompiler的前端在算子级别对不同开发框架下的模型进行解析,并转化为RbRuntime可以识别的SG-IR,RbCompiler前端与TensorFLow、Caffe、ONNX之间的算子对应关系如下表所示

    RbCompiler Frontend vs. TensorFlow

    RbCompiler Frontend vs.Caffe

    RbCompiler Frontend vs.ONNX


    2.3 RbRuntime介绍使用流程

    RbRuntime作为RainBuilder的后端,配合RbCompiler使用,用于加载并运行RbCompiler生成的 模型文件pbtxt和参数,生成对应的模型图SG,SG包含pbtxt文件里描述的所有节点,根据节点创建对应的OP,加载模型参数和输入数据,并调度计算节点,按照拓扑顺序将节点部署在相应的设备上 执行计算,返回模型的计算结果。

    RbRuntime主要包含的模块有:


    RbRuntime运行如下图所示:

    发布在 星空加速卡使用指南
  • RE: 2. 板卡架构升级与编译环境安装指南

    Hi @chong, 虚拟机中已经包含了Rainbuilder编译环,因此可以直接使用,不需要再下载docker了。这里我们提供docker的目的是为了提供给那些原本主机系统就是linux的用户使用的。

    发布在 雨人加速卡使用指南
  • RE: 4. RbCompiler使用与模型部署指南

    @Frank 请问你所使用的环境是我们提供的virtualbox镜像还是docker呢?如果是docker,首先需要确保Hands_on文件在/home/[user_name]/workspace文件夹下。在进入docker之后,在docker中通过cd命令进入docker的workspace文件夹,之后再执行该命令,具体的进入方法在文章开头的第一个Note里。

    发布在 雨人加速卡使用指南
  • RE: 2. 板卡架构升级与编译环境安装指南

    @Frank 是不是因为原来你的板卡上没有workspace这个文件夹,导致scp命令将文件传进去之后更名为一个workspace的文件。
    这种情况有两种解决方法,第一个是使用在板卡中使用mkdir workapce命令,创建一个workspace文件夹,之后再执行scp拷贝命令。
    第二种是直接拷贝到root文件夹下scp -r image_classifier root@192.168.123.8:/

    发布在 雨人加速卡使用指南
  • RE: 2. 板卡架构升级与编译环境安装指南

    @Frank 你可以在桌面上打开一个新终端,输入如下命令,之后回车执行即可

    sudo scp -r [image_classifier的绝对路径] root@192.168.123.8:/workspace
    
    发布在 雨人加速卡使用指南