BModel

BModel 介绍

bmodel是面向算能TPU处理器的深度神经网络模型文件格式。 通过模型编译器工具(如bmnetc/bmnett等)生成,包含一个至多个网络的参数信息,如输入输出等信息。 并在runtime阶段作为模型文件被加载和使用。

bmodel也作为BMLang编程语言的编译输出文件,由BMLang编译阶段生成,包含一个或多个BMLang功能Function的 参数、输入输出等信息。

BModel 使用

通过bm_model.bin工具,可以查看bmodel文件的参数信息,可以将多个网络bmodel分解成多个单网络的bmodel, 也可以将多个网络的bmodel合并成一个bmodel。

目前支持以下六种使用方法:

  1. 查看简要信息

bm_model.bin --info xxx.bmodel

  1. 查看详细参数信息

bm_model.bin --print xxx.bmodel

  1. 分解

bm_model.bin --extract xxx.bmodel

将一个包含多个网络多种stage的bmodel分解成只包含一个网络的一个stage的各个bmodel,分解出来的bmodel按照net序号和stage序号,命名为bm_net0_stage0.bmodel、bm_net1_stage0.bmodel等等。

  1. 合并

bm_model.bin --combine a.bmodel b.bmodel c.bmodel -o abc.bmodel

将多个bmodel合并成一个bmodel,-o用于指定输出文件名,如果没有指定,则默认命名为compilation.bmodel。

多个bmodel合并后:

  • 不同net_name的bmodel合并,接口会根据net_name选择对应的网络进行推理

  • 相同net_name的bmodel合并,会使该net_name的网络可以支持多种stage(也就是支持不同的input shape)。接口会根据用户输入的shape,在该网络的多个stage中选择。对于静态网络,它会选择shape完全匹配的stage;对于动态网络,它会选择最靠近的stage。

限制:同一个网络net_name,使用combine时,要求都是静态编译,或者都是动态编译。暂时不支持相同net_name的静态编译和动态编译的combine。

  1. 合并文件夹

bm_model.bin --combine_dir a_dir b_dir c_dir -o abc_dir

同combine功能类似,不同的是,该功能除了合并bmodel外,还会合并用于测试的输入输出文件。它以文件夹为单位合并,文件夹中必须包含经过编译器生成的三个文件:input_ref_data.dat, output_ref_data.dat, compilation.bmodel。

  1. 导出二进制数据

bm_model.bin --dump xxx.bmodel start_offset byte_size out_file

将bmodel中的二进制数据保存到一个文件中。通过print功能可以查看所有二进制数据的[start, size],对应此处的start_offset和byte_size。