npu硬件实现cnn标准卷积计算细节

npu硬件实现cnn标准卷积计算细节

input image 细节

  • 示例输出Image为计算中间过程的输入图像,大小为16x10x10(channel\*width\*high)

  • 示例的卷积核为3x3

  • imageddr移动的计算单元的可视化过程(stride为1)

  1. 第一个3x3

  2. 第二个3x3

  3. 第三个3x3

  4. (直到移动完整个width后,开始从high维度做stride)第1次移动high维度的3x3

  5. 第1次移动high维度的第2个3x3

  • 按照如上规则将整个image排列好准备进入计算单元(这是一个动态的过程,究竟一次能排列多少个3x3看硬件的存储资源能力,不一定一次排列好所有数据)
  • 完整的将image读入排列好准备计算的示例

input weight 细节

  • Weight的大小取决于输入输出
  • 示例weight16\*8\*(3x3)input_channel \* output_channel\*kernel_size)
  • weightddr移动到计算单元相对比较简单,依次取出所有的weight进行计算即可(每次取出多少看硬件的计算资源大小,示例硬件计算资源为16\*3x3,一次可以完成1个所有input通道的3x3卷积计算)

硬件资源介绍

  • 硬件资源为(16\*9)个乘法器 和(14\*9 + 8)个加法器, 意味着一次可以对一个3x3的图形的16个通道完成一次乘加
  • 由加法的交换律可得在channel维度和image维度的加法的前后并不影响计算结果,示例的硬件资源先做channel维度的加法,再做kernel的加法
  • npu的实现根据需求会有各种不同,本文只是做了一个很小的计算描述,真实的npu计算需要适配各种功能,实现会非常复杂

计算步骤描述

  • 依照之前的描述我们已经获得一个input image的队列,一个input weight的队列,只需要"依次 "将imageweight放入计算资源做乘加即可以得到卷积计算结果

  • 这里需要仔细理解,虽然目前有了weightimage队列,但是这两个队列对于计算资源并不是一一对应的

    由于我们有16\*3\*3的硬件资源,1次计算既可以完成一个kernel_size weightoutput通道乘加(1个output通道由16个输入通道组成),需要8次计算既可以完成一个kernel_size的所有的输入输出通道的乘加

  • 所以第一次计算我们会拿image第一个 16\*3\*3weight的第一个输出通道(16\*3\*3)计算,第二次计算 会切换image第二个16\*3*\3stridewidth维度偏移1次,但是weight是不做切换 的,(因为在一个width\*high维度上 weight是固定的),这样在计算完第一行的image后,理论上会换high维度继续做width\*high,但是这样在做完所有的image后需要重新加载weighimage计算其他输出通道,会有很多的重复加载(缓存资源有限),所以这里的解决方案是在前三行width维度完成计算后,会切回到起始点 然后切换weight做乘加,直到8个输出通道的weight都完成计算,才会切换high维度

  • 计算详解

    计算步骤 切换维度 image weight 说明
    1 width width0_high0 3x3 output channel 1 第一个3x3
    2 width width1_high0 3x3 output channel 1 w维度切换stride
    3 width width2_high0 3x3 output channel 1 w维度切换stride
    4 width width3_high0 3x3 output channel 1 w维度切换stride
    5 width width4_high0 3x3 output channel 1 w维度切换stride
    6 width width5_high0 3x3 output channel 1 w维度切换stride
    7 width width6_high0 3x3 output channel 1 w维度切换stride
    8 width width7_high0 3x3 output channel 1 w维度切换stride
    9 width->width width0_high0 3x3 output channel 2 返回第一个3x3,切换weight
    10 width width1_high0 3x3 output channel 2 w维度切换stride
    11 width width2_high0 3x3 output channel 2 w维度切换stride
    12 width width3_high0 3x3 output channel 2 w维度切换stride
    13 width width4_high0 3x3 output channel 2 w维度切换stride
    14 width width5_high0 3x3 output channel 2 w维度切换stride
    15 width width6_high0 3x3 output channel 2 w维度切换stride
    16 width width7_high0 3x3 output channel 2 w维度切换stride
    17 width->width **width0_high0 3x3 ** output channel 3 返回第一个3x3,切换weight
    18 width width01_high0 3x3 output channel 3 w维度切换stride
    ... ... ... ... ...
    64 width width7_high0 3x3 output channel 8 完成所有维度的weight和前三行image的乘加
    65 width->high **width0_high1 3x3 ** output channel 1 h维度切换stride,第2,3,4行的第一个3x3
    66 width width1_high1 3x3 output channel 1 w维度切换stride
    67 width width2_high1 3x3 output channel 1 w维度切换stride
    68 width width3_high1 3x3 output channel 1 w维度切换stride
    ... ... ... ... 重复上述步骤直到完成所有的Image
  • 通过上述计算既可以完成一个10*10*16通道input, 输出为10*10*8通道的卷积运算

相关推荐
无忧智库11 分钟前
某矿山井下人员精准定位与AI行为安全识别管控系统建设方案(WORD)
人工智能·安全
湘美书院--湘美谈教育16 分钟前
湘美谈教育AI经验集锦:有些东西,它们很难蒸馏
大数据·人工智能·深度学习·机器学习
HyperAI超神经19 分钟前
深度估计准确率冲上0.9,Meta提出VLM³,论证视觉模型天生会学3D,以Qwen3-VL-4B为基础实现多任务的统一建模
人工智能·3d·大模型·多模态·空间推理·3d感知·3d理解
Hello:CodeWorld21 分钟前
Dify 从入门到实战:部署、模型对接与企业级 AI 应用开发全教程
人工智能·python·架构·ai编程
AllData公司负责人27 分钟前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与Chat2DB开源项目,建设Text2SQL生产场景全新体验的数据源平台!
数据库·人工智能·text2sql·数据中台·数据源·chat2db·智谱大模型
xinlianyq32 分钟前
2026 电商视觉红海突围:核心 AI 视频与海报创作工具实战选型指南
人工智能·aigc
Deepoch34 分钟前
Deepoc VLA开发板:除草机器人的持续学习与协同作业系统
人工智能·学习·机器人·开发板·具身模型·deepoc
生成论实验室39 分钟前
判断力与六十四卦:AI的第三块基石
人工智能·语言模型·机器人·自动驾驶·安全架构
xixixi7777742 分钟前
空天地通信、高速光模块、AI 智能体攻击、同态加密芯片四大事件解读:AI 算力底座攻防与全域通信同步升级
大数据·人工智能·深度学习·ai·大模型·光模块·智能体
水木流年追梦1 小时前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt