ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CANN ops-math 单算子 API 数据类型体系:aclDataType 全量取值与简写规范详解

CANN ops-math 单算子 API 数据类型体系:aclDataType 全量取值与简写规范详解 CANN ops-math 单算子 API 数据类型体系aclDataType 全量取值与简写规范详解【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math本文基于 CANN ops-math 仓库官方文档 数据类型说明系统梳理通过aclCreateTensor接口创建 aclTensor 时支持的全量数据类型以及两段式接口如 aclnnCast、aclnnAdd 等参数说明中使用的数据类型简写规范。读完本文你将能够准确使用ACL_FLOAT16、ACL_BF16、ACL_FLOAT8_E4M3FN等类型枚举创建张量并看懂仓库内各算子 API 头文件中对输入/输出类型约束的简写描述。数据类型的出现位置aclCreateTensor 与两段式接口在 ops-math 仓库的单算子aclnnAPI 调用链中数据类型贯穿始终张量创建阶段开发者调用aclCreateTensor接口创建 aclTensor 时需要传入aclDataType指定张量数据类型。仓库 基础数据结构文档 指出aclTensor 等基础数据结构可通过 opbase 库中的公共接口创建开发者无需关注其内部实现直接使用即可。算子执行阶段调用两段式接口第一段aclxxXxxGetWorkspaceSize 第二段aclxxXxx时两段式接口文档 说明了 workspace 申请与 executor 的传递流程而各段接口的参数注释里则以简写形式描述 aclTensor 支持的数据类型。因此理解aclDataType的全量取值及其简写是使用 ops-math 单算子 API 的前置知识。全量数据类型简写表原文档表 1 完整继承数据类型文档 明确说明通过aclCreateTensor接口创建 aclTensor 时支持的全量数据类型可参见 CANN 官方 acl APIC文档中数据类型及其操作接口 aclDataType部分。为了在两段式接口参数说明中方便描述仓库采用如下简写形式不区分大小写表 1 数据类型简写表原始数据类型简写形式不区分大小写ACL_FLOATFLOAT 或 FLOAT32ACL_FLOAT16FLOAT16ACL_INT8INT8ACL_INT32INT32ACL_UINT8UINT8ACL_INT16INT16ACL_UINT16UINT16ACL_UINT32UINT32ACL_INT64INT64ACL_UINT64UINT64ACL_DOUBLEDOUBLE 或 FLOAT64ACL_BOOLBOOLACL_STRINGSTRINGACL_COMPLEX64COMPLEX64ACL_COMPLEX128COMPLEX128ACL_BF16BF16 或 BFLOAT16ACL_INT4INT4ACL_UINT1UINT1ACL_COMPLEX32COMPLEX32ACL_HIFLOAT8HIFLOAT8ACL_FLOAT8_E5M2FLOAT8_E5M2ACL_FLOAT8_E4M3FNFLOAT8_E4M3FNACL_FLOAT8_E8M0FLOAT8_E8M0ACL_FLOAT6_E3M2FLOAT6_E3M2ACL_FLOAT6_E2M3FLOAT6_E2M3ACL_FLOAT4_E2M1FLOAT4_E2M1ACL_FLOAT4_E1M2FLOAT4_E1M2从表中可以看出三个值得注意的点多别名规则部分类型存在两个等价的简写形式例如ACL_FLOAT既可写作 FLOAT 也可写作 FLOAT32ACL_DOUBLE既可写作 DOUBLE 也可写作 FLOAT64ACL_BF16既可写作 BF16 也可写作 BFLOAT16。阅读算子参数说明时两种写法指向同一枚举值。低比特量化类型简写表覆盖了 HIFLOAT8、FLOAT8E5M2/E4M3FN/E8M0、FLOAT6E3M2/E2M3、FLOAT4E2M1/E1M2等低精度类型体现了该数据类型体系对量化推理场景的覆盖。复数与稀疏相关类型COMPLEX32/64/128 复数类型、INT4、UINT1 等也被纳入支持范围。简写规范在算子 API 头文件中的实际应用简写规范并非纸面约定而是被仓库内各算子 API 头文件的 Doxygen 注释直接采用。以 aclnn_cast.h 为例Cast 算子第一段接口的注释中/** * brief aclnnCast的第一段接口根据具体的计算流程计算workspace大小。 * ... * param [in] self: npu device侧的aclTensor数据类型支持FLOAT16、FLOAT、DOUBLE、INT8、UINT8、INT16、 * UINT16、INT32、UINT32、INT64、UINT64、BOOL、COMPLEX32、COMPLEX64、COMPLEX128、BFLOAT16、HIFLOAT8、 * FLOAT8_E5M2、FLOAT8_E4M3FN、FLOAT4_E2M1、FLOAT4_E1M2。支持非连续的Tensor数据格式支持ND。 * param [in] dtype: host侧的aclDataType输入tensor要转换的目标dtype。 * ... */ ACLNN_API aclnnStatus aclnnCastGetWorkspaceSize( const aclTensor* self, const aclDataType dtype, aclTensor* out, uint64_t* workspaceSize, aclOpExecutor** executor);可以看到参数self的类型说明使用的是简写形式FLOAT16、BFLOAT16 等而dtype参数则直接使用aclDataType枚举类型。这正印证了原文档的定位——简写只用于参数说明代码中传参仍以aclDataType枚举为准。代码中的数据类型传参以仓库示例为准仓库的算子调用示例展示了真实的传参方式与简写表形成呼应Add 算子示例 中通过CreateAclTensor(..., aclDataType::ACL_FLOAT, selfX)以ACL_FLOAT枚举创建输入/输出张量Add 算子 PyTorch 算子示例 中则使用aclDataType::ACL_FLOAT16创建张量并在aclCreateTensor中同时传入 shape、data type、strides 与aclFormat::ACL_FORMAT_ND数据格式。由此可以看出标准调用模式先按表 1 选定原始数据类型枚举如ACL_FLOAT16再通过aclCreateTensor创建 device 侧张量最后将其传入两段式接口。延伸阅读与数据类型相关的上下文文档本仓库 docs/zh/context/ 目录下还有一组与数据类型密切相关的上下文文档建议配合阅读两段式接口说明 workspace 申请流程以及第二段接口不能重复调用等关键约束数据结构aclTensor、aclScalar、aclIntArray 等基础结构的定义与创建方式转换关系 与 推导关系说明多数据类型算子的输入输出类型转换与推导规则是理解某个算子支持哪些类型组合的重要依据数据格式与数据类型配合描述张量的 ND/NDHWC 等布局。小结本文以 docs/zh/context/data_type.md 为主体完整继承了其 27 项数据类型简写表并结合仓库源码补充了三点实战细节简写仅用于接口参数说明见 aclnn_cast.h 注释、代码传参使用aclDataType枚举见 Add 示例、多别名类型FLOAT/FLOAT32、DOUBLE/FLOAT64、BF16/BFLOAT16在文档中等价互换。掌握这套规范后即可在 ops-math 中正确创建任意精度张量并读懂全部单算子 API 的类型约束说明。【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表