完全指南:Cast 规则、位打包与内存布局)
人工智能深度学习机器学习【免费下载链接】onnxOpen standard for machine learning interoperability项目地址https://gitcode.com/gh_mirrors/onn/onnx点击查看免费下载本篇技术指南围绕 ONNXOpen standard for machine learning interoperability在 docs/docsgen/source/technical/int2.md 中定义的 2-bit 整数类型展开系统讲解 INT2 / UINT2 的类型语义、与高精度类型互转的 Cast 规则、字节内 4 元素位打包/解包算法及存储大小计算。读者读完可获得一套可直接落地的位级实现方案并能结合 ONNX 仓库中的 proto 定义、Python 映射与 C 算子源码验证每一步细节适用于低比特 LLM 推理、端侧部署与自定义量化格式解析等场景。一、背景为什么需要 2-bit 整数类型随着大语言模型LLM在边缘设备上的部署需求增长权重量化weight quantization不断向更低比特演进。ONNX 在 TensorProto 中新增了 2-bit 整数类型用于承载超低比特量化权重。2-bit 类型具有以下两个关键特点存储极省相比 8-bit 整数2-bit 类型可将权重存储量压缩到原来的 1/4表示范围极小UNSIGNED 与 SIGNED 各只有 4 个可表示值必须通过专门的打包格式进行存储与传输。从 ONNX 仓库的 proto 定义onnx/onnx-ml.proto可以看到这两个类型的官方声明UINT2 25; // Unsigned integer in range [0, 3] INT2 26; // Signed integer in range [-2, 1], using twos complement representation即类型枚举值取值范围表示方式UINT225[0, 3]无符号二进制INT226[-2, 1]二进制补码twos complement关于低比特量化的实际动机文档引用了 T-MAC 论文T-MAC 是一种基于查找表lookup table, LUT的低比特 LLM即权重量化 LLMCPU 推理方法它直接支持无需反量化的 mpGEMMmixed-precision GEMM同时消除乘法运算并大幅减少加法运算。其核心思路是将传统以数据类型为中心的乘法转化为按位查表操作从而提供统一、可扩展的 mpGEMM 方案。2-bit 类型正是这类低比特部署方案所需的底层数据载体。二、类型体系中的位置与解析支持2-bit 类型并非孤立存在而是 ONNX 扩展数据类型sub-byte 类型家族的一员。仓库中与该类型相关的证据点包括类型字符串注册onnx/defs/data_type_utils.cc 中将字符串uint2/int2分别映射到TensorProto_DataType_UINT2/TensorProto_DataType_INT2说明 C 解析器可以直接按名称解析这两种类型Python 侧映射onnx/_mapping.py 使用ml_dtypes.uint2/ml_dtypes.int2作为对应的 NumPy dtype并指定与INT32相互转换的规则方便在 Python 生态中构造与检查 2-bit 张量BitCast 位宽校验onnx/defs/tensor/defs.cc 在 BitCast 算子的形状推断中将INT2与UINT2的位宽计为 2用于校验输入与输出类型位宽必须一致这一约束。这三点表明从 proto 定义到 C 内核、再到 Python 工具链2-bit 类型已经贯穿 ONNX 的完整技术栈而不仅仅是文档中的理论概念。三、Cast 转换规则精确与舍入文档明确规定了 2-bit 类型与高精度类型互转的语义这也是 Cast 算子在 2-bit 类型上的行为基准从 2-bit 转换到任意更高精度类型是精确的exact因为UINT20~3与INT2-2~1的全部取值都可以被更高精度类型无损表示不存在精度损失从高精度类型转换到 2-bit 是舍入 截断两步先按就近舍入到最近整数round-to-nearest-integer且平局时取偶数ties to even即银行家舍入再**截断truncating**到 2-bit 范围。以浮点值转换到INT2为例其语义可概括为trunc(round_even(x))最终结果必然落在 [-2, 1] 区间内超出范围的输入会被截断为边界值。在 ONNX 仓库的后端测试中onnx/backend/test/case/node/cast.py 定义了TWO_BIT_TYPES frozenset({UINT2, INT2})并覆盖了FLOAT → UINT2/INT2、FLOAT16 → UINT2/INT2、UINT2/INT2 → FLOAT/FLOAT16/UINT8/INT8等多组双向 Cast 用例见同文件 L67-L76与文档中向 2-bit 转换需舍入、从 2-bit 转换精确的规则一一对应。四、Packing 与 Unpacking4 元素共享一个字节这是本文档最具实操价值的部分。所有 2-bit 类型都以每字节存放 4 个 2-bit 值的方式存储元素从**最低有效位LSB向最高有效位MSB**依次排列。对于数组中的连续元素 x0, x1, x2, x34.1 打包Packingpack(x0, x1, x2, x3): (x0 0x03) | ((x1 0x03) 2) | ((x2 0x03) 4) | ((x3 0x03) 6)每个元素先与0x03相与取出低 2 位确保只保留有效位再按其在字节中的位置左移 0、2、4、6 位最后用按位或合并为一个字节。4.2 解包Unpackingx0 z 0x03 x1 (z 2) 0x03 x2 (z 4) 0x03 x3 (z 6) 0x03解包是打包的逆过程依次右移 0、2、4、6 位后与0x03相与即可还原出每个 2-bit 元素。由于每个元素只占 2 位移位 掩码的组合操作在任意主流架构上都是常量时间非常适合在 CPU/嵌入式平台上做批量解码。4.3 零填充Zero-padding与存储大小两个工程上极易踩坑的细节元素个数不能被 4 整除时在最终字节的高位剩余部分补零zero-padding。例如 N5 时第 2 个字节只使用低 2 位其余 6 位全部为 0存储大小公式大小为 N 的 2-bit 张量其存储字节数为ceil(N / 4)字节。元素个数 N打包后字节数说明1 ~ 41最后一个字节高位补零5 ~ 82第二字节仅低 2~8 位有效N一般情形ceil(N/4)向上取整这一布局与 int4 类型每字节 2 个元素的设计思路一致均遵循LSB 优先、尾部补零的统一约定便于推理引擎在解析时用同一套位操作代码处理不同位宽。五、使用建议与注意事项仅用于权重/常量的紧凑存储由于表示范围极小且运算需查表或反量化2-bit 类型更适合作为量化权重的存储格式而非常规计算中间张量的类型转换语义与后端对齐任何实现 Cast 到 2-bit 的后端都应遵循就近偶数舍入 截断的规则避免与 ONNX 语义及 cast.py 中的参考用例产生偏差位序约定不可随意更改LSB 优先 尾部零填充是 ONNX 规定的线格式wire format跨语言、跨设备解析时必须严格按此约定实现 pack/unpack结合 BitCast 使用如需在等位宽的 sub-byte 类型间复用位模式例如 INT2 与其它 2-bit 宽度类型互转可借助 BitCast 算子其位宽一致性校验逻辑见 onnx/defs/tensor/defs.cc。六、小结ONNX 的 2-bit 整数类型通过三件事完成了超低比特的工程化闭环proto 层定义取值区间UINT2/INT2onnx/onnx-ml.proto、Cast 语义层规定精确/舍入转换规则、存储层规定ceil(N/4)字节的 LSB 优先打包布局。配合_mapping.py的ml_dtypes映射与data_type_utils.cc的类型字符串注册开发者可以在解析、校验、推理多个环节直接复用 ONNX 的既有实现为 T-MAC 这类基于查找表的低比特 LLM 部署方案提供标准化的数据格式支撑。赞分享人工智能深度学习机器学习【免费下载链接】onnxOpen standard for machine learning interoperability项目地址https://gitcode.com/gh_mirrors/onn/onnx点击查看免费下载相关推荐ONNX 低比特数值类型与 In-place KV Cache 技术解析Float8/Float6/Float4、Int4/Int2 的位布局与转换规则ONNX 低比特数值类型与 In place KV Cache 技术解析Float8/Float6/Float4、Int4/Int2 的位布局与转换规则 导读人工智能深度学习机器学习Slang 类型系统完全指南类型说明符、类型别名、内存布局与未知大小规则Slang 类型系统完全指南类型说明符、类型别名、内存布局与未知大小规则 本篇以 Slang 语言参考手册的 Types 章节 https://link.gi编译器图形学编程语言ONNX 6 位浮点格式详解FLOAT6E2M3 与 FLOAT6E3M2 的位布局、Cast 语义与打包实现ONNX 6 位浮点格式详解FLOAT6E2M3 与 FLOAT6E3M2 的位布局、Cast 语义与打包实现 本指南围绕 ONNX 在 onnx1.23人工智能深度学习机器学习上一篇物理信息神经网络PINNs终极指南深度学习如何革新科学计算下一篇Unstract性能压测报告100并发用户下的系统瓶颈分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考