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

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 格式平衡精度与效率
http://www.cnnetsun.cn/news/66187.html

相关文章:

  • 消息队列真仙:我的道念支持最终一致性
  • Spring Boot项目推送Gitee全流程(进阶)
  • Java毕设项目:基于Springboot大学校园自习室教室座位预约网站设计与实现基于springboot高校自习室预约系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • JAVA打造同城羽馆预约,一键畅享运动
  • 经验贴 | 科学制定招聘需求与预算:HR 必看的逻辑与实操要点
  • 经验贴 | AI 面试评估系统怎么用?HR 高效识人实操指南
  • 构建个性化AI助手:LobeChat会话管理功能深度使用技巧
  • 基于昇腾NPU的YOLOV8-seg c++部署
  • 26、深入探索脚本编程与系统安全基础
  • XSS漏洞有哪几种?DOM型XSS和反射型有什么区别?SQL注入原理又是什么?网安面试题常见问题一文详解
  • 压力扫描阀:并行校准技术,解锁多点压力测量新高度
  • PyTorch框架下运行Qwen3-32B的内存优化策略
  • 为什么说Qwen3-8B是学术研究的理想选择?实测报告出炉
  • java基础-PriorityQueue(优先队列)
  • Qwen3-14B模型量化压缩技术:降低GPU内存占用
  • 18、日期和时间的格式化、解析及时间区域的使用
  • VisionPro CogIPOneImageTool1 工具超详细解释(含内部功能全解析)
  • VisionPro CogIDTool 工具超深度详解(技术细节 + 实战配置版)
  • 让 BI 拥有‘领域大脑’:智能 BI 如何实现 AI 级精准数据查询
  • 提示工程架构师的战略规划:提示系统生命周期管理
  • 条形码识别与定位:基于FCOS框架的多类型条码检测与识别技术详解
  • AutoGPT能否用于学术文献综述?研究辅助工具测评
  • 如何用AutoGPT实现任务全自动执行?深度解析开源大模型能力
  • Mapbox GL JS 核心表达式:`in` 包含判断完全教程
  • Web3双核引擎:当AI量化金融大脑,遇见DAO社交生态灵魂
  • CEX开发困局:当达普韦伯为交易所注入“数字灵魂”
  • AutoGPT镜像集成指南:如何嵌入现有业务系统?
  • AutoGPT项目活跃度分析:GitHub星标增长趋势
  • AutoGPT能否生成短视频脚本?内容创作新方式
  • 超越ChatGPT!教你开发能自主完成复杂任务的AI智能体,代码开源