本文聚焦 aclnnGroupedMatmulV4 在 A5/DAV_3510 上的 MXFP8 主路径:
x/weight=FLOAT8_E4M3FNscale/perTokenScale=FLOAT8_E8M0、weight 为 ND,
transA=falsetransB=false。其他 format、转置方式和量化模式只在必要时用于对比。

阅读全文 »

1. 文档范围

本文面向以下场景:

  • 算子:GroupedMatmul
  • 对外接口:aclnnGroupedMatmulV4
  • 芯片架构:A5,在代码中对应 NpuArch::DAV_3510arch35
  • 输入类型:xweight 均为 FLOAT8_E4M3FN
  • 重点量化模式:MXFP8,即 scale/perTokenScale 使用 FLOAT8_E8M0
阅读全文 »

RAG幻觉检测的发展

RAG可以基于外部知识源进行回答,增强了知识密集型问题的可靠性

→ 但仍然受到忠实性错误的影响 → 所以需要幻觉检测和缓解方法

→ 人们开始探索微调检测器,但是需要大量高质量数据进行训练

→ 后来使用LLM进行基于prompt的幻觉检测,但成本高、prompt敏感,而且无法反映决策过程

→ 最近的研究开始转向利用LLM内部表示进行幻觉检测

阅读全文 »

1. 背景

在 Ascend 950 (A5) 芯片上,部分 profiling 工具展示的指令级 cycle 数据可能来自静态查表,适合观察指令组成,但无法完整反映实际运行时的 pipeline stall、同步等待、访存延迟以及跨核通信开销。

为了测量代码在硬件上的实际执行周期,可以使用:

  • GetSystemCycle() 读取硬件 cycle;
  • PipeBarrier<PIPE_ALL>() 排空相关流水线;
  • printf 输出开始时间、结束时间和持续周期。

该方法适合定位某段代码的真实耗时,以及不同执行阶段之间的等待和流水间隙。

阅读全文 »

1. 概述

AscendC::DumpTensor 用于在 AscendC Kernel 中导出输入、中间结果或输出 Tensor。配合 compare_dumps.py,可以比较基准版本(golden)和待测版本(test)的日志,逐步定位数值差异最早出现的位置。

推荐使用两个 Git worktree 同时维护两个待比较版本。每个 worktree 拥有独立的源码、构建产物和运行环境,不需要反复切换分支,也能避免两个版本互相覆盖。

阅读全文 »

FP8和FP16浮点数的构成

浮点数的构成分为三部分:1bit符号位S、若干bit指数位E、若干bit尾数位M。

FP16内部是e5m10的结构。BSA算子在A5芯片上采用的是 fp8e4m3fn 精度。

此外还有 fp8e8m0 精度,只能表示正二的次幂,常用于 scale factor

阅读全文 »

CrossCoreSetFlag & CrossCoreWaitFlag

用于支撑核间的同步控制。

1
2
template <uint8_t modeId, pipe_t pipe>
__aicore__ inline void CrossCoreSetFlag(uint16_t flagId)

与SetFlag & WaitFlag 类似,pipe用于指定数据流之间的依赖,flagId表示事件类型;此外还新增了modeId用于指定模式。

阅读全文 »

指令流水分类

Ascend的指令流水类型分为以下几种:

  • PIPE_S:scalar流水(如Tensor.GetValue)
  • PIPE_V:vec计算
  • PIPE_M:cube计算
  • PIPE_MTE1:LM Tensor内部搬运(L1->L0A等)
  • PIPE_MTE2:GM到LM的搬运(GM->L1等)
  • PIPE_MTE3:LM到GM的搬运
  • PIPE_FIX:FixPipe,从L0C向外的搬运
阅读全文 »

开发模型:Host-Device

编程模型:

  • SIMD:单指令多数据(matmul等)
  • SIMT:单指令多线程(复杂分支控制等,仅A5支持)

存储单元:

  • AI Core内部存储:LocalTensor
  • 外部存储:GlobalTensor
阅读全文 »
0%