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 拥有独立的源码、构建产物和运行环境,不需要反复切换分支,也能避免两个版本互相覆盖。

阅读全文 »

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
阅读全文 »

要解决的问题:RAG模型有时在检索到正确且相关的知识时,依然会产生错误回答

→ 分析:内部知识与外部知识的冲突,FFN强调内部知识,而copying head强调外部知识

→ 贡献:提出了redeep,可以解耦内外部知识来进行幻觉检测;以及AARF,通过调节内外部知识的贡献来进行幻觉缓解。

阅读全文 »

QRHead是对retrieval head的改进。

动机

先前的retrieval head解释了LLM的检索机制,但仍存在两个问题:

  1. copy-paste目标过于简单,鲁棒性不足

  2. 采用的大海捞针任务是合成数据,与真实语言场景下数据分布不一致

阅读全文 »

检索头较早的一篇文章。发现了检索头的一些性质:

  • 普遍性:所有模型都有检索头

  • 稀疏性

  • 固有性:不随continual pretrain而改变

  • 动态激活:一部分检索头始终激活,另一部分随机激活

  • 因果性:敲除会导致无法检索上下文信息,但对于只需要内部知识的场景影响较小。

0%