✏️
BMNNSDK2开发手册
  • BM1684 BMNNSDK2 入门手册
  • 一、BMNNSDK2软件包
    • 1.1 BMNNSDK2 简介
    • 1.2 BMNNSDK2 文档
    • 1.3 基本概念介绍
    • 1.4 获取BMNNSDK2 SDK
    • 1.5 安装BMNNSDK2 SDK
      • 1.5.1 环境配置-Linux
      • 1.5.2 环境配置-Windows
      • 1.5.3 环境配置-SoC
    • 1.6 更新BMNNSDK
    • 1.7 参考样例简介
    • 1.8 BMNNSDK2更新记录
    • 1.9 BMNNSDK2已知问题
  • 二、快速入门
    • 2.1 跑通第一个例子:综述
    • 2.2 跑通第一个例子:模型迁移
    • 2.3 跑通第一个例子:算法迁移
  • 三、网络模型迁移
    • 3.1 模型迁移概述
    • 3.2 FP32 模型生成
      • 3.2.1 编译Caffe模型
      • 3.2.2 编译TensorFlow模型
      • 3.2.3 编译MXNet模型
      • 3.2.4 编译PyTorch模型
      • 3.2.5 编译 Darknet 模型
      • 3.2.6 编译ONNX模型
      • 3.2.7 编译Paddle模型
    • 3.3 INT8 模型生成
      • 3.3.1 准备lmdb数据集
      • 3.3.2 生成FP32 Umodel
      • 3.3.3 生成INT8 Umodel
      • 3.3.4 精度测试
      • 3.3.5 生成INT8 Bmodel
      • 3.3.6 auto_cali一键量化工具
    • 3.4 实例演示
      • 3.4.1 create_lmdb_demo
      • 3.4.2 classify_demo
      • 3.4.3 face_demo
  • 四、算法移植
    • 4.1 算法移植概述
    • 4.2 C/C++编程详解
    • 4.3 Python编程详解
    • 4.4 解码模块
    • 4.5 图形运算加速模块
    • 4.6 模型推理
    • 4.7 实例演示
  • 五、打包和发布
    • 5.1 概述
    • 5.2 PCIE加速卡模式
    • 5.3 SOC模式
  • 附录
由 GitBook 提供支持
在本页
  1. 三、网络模型迁移
  2. 3.2 FP32 模型生成

3.2.4 编译PyTorch模型

BMNETP是针对PyTorch的模型编译器,可以把PyTorch的model直接编译成BMRuntime所需的执行指令。pytorch 的模型在编译前要经过 torch.jit.trace(见 PyTorch官方文档),trace 后的模型才能用于编译。在编译模型的同时,可选择将每一个操作的 NPU 模型计算结果和 CPU 的计算结果进行对比, 保证正确性。

bmnetp的使用例程参见${BMNNSDK}/examples/nntc/bmnetp。

PyTorch模型转换注意事项

  1. 什么是JIT(torch.jit):JIT(Just-In-Time)是一组编译工具,用于弥合PyTorch研究与生产之间的差距。它允许创建可以在不依赖Python解释器的情况下运行的模型,并且可以更积极地进行优化。

  2. JIT与BMNETP的关系:BMNETP只接受PyTorch的JIT模型。

  3. 如何得到JIT模型:在已有PyTorch的Python模型(基类为torch.nn.Module)的情况下,通过torch.jit.trace得到 torch.jit.trace(python_model,torch.rand(input_shape)).save('jit_model')

  4. 为什么不能使用torch.jit.script得到JIT模型:BMNETP暂时不支持带有控制流操作(如if语句或循环)、inplace的操作(如copy_函数等)的JIT模型,但torch.jit.script可以产生这类模型,而torch.jit.trace却不可以,仅跟踪和记录张量上的操作,不会记录任何控制流操作。

  5. 为什么不能是GPU模型:BMNETP的编译过程不支持。

  6. 如何将GPU模型转成CPU模型? 在加载PyTorch的Python模型时,使用map_location参数 torch.load(python_model, map_location = 'cpu')

  • bmnetp安装:

cd /workspace/bmnet/bmnetp/
pip3 install bmnetp-x.x.x-py2.py3-none-any.whl # <x.x.x>为对应SDK版本
  • 命令行形式:

python3 -m bmnetp [--model=<path>] \
                  [--shapes=<string>] \
                  [--net_name=<name>] \
                  [--opt=<value>] \
                  [--dyn=<bool>] \
                  [--outdir=<path>] \
                  [--target=<name>] \
                  [--cmp=<bool>] \
                  [--enable_profile=<bool>] \
                  [--list_ops]

参数介绍:

args
type
Description

model

string

Necessary. Traced PyTorch model (.pt) path

shapes

string

Necessary. Shapes of all inputs, default use the shape in prototxt, format [[x,x,x,x],[x,x],…], these correspond to inputs one by one in sequence

net_name

string

Necessary. Name of the network.

opt

int

Optional. Optimization level. Option: 0, 1, 2, default 1.

dyn

bool

Optional. Use dynamic compilation, default false.

outdir

string

Necessary. Output directory

target

string

Necessary. Option: BM1682, BM1684; default: BM1682

cmp

bool

Optional.Check result during compilation. Default: true

mode

string

Optional. Set bmnetc mode. Option: compile, GenUmodel. Default: compile.

enable_profile

bool

Optional. Enable profile log. Default: false

list_ops

Optional. List supported ops.

  • Python模式:

import bmnetp
## compile fp32 model
bmnetp.compile(
    model = "/path/to/.pth",        ## Necessary
    outdir = "xxx",                 ## Necessary
    target = "BM1684",              ## Necessary
    shapes = [[x,x,x,x], [x,x,x]],  ## Necessary
    net_name = "name",              ## Necessary
    opt = 2,                        ## optional, if not set, default equal to 1
    dyn = False,                    ## optional, if not set, default equal to False
    cmp = True,                     ## optional, if not set, default equal to True
    enable_profile = True           ## optional, if not set, default equal to False
)

bmnetp若成功,输出的 log 最后会看到以下信息:

######################################
# Store bmodel of BMCompiler.
######################################

bmnetp成功后,将在指定的文件夹中生成一个compilation.bmodel的文件,该文件则是转换成功的 bmodel,用户可以重命名。

上一页3.2.3 编译MXNet模型下一页3.2.5 编译 Darknet 模型

最后更新于2年前