神经网络推理加速入门——计算和存储的分离

简介: 硬件优化对于计算的加速效果是显而易见的,理解了底层硬件的原理,可以帮助我们更好的完成计算优化。

大家好啊,我是董董灿。

今天开始,增加第一个专栏,作为神经网络推理加速的专栏,主要写一写在神经网络推理过程中的一些加速方法。

先从计算机底层原理说起。先说几个基础概念。

计算机存储和计算的分离

第一是计算机。这里说的计算机是广义上的计算机,也就是说具有计算能力的硬件设备(计算的机器)都算。小到某个芯片系统,大到智能手环、手机、电脑甚至服务器,都归到计算机的范畴。

第二是计算。这里要说的计算,指所有的计算,包括科学计算——比如用计算器算一些数,包括音频编解码——比如手机麦克风对我们说话音频的调制解调处理,包括视频流——比如看电影时一帧帧图像的解码等等。所有芯片需要处理的计算任务,都包含在计算这一概念中。

第三是存储。这里说的存储,泛指计算机中所有能存储数据硬件。包括我们熟知的硬盘、U盘、手机内存、手机运存、GPU显存(显卡容量),也包括处理器(CPU或其他芯片)内部的片上存储或L1/L2缓存等。

在说清楚这3个概念之后,那么,计算机的计算和存储,就好比——

我们在厨房做饭,厨房里的冰箱就是存储器,冰箱里的菜就是希望处理的数据,而洗菜、切菜、炒菜都属于计算任务,整个厨房就是计算机。

冯诺依曼架构

不论是笔记本,还是手机,还是智能手表智能手环,内部的程序运行机制都是一样的,都绕不开一个著名的计算体系,大家可能听过,叫做冯诺依曼体系。

冯诺依曼是二战时期著名的计算机科学家,他开创性的提出了计算机的冯诺依曼架构,其中最为人津津乐道的,是数据存储和计算的分离。

在任何一台计算机中,存储数据的硬件叫做存储器,负责逻辑计算的叫做运算器。除此之外还有控制器,输入输出(IO)等。

image.png

存储和计算分离就是,存储器只负责存储数据,计算单元只负责计算数据,然后将计算出来的结果再存回存储器。

有没有发现,我们在做计算(洗菜)之前,需要将数据(菜)从冰箱里拿出来,放在洗菜池里来洗(计算)。这个将菜从冰箱里拿出来的过程,叫做数据的搬运。

而在芯片的整个运算过程中,数据的搬运的时间开销是避免不了的,甚至有时会占据绝对的大头。

举个例子——

我们知道卷积运算是一种计算密集型的算法。也就是大量的时间开销都消耗在了卷积的乘法和加法上(乘累加,Multiply-accumulator,MAC单元)。但是,如果芯片的片上存储很小,而神经网络中的一张图片又很大,一张图片的数据是无法在一次计算中全部放在片上存储的。

image.png

那么这个时候,自然而然会想到将图片拆分成好几份进行计算。

然而,卷积要求的是将所有输入通道进行累加和。如果在通道上进行了数据拆分,那么每次计算的都是不完全的结果(部分和)。这个时候,这些中间结果都要找个地方放。

放哪里?

最常见的就是放在片外存储上(对于GPU来说,可能就把这些临时数据放在DDR上,也就是我们常说的显存上,因为显存一般都比较大,大概16GB,肯定能的下)。

如此一来,存放数据的冰箱可能就不是厨房里的冰箱了,而是客厅里的大冰柜,将数据从厨房搬到客厅的大冰柜临时存起来,这个过程的数据搬运开销是很大的。

也因此,GPU甚至很多ASIC芯片,在进行芯片设计时,都会想办法加大DDR的带宽,通过多路DDR访存甚至使用HBM来提升带宽,以降低数据搬运带来的额外开销。

image.png

总结一下

在现有经典的计算机计算架构中,比如冯诺依曼架构中,计算和存储是分离的。这也就导致了计算机在完成运算任务时,需要不断地从存储器中搬运数据到计算单元中,然后完成计算。

这种架构也导致了计算指令和IO指令(数据搬运)的独立,从而衍生出指令流水线。(这个后面会慢慢介绍)。除此之外,既然计算和存储是分离的,为了防止多余的搬运开销,那我们把计算和存储放在一起不就行了么?

我们直接在冰箱里洗菜做饭不就完了?

可以,现在比较前沿的近存芯片、或者存算一体芯片就是基于这个想法来设计实现的,后面也会逐步涉及一些存算一体技术进行AI推理加速的,敬请期待。

欢迎关注@董董灿是个攻城狮 和同名微信公众号
本文作者原创,转载请联系作者,请勿随意转载

相关文章
|
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的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
9天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
47 17
|
20天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章