news 2025/12/24 12:18:52

Qwen3 + NPU 仿真实战 二. MAC 单元设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen3 + NPU 仿真实战 二. MAC 单元设计

Qwen3 + NPU 仿真实战

第二节:单个 MAC 单元设计(16×16 阵列,支持 INT8/BF16)


1. MAC 单元在 LLM 推理中的作用

Qwen3 推理的主要计算量来自矩阵乘法(MatMul/Linear),涵盖 QKV 投影、Attention Score 计算、MLP 等线性算子。NPX6 的 MAC 阵列用于加速这些乘累加运算。

1.1 Feature Map 与 Coefficient 在 LLM 中的对应

NPU 术语LLM 对应说明
Feature Map (FM)激活值输入 hidden states、Q/K/V 向量
Coefficient (CF)权重Wq、Wk、Wv、Wo、gate/up/down_proj

以 Qwen3 0.6B 的 Q 投影为例(hidden_size=1024):FM 形状为 [batch, seq_len, hidden_size],CF(Wq)形状为 [hidden_size, hidden_size],即 [batch, seq_len, 1024] × [1024, 1024]。


2. 16×16 MAC 阵列结构

2.1 阵列维度参数

参数含义
ISIZE16通道向量化维度
VSIZE8空间向量化维度
单元 MAC 数256ISIZE × ISIZE

BF16 浮点模式下,阵列内 256 路乘法并行产生乘积,并对每个输出通道的 16 个乘积求和,形成 16 个输出通道的部分和。

注意:阵列的物理维度由ISIZE决定,与mpy_cfg_t选择的 INT8/BF16/FP16 模式无关;不同数据格式复用同一 16×16 乘法阵列。

Slice 级吞吐差异:单个 Slice 在 INT8(i_8b8b_e)模式下每周期提供 4096 个 8b×8b MAC;在 BF16/FP16(f_bfloat16_e/f_fp16_e)模式下每周期等效 1024 个 16b×16b MAC,吞吐约为 INT8 的 1/4。
原因:INT8 模式下每个乘法单元每周期产生两路 8b×8b 乘积(even/odd),而 BF16/FP16 模式下只产生一路尾数乘积且 Feature Map 为双宽输入需要两周期供数,因此 Slice 级有效并行度为 1/4。


3. BF16 数据格式

3.1 BF16 格式定义

BF16: [sign:1][exponent:8][fraction:7] = 16 bits
字段位宽说明
sign1 bit符号位
exponent8 bits指数,与 FP32 相同
fraction7 bits尾数 (隐含前导 1)

3.2 BF16 优势

以下为 BF16 的通用特性(IEEE bfloat16 标准),用于解释本节为何选 BF16 浮点模式作为示例,不属于 RTL 直接定义的参数。

  • 8 位指数提供与 FP32 相同的动态范围
  • 相比 FP32,权重存储占用理论上减半

4. MAC 单元流水线

4.1 流水线阶段

阶段模块功能
Stage 0输入寄存级(lane 内)FM/CF 输入与控制信号寄存
Stage 1npu_conv_mpy_mul16×16 BF16 乘法与最大指数提取
Stage 2npu_conv_mpy_sum乘积按最大指数对齐并部分求和
Stage 3npu_conv_mpy_sn最终求和(生成 lo/hi 部分和)
Stage 4npu_conv_mpy_norm浮点归一化与舍入
Stage 5npu_conv_mpy_acc32 位累加器更新

4.2 BF16 乘法器设计

每个 BF16 乘法器包含:

  • 11×11 位尾数乘法器 (含隐含 1)
  • 8 位指数加法器
  • 符号异或逻辑

4.3 求和与归一化

浮点模式下:mul 阶段生成乘积并找最大指数(maxexp);sum 阶段按 maxexp 对齐并部分求和;sn 阶段做最终求和;norm 阶段归一化后送入累加器。


5. 配置模式

模式编码Feature MapCoefficient
f_bfloat16_e7’b0100000BF16BF16
f_fp16_e7’b1000000FP16FP16
i_8b8b_e7’b0000001INT8INT8

BF16 浮点模式下,阵列部分和进入 32 位累加器(acc_t/ixacc_t),由npu_conv_mpy_acc执行浮点累加实现跨周期累加。


6. 与 Qwen3 推理的映射

6.1 分块策略

以 Q 投影(hidden_size=1024,对应权重矩阵 1024 × 1024)为例:

  1. 每次加载 16 个输入通道到 FM 寄存器
  2. 每次加载 16×16 权重块到 CF 寄存器
  3. MAC 阵列并行计算 256 个乘积并形成 16 个部分和
  4. 沿 K 维分块累加 64 次(1024/16),得到该 16 个输出通道块的最终结果
  5. 沿输出通道维重复 64 个块,覆盖全部 1024 个输出通道

6.2 计算效率

单个 16×16 MAC 单元每周期并行产生 256 个 BF16 乘积,并输出 16 个部分和。


7. 总结

NPX6 的 16×16 MAC 单元承担 Qwen3 推理中 MatMul/Linear 的主要计算:

  • 阵列结构:16×16 BF16 乘法器,每周期并行产生 256 个乘积、输出 16 个部分和
  • 数据映射:FM 对应激活值,CF 对应权重
  • 流水线:5 级计算流水(mul/sum/sn/norm/acc),前端含输入寄存级
  • 精度:BF16 格式平衡精度与效率
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/15 17:08:23

vivo Celeborn PB级Shuffle优化处理实践

一、背景近年来,随着vivo大数据平台的数据量和任务量持续快速增长,新增的计算机资源已无法满足不断扩大的存储和计算需求。同时,我们观察到互联网和算法等在线业务在白天流量高峰,而在夜间流量显著下降,导致部分服务器…

作者头像 李华
网站建设 2025/12/15 17:07:21

33、拼写检查:从Unix原型到awk实现

拼写检查:从Unix原型到awk实现 1. 拼写检查概述 拼写检查是一个有趣且具有挑战性的问题,有超过300篇研究论文和书籍都围绕它展开。在处理文本时,拼写检查能帮助我们发现并纠正错误,提高文本质量。下面我们将从不同角度探讨拼写检查的实现方式。 2. 原始Unix拼写检查原型…

作者头像 李华
网站建设 2025/12/15 17:07:10

38、Shell 可移植性问题与扩展

Shell 可移植性问题与扩展 1. 概述 POSIX 定义的 shell 语言比原始的 V7 Bourne shell 大得多,但比 ksh93 和 bash 这两种最常用的 Bourne shell 扩展版本所实现的语言小得多。如果你要进行利用 shell 语言扩展的重型脚本编写,很可能会使用这两种 shell 中的一种或两种。因…

作者头像 李华
网站建设 2025/12/15 17:06:53

47、Unix系统文件管理与安全指南

Unix系统文件管理与安全指南 1. Unix文件所有权与隐私问题 在Unix系统中,文件权限对于控制文件和目录的读写执行访问至关重要。通过谨慎选择文件权限,用户可以控制谁能够访问自己的文件。 umask命令 :这是访问控制的重要工具,它限制了后续创建的所有文件的权限。通常,用…

作者头像 李华
网站建设 2025/12/15 17:06:41

AI驱动SEO变革:智能优化如何提升搜索可见性与本地流量

在当下的数字化潮流里,搜索引擎优化也就是SEO策略,正历经一场借助人工智能技术推动的深刻蜕变。以往那依赖人工经验的优化办法,由于其效率方面的瓶颈以及策略同质化这一问题,正渐渐被更具智能性、更成体系的AI搜索优化方案给替代。…

作者头像 李华
网站建设 2025/12/15 17:04:44

JAVA打造国际悬赏平台:高效匹配,全球接单

JAVA打造国际悬赏平台:高效匹配与全球接单的技术实现路径一、技术架构:高并发与多端协同的基石后端性能引擎采用 Spring Boot 2.7 MyBatis-Plus 组合,内嵌Tomcat支持每秒10,000并发请求,任务状态同步延迟低于200ms。通过 动态分库…

作者头像 李华