昇腾社区首页
中文
注册
开发者
下载

使用ATC命令转换ONNX模型

本节介绍如何使用ATC命令转换.onnx格式的模型文件,并在AI处理器上执行推理。

对于PyTorch、TensorFlow、MindSpore等前端框架导出的模型文件,GE提供了模型转换的能力,支持通过ATC命令行工具将模型转化为适配AI处理器的离线模型,并基于图模式执行推理。ATC目前已支持:

  • *.onnx格式的模型转换成*.om格式的模型
  • *.pb格式的模型转换成*.om格式的模型
  • *.air格式的模型转换成*.om格式的模型
  • *.prototxt与*.caffemodel格式的模型转换成*.om格式的模型

下面以*.onnx格式的模型转换成*.om格式的模型为例,介绍基本使用方法:

  1. 获取ONNX网络模型。

    单击Link下载该文件,再以CANN软件包运行用户将获取的文件上传至开发环境任意目录,例如上传到$HOME/module/目录下。

  2. 使用ATC命令行工具进行模型转换(以*.onnx模型举例)。
    atc --model=$HOME/module/resnet50.onnx --framework=5 --output=$HOME/module/out/onnx_resnet50 --soc_version=<soc_version>
    • --model:原始网络模型文件路径与文件名。
    • --framework:原始网络模型框架类型,“3”代表TensorFlow模型,“5”代表ONNX模型,“1”代表MindSpore框架*.air格式的模型文件或TorchAir通过export导出的标准*.air格式文件
    • --output:存放转换后的离线模型的路径以及文件名,例如,若配置为“$HOME/module/out/tf_resnet50”,则转换后的离线模型存储路径为“$HOME/module/out/”,转换后的离线模型名称为“tf_resnet50.om”。
    • --soc_version:AI处理器的型号。取值查询方法如下:
      • 针对如下产品:在安装AI处理器的服务器执行npu-smi info命令进行查询,获取Name信息。实际配置值为AscendName,例如Name取值为xxxyy,实际配置值为Ascendxxxyy

        Atlas A2 训练系列产品 / Atlas A2 推理系列产品

        Atlas 200I/500 A2 推理产品

        Atlas 推理系列产品

        Atlas 训练系列产品

      • 针对如下产品,在安装AI处理器的服务器执行npu-smi info -t board -i id -c chip_id命令进行查询,获取Chip NameNPU Name信息,实际配置值为Chip Name_NPU Name。例如Chip Name取值为AscendxxxNPU Name取值为1234,实际配置值为Ascendxxx_1234。其中:
        • id:设备id,通过npu-smi info -l命令查出的NPU ID即为设备id。
        • chip_id:芯片id,通过npu-smi info -m命令查出的Chip ID即为芯片id。

        Atlas 350 加速卡

        Atlas A3 训练系列产品 / Atlas A3 推理系列产品

    更多参数以及详细使用方法请参见ATC离线模型编译工具用户指南

  3. 若提示如下信息,则说明模型转换成功。
    1
    ATC run success, welcome to the next use.
    

    成功执行命令后,*.onnx模型将会被转换成适配AI处理器的*.om离线模型,在--output参数指定的路径下,可查看生成的*.om离线模型文件。

  4. 后续操作。

    转换成*.om离线模型后,可以调用模型加载接口加载转换好的*.om离线模型,再调用模型执行接口进行推理。如下为从文件加载模型文件并执行推理的简要流程,详细的模型加载与推理的方法可参见应用开发指南 (C&C++)中的模型管理章节。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 1.指定模型路径
    const char* omModelPath = "./model/onnx_resnet50.om";
    uint32_t modelId;
    // 2.加载离线模型文件,模型加载成功,返回标识模型的ID
    ret = aclmdlLoadFromFile(omModelPath, &modelId);
    // 3.执行模型,inputDs和outputDs为模型输入输出的Dataset对象
    ret = aclmdlExecute(modelId, inputDs, outputDs);
    // 4.卸载模型
    ret = aclmdlUnload(modelId);