---
title: 模型构建
description: "对于开源框架的网络模型（如Caffe、TensorFlow等），不能直接在AI处理器上做推理，需要先使用ATC（Ascend Tensor Compiler）工具将开源框架的网络模型转换为适配AI处理器的离线模型（*.om文件）。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/acldevg/aclpythondevg_0030.html
sourcePath: /source/zh/canncommercial/900/programug/acldevg/aclpythondevg_0030.html
indexId: 6b1d12fb91aae25c837326488ba9c32417371c1ea03a556908ed460b8006a68871
---
# 模型构建

对于开源框架的网络模型（如Caffe、TensorFlow等），不能直接在AI处理器上做推理，需要先使用ATC（Ascend Tensor Compiler）工具将开源框架的网络模型转换为适配AI处理器的离线模型（*.om文件）。

此处以ONNX框架的ResNet-50网络为例，说明如何使用ATC工具进行模型转换，详细说明请参见《ATC离线模型编译工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/atctool/atlasatc_16_0001.html)》。

1. 以运行用户登录开发环境。
2. 执行模型转换。
执行以下命令，将原始模型转换为AI处理器能识别的*.om模型文件。请注意，执行命令的用户需具有命令中相关路径的可读、可写权限。以下命令中的“<SAMPLE_DIR>”请根据实际样例包的存放目录替换。“<soc_version>”请根据实际AI处理器的版本进行替换。

```
cd
<SAMPLE_DIR>
/MyFirstApp_ONNX/model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224"  --soc_version=
<soc_version>
```

各参数的解释如下，详细约束说明请参见《ATC离线模型编译工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/atctool/atlasatc_16_0001.html)》。

  - --model：ResNet-50网络的模型文件的路径。
  - --framework：原始框架类型。5表示ONNX。
  - --output：resnet50.om模型文件的路径。请注意，记录保存该om模型文件的路径，后续开发应用时需要使用。
  - --input_shape：模型输入数据的shape。
  - --soc_version：AI处理器的版本。
    如果无法确定当前设备的soc_version，可按如下方法查询： 针对如下产品：在安装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 -i id -c chip_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 -i 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。


- 如果模型转换时，提示有不支持的算子，请先参见《Ascend C算子开发(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/Ascendcopdevg/atlas_ascendc_map_10_0002.html)》先完成自定义算子，再重新转换模型。
- 如果模型转换时，提示有算子编译相关问题，但根据报错信息无法定位问题、需要联系技术支持时（您可以获取日志后单击Link(https://www.hiascend.com/support)联系技术支持。），则需设置DUMP_GE_GRAPH、DUMP_GRAPH_LEVEL环境变量，再重新模型转换，收集模型转换过程中各个阶段的图描述信息。关于环境变量以及图描述信息的说明，请参见《ATC离线模型编译工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/atctool/atlasatc_16_0001.html)》中的“参考 > dump图详细信息”。

- 如果模型的输入Shape是动态，关于模型构建、模型推理的说明请参见  模型动态Shape输入推理
。
- 如果现有网络不满足您的需求，您可以使用AI处理器支持的算子、调用构图接口自行构建自己的网络，再编译成om离线模型文件。详细说明请参见《图开发(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/graphdevg/atlasag_25_0081.html)》。
