已合并
【feat】: atc support onnx int4 #4420
kantao1创建于 4 天前
【feat】: atc support onnx int4 #4420
已合并
kantao1创建于 4 天前
kantao1成员
4 天前

Pull Request

描述

需求背景

ATC 支持 ONNX INT4 的图转 OM。GE 下游(compiler/runtime/OM 序列化)已支持 DT_INT4,但 ONNX parser 层缺少 INT4 类型映射,导致含 INT4 的 ONNX 模型无法解析。

变更类型

请选择本次引入的变更类型:

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:

  • UT(5 个用例):类型映射、raw_data 路径、int32_data 对齐场景、padding 截断、数据不足防越界
  • ST(1 个用例):端到端解析含 INT4 Constant 的 ONNX 模型,验证类型映射和数据正确性

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 kantao1 的贡献)
Kkantao1成员
4 天前 添加了label:enhancement
Kkantao1成员
4 天前 创建了 pull request,commit 4021d224
atomgit-bot
atomgit-bot
4 天前 评论:

变更摘要

本 PR 旨在让 ATC 的 ONNX parser 层支持 INT4 类型,从而能够解析含 INT4 的 ONNX 模型并完成图转 OM。主要改动包括在 ge_onnx.protoonnx_util.h 中新增 INT4 枚举值、在 onnx_util.cc 中建立 OnnxDataType::INT4ge::DataType::DT_INT4 的类型映射,并在 OnnxConstantParser 中实现 INT4 常量数据的打包字节拷贝逻辑(兼容 raw_dataint32_data 两种存储方式),同时修复了 OnnxFileConstantParser 中对未定义数据类型的判断条件。此外补充了 UT 与 ST 测试用例,覆盖类型映射、数据对齐、padding 截断及越界保护等场景。

主要改动

  • 新增 INT4 类型定义: 在 graph_metadef/proto/onnx/ge_onnx.protoTensorProto.DataType 枚举中新增 INT4 = 22,并注明 4-bit 有符号整数、每字节打包 2 个值、低位在前;同时在 parser/parser/onnx/onnx_util.hOnnxDataType 枚举中新增 INT4 = 22

  • 新增 INT4 类型映射: 在 onnx_util.cconnx_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.ccParseDataType 中,将 type >= ge::DataType::DT_UNDEFINED 改为 type == ge::DataType::DT_UNDEFINED,避免将合法的 DT_INT4 等类型误判为未定义。

  • 补充测试用例: 新增 UT 与 ST 用例及 onnx_int4_gen.py 生成脚本,覆盖 ParseConvertDataType_Int4raw_data 路径、int32_data 对齐、奇数个数截断、数据不足防越界,以及端到端解析含 INT4 Constant 的 ONNX 模型并校验 DT_INT4 类型与打包字节内容。

likedislike
atomgit-bot
atomgit-bot
4 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:cann-cla/yes
此处折叠了49条消息 查看更多
CANN-robotCANN-robot成员
4 天前 添加了label:lgtm
yangyongqiang
yangyongqiang成员
4 天前 评论:

/lgtm

likedislike
张德鹏成员
4 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:approved
CANN-robotCANN-robot成员
4 天前 合入了pull request