---
title: proto合并原理
description: "合并原理如图1所示，其中："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0286.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0286.html
indexId: ce6e8964a06eafd7085e7ba38cbf6c10b7197865952af1e88125c33770be813465
---
# proto合并原理

合并原理如图1所示，其中：

- AMCT（Ascend Model Compression Toolkit）：昇腾模型压缩工具，简称AMCT。
- ATC（Ascend Tensor Compiler）：昇腾张量编译器，即模型转换工具。

各proto文件说明：

- custom.proto：用户自行准备的自定义文件。
- amct_custom.proto：AMCT提供的文件，包括AMCT自定义层以及caffe-master相较于Caffe1.0的更新层。
- caffe.proto：ATC软件包中内置的文件，该文件相较于Caffe1.0版本的caffe.proto，增加了ATC自定义层及调整了编号顺序。该文件同步合入AMCT软件包。

图1 proto合并原理

合并流程以及原则：

1. 用户准备自定义的custom.proto，执行AMCT提供的install.py脚本，该脚本会将用户的custom.proto与AMCT提供的amct_custom.proto进行合并，生成中间文件custom.proto。

  - 如果custom.proto和amct_custom.proto存在算子编号冲突的场景，则报错，提示用户修改custom.proto的算子编号。
  - 如果custom.proto和amct_custom.proto存在算子名相同的场景，则报错，提示用户修改custom.proto的算子名。
2. 将生成的中间文件custom.proto与ATC软件包中的caffe.proto进行合并，生成最终的caffe.proto。

  - 如果custom.proto和caffe.proto存在算子编号冲突的场景，则报错，提示用户修改custom.proto的算子编号。
  - 如果custom.proto和caffe.proto存在算子名相同的场景，做去重处理，以custom.proto为准。
3. 最后会根据用户指定的caffe_dir路径，找到用户Caffe工程下的caffe.proto文件，对其进行备份后替换。

- amct_custom.proto中的编号从200000开始（包括200000）。
- caffe.proto中ATC自定义层的编号区间段为：[5000,200000)。
- custom.proto中用户自定义层编号建议区间段小于5000，并且不与ATC提供的caffe.proto中的内置编号冲突。
