Memory Wall in Neural Network Inference

news2024/9/21 10:35:50

Memory Wall in Neural Network Inference

神经网络推理的瓶颈在于访存带宽,通常无法发挥出加速器的全部算力。本文总结了目前常用的推理加速器及其设计,并分析了常用神经网络的访存瓶颈。文章大部分内容参考自Computer Architecture: A Quantitative Approach。

1 Compute centric accelerators

1.1 CPU

一般来说,CPU擅长于做控制逻辑复杂的workload。但是,CPU里面也存在SIMD的加速器设计。

  • Vector Architecture in RISC

    • Basic idea

      • Read sets of data elements into “vector registers”
      • Operate on those registers
      • Disperse the results back into memory
    • Y = a × X + Y

      左边使用Loop的原始汇编代码,右边是使用Vector Architecture优化后的汇编代码。

      在这里插入图片描述

      • 如果 X 和 Y 均为32维向量,1 lane

        那么使用Vector Architecture加速,需要32×3个cycle

    • Optimization

      可以优化的地方很多,讲两个有意思的优化。

      • Multiple Lanes

        如果是4 lane的话,上述例子仅需要32×3/4个cycle就可以完成。

        在这里插入图片描述

      • Scatter-Gather

        读取的向量可以不存储在连续的内存中。

        例如,执行这段代码:

        for (int i=0; i<n; i++){
            A[K[i]]=A[K[i]]+C[M[i]];
        }
        

        使用Scatter-Gather优化后的汇编代码如下:

        在这里插入图片描述

        这种优化技术用在稀疏矩阵场景很有用。

  • SIMD extensions for x86

    简单来讲,就是利用长寄存器,一次处理多个数据。比如寄存器长度是256 bit,一个数据的长度是64 bit,这时候,就可以一次处理4个数据。

    使用SIMD extensions优化Y = a × X + Y 后的汇编指令:

    在这里插入图片描述

    • 这种优化要求向量必须存储在连续的内存空间中
  • Vector Arch. vs. SIMD Extensions

    看这张图,对于神经网络推理加速场景,x86完全干不过RISC(哈哈,连高性能计算都干不过RISC,x86是不是要凉啊)。

    在这里插入图片描述

1.2 GPU

简单来讲,GPU的架构就是堆很多的寄存器和ALU,获取高算力。对应到下图,你可以看到很多的SIMD Lane 和 DP Unit。

在这里插入图片描述

但是,GPU里面的处理器算力很强,访存带宽跟不上怎么办?首先,它使用了HBM,内存带宽很高;另外,其中的SIMT (Single Instruction, Multiple Thread) 编程模型利用多线程来掩盖访存时延。

如下图,简单来讲,当thread 8运行的时候,其他的线程(比如thread 1, 3)也没闲着,它们正在取数据。这样的话,GPU里面的处理器时刻处于满负载状态,不需要傻傻地等到数据加载到寄存器才运行。(熟悉GPU的同学应该发现了,图里面的thread改成warp更合适,懒得改了)

在这里插入图片描述

1.3 TPU

听过好多人吹google的TPU多么牛逼,其实也就那样,就是一个专门用来加速GEMM的设备。下图是TPU的架构图,右边的Matrix multiply unit 就是TPU的核心部件。

在这里插入图片描述

通用的加速器GPU可以用来加速向量加法,甚至有人整活,直接在GPU上构建了一个数据库。然而,TPU是一个专用的加速器,只能用来加速GEMM算子,其他的活统统干不了。

不过,TPU里面加速GEMM的硬件设计很有意思。专业的名字叫做Systolic Execution,不过,我喜欢叫它脉冲阵列。如果矩阵的维数是N×N,TPU使用2N-1个cycle就可以把GEMM算子计算完。

在这里插入图片描述

2 Neural network and Memory wall

在当前以计算为中心的编程模型中,需要先从内存中把数据加载到cache,然后ALU进行计算任务,最后将结果保存至内存中。

目前,ALU算的很快,把内存中数据加载到cache的带宽有限,这时候,ALU的算力就会被浪费,性能瓶颈卡会在内存带宽上,这就是“内存墙”。如果我们读入cache一个数据,对它进行N次计算操作后才保存结果,N定义为Operational Density。如果Operational Density,就没有“内存墙”的问题。如果Operational Density比较低,程序就会卡在“内存墙”上。

接下来,我们分析一下MLP、CNN、LSTM和Transformer的Operational Density,判断它们是否会卡在内存墙上。

2.1 MLP

MLPs (Multi-Layer Perceptions) ,多层感知机,大家应该都挺熟悉的,里面的算子是GEMV。

在这里插入图片描述

  • Operational Density为2×batch size每一个矩阵参数乘和加操作各一次。

2.2 CNN

CNN 里面的基础的算子是卷积算子。convolution kernel 复用很多次,Operational Density很高。

在这里插入图片描述

  • Operational Density为 2 x DimFM[i]^2

2.3 LSTM

LSTM里面主要也是GEMV算子。

在这里插入图片描述

  • Operational Density为~2

2.4 Transformer

Transformer中的参数Operational Density与sequence len有关。假设输入token数量为N,generate token 数量为S。主要是GEMM和GEMV算子。

  • 参数Operational Density为 (N×2+S×2)/(1+S)

在这里插入图片描述

在推理过程中,不仅仅需要访问参数,还需要访问KV cache (>30%)

  • KV cache Operational Density为 2
  • pagedAttention
  • 参数Operational Density随batch递增,但是,KV cache Operational Density仍然是2。

在这里插入图片描述

3 Roofline

  • 除了CNN,其他Neural network 的 Operational Density比较低,推理的时候卡在内存带宽,发挥不出硬件算力。
  • 增大batch从而增大Operational Density,是缓解这个问题的一种方法。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript基础(26)_dom增删改练习

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>DOM增删改练习</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>table {borde…

软件测试|Selenium StaleElementException异常的原因与方法

简介 在使用Selenium进行Web自动化测试时&#xff0c;我们可能会遇到StaleElementException异常。这个异常通常在我们操作一个之前已经找到的元素时抛出&#xff0c;但该元素已经不再处于DOM树中&#xff0c;导致元素过时&#xff08;stale&#xff09;。本文将介绍StaleEleme…

C++11 左右值引用、移动语义

右值引用和移动语义 什么是左值&#xff1f;什么是左值引用&#xff1f; 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋值&#xff0c;左值可以出现赋值符号的左边&#xff0c;右值不能出现在赋值符号左边。定义时const修饰…

SpringSecurity入门demo(二)表单认证

上一篇博客集成 Spring Security&#xff0c;使用其默认生效的 HTTP 基本认证保护 URL 资源&#xff0c;下面使用表单认证来保护 URL 资源。 一、默认表单认证&#xff1a; 代码改动&#xff1a;自定义WebSecurityConfig配置类 package com.security.demo.config; import or…

基于python的基金分析可视化系统

项目背景&#xff1a; 随着金融市场的发展和人们对财富管理的重视&#xff0c;越来越多的人开始参与基金投资。然而&#xff0c;由于市场上基金产品众多且复杂&#xff0c;投资者往往难以快速准确地获取基金信息和进行分析&#xff0c;从而导致投资决策不够科学和有效。为了解决…

PyCharm安装使用教程2024

简介 PyCharm是一种PythonIDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单…

三棋先手必胜证明

目录 创作原因 游戏规则 初始状态图 证明过程 先手必胜的证明 失败的博弈树&#xff08;三个多小时的成果&#xff09; 创作原因 这个棋不是网上流行的成三棋&#xff0c;我也不知道这个棋叫什么。由于这个棋是&#xff08;横竖斜&#xff09;连成三个就获胜&#xff0c;…

Vulnhub-HACKSUDO: PROXIMACENTAURI渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、端口敲门三、web密码爆破四、getShell五、获取新用户六、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写文章的时候都是挑重点来写&#xff0…

【同济子豪兄斯坦福CS224W中文精讲】NetworkX代码学习笔记

文章目录 安装配置创建图可视化图图数据挖掘参考资料 安装配置 matplotlib中文字体设置 import networkx as nx import matplotlib.pyplot as plt # 魔法指令&#xff0c;设置后在jupyter notebook中绘制的图形会显示在输出单元格中&#xff0c;而不是弹出一个新窗口 %matplo…

ssm基于Javaweb的网上奶茶店系统的设计与实现论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

爬虫之牛刀小试(四):爬取B站番剧的简介

今天爬取的是b站。 如何爬取b站中的番剧呢&#xff1f; 首先我们来到番剧索引中&#xff0c;随便点开一部动漫&#xff0c;检查代码。 每个作品对应一个链接: https://www.bilibili.com/bangumi/play/ss…&#xff08;ss后面的数字称为ss号&#xff09; 发现关于动漫的信息…

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…

某厂校招一道关于C的笔试题

一、笔试原题 题目&#xff1a;在Linux x86 _ 54 gcc环境下&#xff0c;下面的程序会出现什么问题&#xff1f;运行结果是什么&#xff1f;为什么&#xff1f; 程序如下图&#xff1a; 通过在gcc的环境下编译运行&#xff0c;发现运行结果为不断死循环打印0-17的数字 我们…

TCP之三次握手四次挥手与UDP区别

文章目录 1 TCP三次握手四次挥手1.1 数据包说明1.1.1 TCP数据包1.1.2 UDP数据包1.1.3 TCP和UDP差异1.1.4 TCP可靠性传输机制 1.2 三次握手1.2.1 三次握手定义1.2.2 三次握手问题1.2.2.1 问题引入分析1.2.2.2 历史连接1.2.2.3 同步双方初始序列号1.2.2.4 避免资源浪费 1.3 四次挥…

Github Copilot AI保密级教程

Copilot 是一款由 OpenAI 推出的人工智能代码自动补全AI工具&#xff0c;它可以帮助程序员更快、更准确地编写代码。Copilot 的核心技术基于 GPT-3 模型&#xff0c;但是在编码方面是优于GPT-3的&#xff0c;它可以根据程序员输入的上下文和代码提示&#xff0c;自动生成符合语…

微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明&#xff1a;本文为了演示效果&#xff0c;颜色采用的比较显眼&#xff0c;可根据实际情况修改颜色 问题描述 当我们在JSON中将navigationStyle设置成custom后&#xff0c;当前页面的顶部导航栏就需要我们制作了&#xff0c;但出现了一下几个问题&#xff1a; 导航栏的高…

51-12 多模态论文串讲—BLIP 论文精读

视觉语言预训练VLP模型最近在各种多模态下游任务上获得了巨大的成功&#xff0c;目前还有两个主要局限性: (1) 模型角度: 大多数方法要么采用encoder模型&#xff0c;要么采用encoder-decoder模型。然而&#xff0c;基于编码器的模型不太容易直接转换到文本生成任务&#xff0…

高德打车引入“红绿灯倒计时”能力,算力技术升级打车体验

打到的车还有多久能到&#xff1f;接驾车辆原地不动是什么原因&#xff1f;乘客在打车时&#xff0c;常常因为无法了解实时接驾路况&#xff0c;容易出现“等车焦虑”。 如今&#xff0c;高德打车已全面应用“红绿灯倒计时”能力&#xff0c;让乘客在等车时就能掌握接驾路况&am…

在线ai扩图是什么?有什么工具?分享3个好用的工具。

在线ai扩图是什么&#xff1f;有什么工具&#xff1f;分享3个好用的工具。 在当今数字化的时代&#xff0c;图像处理成为了我们日常生活和工作中不可或缺的一部分。有时候&#xff0c;我们需要将图像放大以获取更多的细节&#xff0c;但传统的方法往往会导致图像质量的损失。幸…

阿里云服务器ECS介绍_高性能云服务器_为了无法计算的价值

阿里云高性能云服务器60%单实例最大性能提升&#xff0c;35Gbps内网带宽&#xff0c;网络增强&通用型云服务器、本地SSD型云服务器、大数据型云服务器、GPU异构型云服务器&#xff0c;阿里云百科aliyunbaike.com分享阿里云高性能云服务器&#xff1a; 阿里云高性能云服务器…