神经网络推理加速入门——存储和计算的高效结合

简介: 如果把存储过程和计算过程结合起来,那么整个推理加速就能快很多。

大家好啊,我是董董灿。

计算机冯诺依曼架构下一个特点,就是存储和计算分离,这会带来一个问题,那就是计算机有时会遇到存储墙,也就是存储带宽不够导致的性能下降。

如果说流水技术可以为此破局,那么其实还有一个打破冯诺依曼架构的桎梏,将存储和计算过程结合起来。

它是怎么做的呢

还是先从一个例子说起。假设我要做个炒鸡蛋。正常的话我有以下步骤:

  • 把鸡蛋从冰箱里拿出来
  • 拿着鸡蛋从冰箱走到灶台
  • 在灶台开火,开始炒鸡蛋

image.png

这个过程是经典的冯诺依曼架构中的流程。

这里面有一个弊端就是:数据(鸡蛋)需要从存储器(冰箱)中 load(拿)到计算单元(锅)中,然后进行计算(炒鸡蛋)。我们知道,load数据的过程是耗时的,尤其是数据量比较大的情况下。

比方需要炒1000个鸡蛋,一个锅肯定炒不下,需要多次拿鸡蛋,多次炒。

并且拿鸡蛋的速度取决于从冰箱走到灶台的速度,这里就是存储器到计算单元之间的总线带宽,带宽越大,速度越快。

但无论带宽多大,只要是这种架构,总是会有耗时,并且带宽是不可能很大的。

在这个时候,会出现一种极端情况,厨师炒鸡蛋的速度很快,可能1秒钟就炒完了,而从冰箱里拿鸡蛋到灶台,遇到个手脚不灵活的人,可能需要3秒钟。

不论多长时间,只要大于炒鸡蛋的时间,厨师就得等着鸡蛋过来。这个时候就是说,计算单元在空闲,性能瓶颈在带宽,程序打到了存储墙。

所谓存储墙,就是由于存储的数据需要load,但是load的时间很长,像是有一面墙在那里,导致计算单元空闲的情况。

为了解决这个问题,就有人提出,既然这样,那为什么不能把计算单元和存储单元放在一起呢?反正芯片都是人设计的嘛,放在一起就不需要来回搬运数据了啊。

比如,直接把锅做的特别大,大到可以放下1000个鸡蛋,或者说直接在冰箱里面炒鸡蛋,不用来回拿鸡蛋,这样不香么?

别说,还真香。

存——指的是存储器。

算——指的是计算单元。

两者合为一体,将计算单元和存储单元设计到一起,减少甚至消除数据的搬运。就这一点技术,就能使AI计算的性能得到飞一般的提升。

应用场景

在AI领域,最有效的场景便是,存储器的内存足够大,可以放得下整个神经网络的权值参数。

举个例子,resnet50的权值参数大概为24MB,AlexNet的权值参数大概为59M,而VGG-16大概有130M的参数量大小。

image.png

假设一个芯片的容量为40M,那么很明显resnet50的所有参数都可以全部放进存储器,这样在做模型推理的时候,只需要把 feature map(也就是图片,比如人脸识别时,拍摄的人脸照片)加载进内存就能推理出结果了。

相反,VGG-16由于权值参数太多,无法一次全部加载完成,仍然需要分多次加载。并且每次加载都是需要耗时的,此时,存算技术对VGG-16带来的性能提升肯定没有Resnet50高。

因此,在模型参数小于存储容量的场景下,其性能优势十分明显,可以说,这个时候,没有任何多余的数据搬运操作。

因此,存储过程和计算过程结合起来,对于整个神经网络的推理加速,其性能提升是很大的。

本文作者原创,转载请联系作者,请勿随意转载

相关文章
|
16天前
|
机器学习/深度学习 数据采集 人工智能
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
层次化Softmax算法通过引入Huffman树结构,将传统Softmax的计算复杂度从线性降至对数级别,显著提升了大规模词汇表的训练效率。该算法不仅优化了计算效率,还在处理大规模离散分布问题上提供了新的思路。文章详细介绍了Huffman树的构建、节点编码、概率计算及基于Gensim的实现方法,并讨论了工程实现中的优化策略与应用实践。
61 15
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
|
10天前
|
机器学习/深度学习 算法 PyTorch
基于图神经网络的大语言模型检索增强生成框架研究:面向知识图谱推理的优化与扩展
本文探讨了图神经网络(GNN)与大型语言模型(LLM)结合在知识图谱问答中的应用。研究首先基于G-Retriever构建了探索性模型,然后深入分析了GNN-RAG架构,通过敏感性研究和架构改进,显著提升了模型的推理能力和答案质量。实验结果表明,改进后的模型在多个评估指标上取得了显著提升,特别是在精确率和召回率方面。最后,文章提出了反思机制和教师网络的概念,进一步增强了模型的推理能力。
33 4
基于图神经网络的大语言模型检索增强生成框架研究:面向知识图谱推理的优化与扩展
|
2天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
28 8
|
24天前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
65 3
图卷积网络入门:数学基础与架构设计
|
14天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
64 2
|
21天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
52 3
|
28天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。

热门文章

最新文章