

Pull Request已成功合入, 合并人@CANN-robot
(感谢 kantao1 的贡献)变更摘要
本 PR 旨在让 ATC 的 ONNX parser 层支持 INT4 类型,从而能够解析含 INT4 的 ONNX 模型并完成图转 OM。主要改动包括在 ge_onnx.proto 与 onnx_util.h 中新增 INT4 枚举值、在 onnx_util.cc 中建立 OnnxDataType::INT4 到 ge::DataType::DT_INT4 的类型映射,并在 OnnxConstantParser 中实现 INT4 常量数据的打包字节拷贝逻辑(兼容 raw_data 与 int32_data 两种存储方式),同时修复了 OnnxFileConstantParser 中对未定义数据类型的判断条件。此外补充了 UT 与 ST 测试用例,覆盖类型映射、数据对齐、padding 截断及越界保护等场景。
主要改动
-
新增
INT4类型定义: 在graph_metadef/proto/onnx/ge_onnx.proto的TensorProto.DataType枚举中新增INT4 = 22,并注明 4-bit 有符号整数、每字节打包 2 个值、低位在前;同时在parser/parser/onnx/onnx_util.h的OnnxDataType枚举中新增INT4 = 22。 -
新增
INT4类型映射: 在onnx_util.cc的onnx_data_type_map中增加{OnnxDataType::INT4, ge::DataType::DT_INT4},使 ONNX 的INT4能映射到 GE 的DT_INT4。 -
OnnxConstantParser支持INT4常量数据: 在onnx_constant_parser.cc中为INT4增加基于int32_data_size()的数据量统计,并在ParseConvertDataElements中新增INT4分支,通过ge::GetSizeInBytes计算精确的打包字节数,按min(byte_size, available)从int32_data直接拷贝,避免 padding 槽位带来的多余数据及越界读取。 -
修正未定义数据类型的判断逻辑: 在
onnx_file_constant_parser.cc的ParseDataType中,将type >= ge::DataType::DT_UNDEFINED改为type == ge::DataType::DT_UNDEFINED,避免将合法的DT_INT4等类型误判为未定义。 -
补充测试用例: 新增 UT 与 ST 用例及
onnx_int4_gen.py生成脚本,覆盖ParseConvertDataType_Int4、raw_data路径、int32_data对齐、奇数个数截断、数据不足防越界,以及端到端解析含INT4Constant 的 ONNX 模型并校验DT_INT4类型与打包字节内容。


/lgtm

