---
title: 使用ATC命令转换ONNX模型
description: "本节介绍如何使用ATC命令转换.onnx格式的模型文件，并在AI处理器上执行推理。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0083.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0083.html
indexId: a53da46425ac9becd1679843209e1386adba295e3ef7b71017dcd711f7bbd79670
---
# 使用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(https://github.com/onnx/models/blob/main/Computer_Vision/resnet50_Opset16_timm/resnet50_Opset16.onnx)下载该文件，再以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 训练系列产品

    - 针对Atlas A3 训练系列产品 / Atlas A3 推理系列产品，在安装AI处理器的服务器执行npu-smi info -t board -iid-cchip_id命令进行查询，获取Chip Name和NPU Name信息，实际配置值为Chip Name_NPU Name。例如Chip Name取值为Ascendxxx，NPU 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 加速卡，在安装AI处理器的服务器执行npu-smi info -t board -iid命令进行查询，获取Chip Name和NPU Name信息，实际配置值为Chip Name_NPU Name。例如Chip Name取值为Ascendxxx，NPU Name取值为1234，实际配置值为Ascendxxx_1234。
      其中，id为设备id，通过npu-smi info -l命令查出的NPU ID即为设备id。

更多参数以及详细使用方法请参见《ATC离线模型编译工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/atctool/atlasatc_16_0001.html)》。
3. 若提示如下信息，则说明模型转换成功。
  1 ATC run success, welcome to the next use.

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

4. 后续操作。
  转换成*.om离线模型后，可以调用模型加载接口加载转换好的*.om离线模型，再调用模型执行接口进行推理。如下为从文件加载模型文件并执行推理的简要流程，详细的模型加载与推理的方法可参见《应用开发 (C&C++)(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000006.html)》中的“模型推理(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000025.html)”章节。

  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);
