当前位置: 首页 > article >正文

CANN/catlass精度分析基础

精度分析基础【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass写在前面该文档主要说明CATLASS样例开发中精度分析的基础知识包括样例精度的含义、精度比对方式以及如何调用CATLASS已有的Golden函数计算标杆结果并进行精度比对。1. 样例精度的含义在CATLASS算子开发中样例精度指的是NPU上算子实际计算结果与CPU上标杆Golden计算结果之间的一致性程度。精度是衡量算子正确性的核心指标只有精度达标的算子才能用于实际业务场景。精度分析的基本流程为在CPU侧使用相同输入数据以高精度如float甚至double计算理论正确结果称为标杆Golden将NPU侧算子的实际输出与标杆进行比对根据数据类型和计算规模判断误差是否在允许范围内。2. 精度比对方式CATLASS针对不同数据类型采用不同的精度比对策略。2.1 浮点类型相对误差校验对于halffp16、floatfp32、bfloat16等浮点类型由于NPU硬件计算与CPU计算在舍入方式、累加顺序等方面存在差异允许一定的相对误差。比对公式为$$ |actual - expected| \le rtol \times \max(1.0, |expected|) $$其中rtol相对误差容忍度根据计算次数computeNum动态调整计算次数rtol说明 20481/256计算量较小误差累积少容忍度更严格≥ 20481/128计算量较大误差累积多容忍度适当放宽对于bfloat16类型由于尾数位更少、精度更低容忍度进一步放宽计算次数rtol 20481/128≥ 20481/642.2 浮点标杆的升精度计算浮点类型的标杆计算必须采用升精度策略这是保证精度分析可靠性的关键。具体来说即使算子输入/输出为half或bfloat16等低精度类型标杆计算也应使用float甚至double作为累加器类型在ComputeMatmul等Golden函数中每次乘加操作都会将操作数static_castElementGolden通常为float后再计算避免CPU侧因低精度累加引入额外误差标杆结果存储为float类型与NPU输出可能为half比对时NPU输出会先转换为float再参与误差计算。以basic_matmul.cpp为例输入A、B和输出C均为halffp16类型但标杆Golden使用float计算// 输入输出均为 half 类型 std::vectorfp16_t hostA(lenA); std::vectorfp16_t hostB(lenB); std::vectorfp16_t hostC(lenC); // 标杆使用 float 类型进行升精度计算 std::vectorfloat hostGolden(lenC); golden::ComputeMatmul(options.problemShape, hostA, layoutA, hostB, layoutB, hostGolden, layoutC);2.3 整数类型二进制一致性校验对于int32_t等整数类型由于整数运算不存在舍入误差要求NPU输出与标杆完全一致二进制一致。比对时直接检查差值是否为0// int32_t 特化版本要求完全一致 template std::vectoruint64_t CompareData(const std::vectorint32_t result, const std::vectorint32_t expect, uint32_t computeNum) { std::vectoruint64_t errorIndices; for (uint64_t i 0; i result.size(); i) { if (std::abs(static_castint32_t(result[i]) - expect[i]) ! 0) { errorIndices.push_back(i); } } return errorIndices; }2.4 误差指标说明CATLASS还提供了更精细的误差指标ErrorMetrics用于评估NPU输出相对于同精度CPU计算结果的误差比率指标全称含义MAREMax Absolute Relative Error最大绝对相对误差比率NPU / CPUMEREMean Absolute Relative Error平均绝对相对误差比率NPU / CPURMSERoot Mean Squared Error均方根误差比率NPU / CPU这些指标将NPU输出和同精度CPU输出分别与高精度Golden比对计算两者的误差比率。若比率在阈值范围内默认MARE ≤ 5、MERE ≤ 1.5、RMSE ≤ 1.5则认为精度合格。这用于判断NPU计算精度是否与同精度CPU计算处于同一水平。3. CATLASS Golden函数调用CATLASS在examples/common/golden.hpp中提供了统一的Golden函数入口该头文件聚合了以下模块头文件功能golden/fill_data.hpp随机数据生成golden/matmul.hpp矩阵乘标杆计算golden/compare_data.hpp精度比对golden/conv2d.hpp卷积标杆计算使用时只需包含golden.hpp即可#include golden.hpp所有Golden函数位于Catlass::golden命名空间下。3.1 生成随机测试数据FillRandomDataFillRandomData用于生成指定范围内的随机数据支持多种数据类型template class Element, class ElementRandom void FillRandomData(std::vectorElement data, ElementRandom low, ElementRandom high);Element目标数据类型如half、float、int8_t等low/high随机值的上下界使用示例std::vectorfp16_t hostA(lenA); std::vectorfp16_t hostB(lenB); golden::FillRandomDatafp16_t(hostA, -5.0f, 5.0f); // 生成 [-5.0, 5.0] 范围内的随机 half 数据 golden::FillRandomDatafp16_t(hostB, -5.0f, 5.0f);对于int8_t类型有特化实现使用整数随机生成避免浮点转换损失std::vectorint8_t hostA(lenA); golden::FillRandomDataint8_t, int(hostA, -128, 127); // int8_t 使用整数范围3.2 计算标杆结果ComputeMatmulComputeMatmul在CPU侧以升精度方式计算矩阵乘法的理论正确结果templateclass ElementA, class LayoutA, class ElementB, class LayoutB, class ElementGolden, class LayoutGolden void ComputeMatmul( const GemmCoord problemShape, const std::vectorElementA dataA, const LayoutA layoutA, const std::vectorElementB dataB, const LayoutB layoutB, std::vectorElementGolden dataGolden, const LayoutGolden layoutGolden);关键设计模板参数ElementGolden独立于输入类型ElementA/ElementB允许标杆使用更高精度类型。内部累加器类型为ElementGolden每次乘加都通过static_castElementGolden升精度后再计算accumulator static_castElementGolden(dataA[offsetA]) * static_castElementGolden(dataB[offsetB]);使用示例// 输入为 half标杆输出为 float升精度 std::vectorfloat hostGolden(lenC); golden::ComputeMatmul(options.problemShape, hostA, layoutA, hostB, layoutB, hostGolden, layoutC);除ComputeMatmul外Golden模块还提供了其他矩阵运算的标杆函数函数用途ComputeGemm通用矩阵乘含alpha/beta缩放和C矩阵累加ComputeGemv矩阵-向量乘ComputeBatchedMatmul批量矩阵乘ComputeGroupedMatmul分组矩阵乘ComputeGroupGemm分组通用矩阵乘ComputeMatmulElemWiseAdd矩阵乘后Element-Wise加上述标杆函数若不满足业务场景需要开发者也可自行增加新的标杆函数。3.3 精度比对CompareDataCompareData将NPU实际输出与标杆结果进行比对返回错误元素的索引列表templateclass ElementResult, class ElementCompare std::vectoruint64_t CompareData( const std::vectorElementResult result, const std::vectorElementCompare expect, uint32_t computeNum);resultNPU算子实际输出expectCPU标杆计算结果computeNum计算次数通常为K维大小用于动态选择误差阈值返回值错误元素的索引列表为空表示精度通过使用示例std::vectoruint64_t errorIndices golden::CompareData(hostC, hostGolden, k); if (errorIndices.empty()) { std::cout Compare success. std::endl; } else { std::cerr Compare failed. Error count: errorIndices.size() std::endl; }3.4 完整示例以下摘自examples/00_basic_matmul/basic_matmul.cpp展示了一个完整的精度分析流程#include golden.hpp // 1. 生成随机输入数据half 类型 std::vectorfp16_t hostA(lenA); std::vectorfp16_t hostB(lenB); golden::FillRandomDatafp16_t(hostA, -5.0f, 5.0f); golden::FillRandomDatafp16_t(hostB, -5.0f, 5.0f); // 2. 将输入数据拷贝到Device执行NPU算子... // 省略Device侧内存分配、数据拷贝、算子执行等代码 // 3. 将NPU输出拷贝回Host std::vectorfp16_t hostC(lenC); ACL_CHECK(aclrtMemcpy(hostC.data(), sizeC, deviceC, sizeC, ACL_MEMCPY_DEVICE_TO_HOST)); // 4. 计算CPU标杆float 升精度 std::vectorfloat hostGolden(lenC); golden::ComputeMatmul(options.problemShape, hostA, layoutA, hostB, layoutB, hostGolden, layoutC); // 5. 精度比对 std::vectoruint64_t errorIndices golden::CompareData(hostC, hostGolden, k); if (errorIndices.empty()) { std::cout Compare success. std::endl; } else { std::cerr Compare failed. Error count: errorIndices.size() std::endl; }4. 总结CATLASS的精度分析遵循升精度计算标杆 分类型比对的核心原则数据类型标杆计算比对方式误差容忍浮点half/float/bfloat16升精度float/double累加相对误差计算次数 20481/256≥ 20481/128整数int32_t等同精度二进制一致差值必须为0开发者只需包含golden.hpp头文件调用FillRandomData生成测试数据、ComputeMatmul或其他标杆函数计算标杆、CompareData进行比对即可快速完成算子精度验证。【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/catlass精度分析基础

精度分析基础 【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 项目地址: https://gitcode.com/cann/catlass 写在前面 该文档主要说明CATLASS样例开发中精度分析的基础知识,包括样例精度…...

一套代码适配四种屏幕——StyleConfiguration 键盘多设备适配方案

文章目录问题在哪?StyleConfiguration 的设计思路KeyStyle 接口定义StyleConfiguration.getInputStyle 完整逻辑资源文件命名规范组件如何使用 StyleConfiguration屏幕旋转适配完整流程这种设计模式的通用价值踩坑记录写在最后搞输入法开发最头疼的事情之一就是屏幕…...

深入理解ops-tensor架构:模块化算子库的设计哲学与实现

深入理解ops-tensor架构:模块化算子库的设计哲学与实现 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算…...

CANN/cann-learning-hub:Swan LLM 大模型实战课程

【免费下载链接】cann-learning-hub CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub SwanLab x CANN 社区合作课程 Swa…...

aFileChooser架构设计分析:Fragment、Loader和Intent的最佳实践

aFileChooser架构设计分析:Fragment、Loader和Intent的最佳实践 【免费下载链接】aFileChooser [DEPRECATED] Android library that provides a file explorer to let users select files on external storage. 项目地址: https://gitcode.com/gh_mirrors/af/aFil…...

Kubernetes 监控与可观测性深度解析:Prometheus + Grafana + Loki

Kubernetes 监控与可观测性深度解析:Prometheus Grafana Loki 引言 在云原生环境中,监控与可观测性是保障系统稳定运行的关键。Kubernetes 生态提供了丰富的监控工具,其中 Prometheus、Grafana 和 Loki 组成了完整的可观测性栈。本文将深…...

CANN/hcomm集群信息初始化API

HcclCommInitClusterInfo 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT&#xff1…...

大模型应用开发指南:从入门到实践,收藏这份从Demo到生产落地的完整攻略

本文分享了AI应用开发中从Demo到生产落地的完整实践,涵盖技术选型、架构设计、核心算法优化及部署经验。通过LangGraph、RAGFlow和Langfuse等工具,解决上下文超限、Prompt管理混乱等问题,最终实现准确率提升25%的工业级AI系统。适合程序员和小…...

Kafka-UI:3分钟快速上手,轻松管理你的Apache Kafka集群

Kafka-UI:3分钟快速上手,轻松管理你的Apache Kafka集群 【免费下载链接】kafka-ui Open-Source Web UI for managing Apache Kafka clusters 项目地址: https://gitcode.com/gh_mirrors/kaf/kafka-ui 你是否曾经为管理Apache Kafka集群而头疼&…...

Kilim Actor模型实践:构建高并发消息传递系统的终极指南 [特殊字符]

Kilim Actor模型实践:构建高并发消息传递系统的终极指南 🚀 【免费下载链接】kilim Lightweight threads for Java, with message passing, nio, http and scheduling support. 项目地址: https://gitcode.com/gh_mirrors/ki/kilim Kilim是一个强…...

C++二叉树构建、深拷贝与可视化输出实战解析

1. 项目概述:从零构建与复制二叉树在C的日常开发中,尤其是涉及到算法、数据结构或者需要处理层次化数据的场景,二叉树是一个绕不开的基础结构。最近我在重构一个旧的项目模块,其中核心需求就是需要动态生成一个数据结构&#xff0…...

HC32F4A0外设引脚自由配置全攻略:如何像STM32重映射一样灵活规划你的原理图?

HC32F4A0外设引脚自由配置全攻略:如何像STM32重映射一样灵活规划你的原理图? 在嵌入式硬件设计中,引脚规划往往是决定项目成败的关键第一步。传统MCU如STM32通过固定功能引脚和有限的重映射功能,给工程师带来诸多限制。而华大半导…...

Purple Pi OH开发板Android 11系统ROOT权限获取与Magisk实战指南

1. 项目概述:为什么我们需要对Purple Pi OH进行ROOT?拿到一块Purple Pi OH开发板,刷上Android 11系统,对于开发者或极客玩家来说,最常遇到的第一个“痒点”可能就是权限不足。系统默认运行在“用户模式”下&#xff0c…...

从飞思卡尔智能车竞赛视频拆解嵌入式系统设计:感知、控制与工程实践

1. 项目概述:从一场竞赛视频看智能车设计的核心逻辑最近在整理资料时,翻到了当年飞思卡尔智能车竞赛(现为全国大学生智能汽车竞赛)中湖南大学参赛队伍的一些视频资料。这些视频,无论是官方发布的比赛实录,还…...

Windows上运行安卓应用:APK安装器完整指南

Windows上运行安卓应用:APK安装器完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用,却不想安装笨重的…...

5分钟快速上手SignTools:自托管iOS应用签名平台完整教程

5分钟快速上手SignTools:自托管iOS应用签名平台完整教程 【免费下载链接】SignTools ✒ A free, self-hosted platform to sideload iOS apps without a computer 项目地址: https://gitcode.com/gh_mirrors/si/SignTools 想要在iOS设备上自由安装第三方应用…...

开发智能客服系统时利用 Taotoken 实现模型降级与容灾路由的策略

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 开发智能客服系统时利用 Taotoken 实现模型降级与容灾路由的策略 在构建面向真实用户的智能客服系统时,服务的连续性与…...

CodeGPT高级代理系统:10个实用工具助你高效编程的完整指南

CodeGPT高级代理系统:10个实用工具助你高效编程的完整指南 【免费下载链接】CodeGPT The leading open-source AI copilot for JetBrains. Connect to any model in any environment, and customize your coding experience in any way you like. 项目地址: https…...

一键切换语境+保留术语一致性+上下文感知翻译,Perplexity翻译查询功能的3大颠覆性能力,现在不用就落后了

更多请点击: https://codechina.net 第一章:Perplexity翻译查询功能的全景概览 Perplexity 的翻译查询功能并非传统意义上的“文本翻译器”,而是一种融合语义理解、上下文感知与多语言知识检索的智能问答增强机制。它允许用户以任意自然语言…...

从防御者视角看Fastjson 1.2.24漏洞:如何用Docker+vulhub快速搭建靶场并验证修复方案

防御视角下的Fastjson 1.2.24漏洞实战:Docker靶场搭建与修复方案验证 在当今的软件开发中,JSON处理库的安全性问题日益凸显。作为Java生态中最流行的JSON库之一,Fastjson因其高性能而广受欢迎,但同时也因其历史漏洞频发而备受关注…...

CANN/asnumpy-docs 架构设计

Architecture 【免费下载链接】asnumpy-docs 项目地址: https://gitcode.com/cann/asnumpy-docs This document describes the internal architecture of AsNumpy, including the three-layer design, the core NPUArray data structure, the API module layout, and t…...

ArcGIS Pro 3.x 批量处理遥感栅格:用Python脚本实现自动化转点、计算与导出(附完整代码)

ArcGIS Pro 3.x 遥感栅格自动化处理实战:从数据清洗到生产级流水线构建 遥感数据分析师常常需要处理TB级的时序栅格数据,比如月度NDVI指数、地表温度或降水分布。传统手动操作不仅效率低下,还容易因人为失误导致数据不一致。本文将分享如何基…...

Onyx Core API完全手册:RESTful接口详解与实战案例

Onyx Core API完全手册:RESTful接口详解与实战案例 【免费下载链接】Onyx Onyx 项目地址: https://gitcode.com/gh_mirrors/ony/Onyx Onyx Core是一个强大的企业级区块链平台,提供完整的RESTful API接口,让开发者能够轻松构建和管理区…...

昇腾C解交织API文档

DeInterleave 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...

Windows缩略图加载太慢?这款智能预加载工具让文件浏览快如闪电

Windows缩略图加载太慢?这款智能预加载工具让文件浏览快如闪电 【免费下载链接】WinThumbsPreloader-V2 WinThumbsPreloader is a powerful open source tool for quickly preloading thumbnails in Windows Explorer. 项目地址: https://gitcode.com/gh_mirrors/…...

ncmdump终极指南:5分钟解锁网易云音乐NCM加密文件

ncmdump终极指南:5分钟解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲,却发现只能在特定客户端播放?当你想在车载音响、智能音箱…...

靠谱的远程手机控制软件 远程控制手机推荐用无界趣连2.0

靠谱的远程手机控制软件,能帮我们打破设备空间限制,日常办公、远程协助或游戏串流都能高效搞定。在众多远程手机控制软件里,无界趣连2.0凭借扎实的性能与无套路的体验,成为不少用户的首选,不管是新手还是老手&#xff…...

电力系统时序一致性保障:elec-ops-prediction的长时序稳定性约束实现

电力系统时序一致性保障:elec-ops-prediction的长时序稳定性约束实现 【免费下载链接】elec-ops-prediction elec-ops-prediction 是 CANN 社区 Electrical Engineering SIG(电力行业兴趣小组)旗下的电力负荷预测算子库, 聚焦于电…...

3分钟彻底解决Cursor试用限制:设备标识重置技术深度解析

3分钟彻底解决Cursor试用限制:设备标识重置技术深度解析 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial request limit…...

wlnmp一键安装包260520更新:多软件版本升级,支持多系统架构快速部署

wlnmp一键安装包更新:多软件版本升级wlnmp一键安装包在260520迎来更新,此次更新涉及多个重要软件的版本升级,包括nginx1.30.1、php8.2.31、php8.3.31等多个php版本,以及MySQL8.0.46、MySQL8.4.9。这些软件版本的更新,为…...