Versal系列0-AI Engine与Systolic Array

2023-10-10 07:59

本文主要是介绍Versal系列0-AI Engine与Systolic Array,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在开发VCK190时,发现Xilinx Versal系列的AI engine(AIE),其实和Systolic Array(SA)有着很相似的地方。Xilinx工程师在研发AIE时,应该是有所借鉴SA的。

Systolic Array最早是H. T. Kung于1982年在论文《Why systolic architectures?》中提出,但是由于过于过于专用性,在通用处理器当道的年代并没有得到许多的关注。随着人工智能的火热,各种硬件加速器的设计不断涌现,谷歌的TPU就重新使用起了Systolic Array来做AI里最常用的矩阵乘法操作。许多AI模型部署的硬件加速器也都采用了SA做主要算子。

Why systolic architectures?

Systolic Array

在做矩阵乘法时,一般的方法是将矩阵的行和列从存储元件(DDR、BRAM、cache)中取出来,做完运算后再将其返回DDR中。而存储单元消耗的带宽是有限的,通常比计算单元速度慢很多,因此,访存的带宽成了整个系统的瓶颈。如果能每次在取出数据后,尽量做尽可能多的操作,让数据的利用率尽可能大,就能显著提升整个系统的速度。

常规矩阵运算

Systolic Array就是这样一个能显著提升矩阵乘法性能的硬件架构。它只需要从存储元件中取出一次元素,就能将整个矩阵计算完成。以3x3的方阵乘法为例,A矩阵与B矩阵相乘得到C矩阵:

3x3的方阵乘法

用于计算此矩阵乘法的SA也包含3x3个Processing Element(PE),每个PE的完成的操作就是将做个矩阵的乘法并放入自己的局部存储中(Local Memory)。在初始时刻,先将A矩阵的列翻转,B矩阵的行翻转,并按照A每一行晚一拍,B每一列晚一拍进入SA的顺序放置。每个PE的本地存储当前都是空的。

初始状态

然后矩阵元素 a11c_{13} ...

最后一个时钟周期

Systolic Array在整个矩阵的运算中只需要在开始访问存储器得到A和B矩阵的元素,每次运算不需要重新访存,就可以传递给下一个PE,从而克服了访存对速度的限制。

AI Engine

AI Engine是Xilinx Versal系列器件里新添加的硬核,每个AIE都是个32位RISC微处理器,如VCK190上嵌入了400个这样的硬核,因此能提供非常庞大的算力,来满足AI等场景下的要求。

类似SA,AIE也是形成一个阵列[1],从下图中可以看到,它也有局部的存储(灰色块),也有类似SA的计算单元(绿色块)。并且也会有互联的总线逻辑(蓝色,绿色与黑色线)。这种架构能让计算逻辑更快得访问Memory,互联逻辑也能让AIE访问相邻AIE的Memory。

AIE阵列架构

而AIE阵列与SA的区别在于

  • AIE阵列的计算逻辑AIE非常强大,包括标量/矢量计算单元。而SA里的PE通常只是做简单的乘加运算。
  • AIE阵列的单个AIE存储单元容量为32KB,而通常SA的存储单元容量较小。
  • AIE阵列的互联逻辑不仅可以传递数据到右边和下边的AIE,也可以传递到左边和上边,也可以跨AIE,通过AXI Interconnect总线访问更加远的AIE。而SA的互联逻辑更加简单。
AI Engine计算单元
AI Engine存储单元

AIE可以认为是个加强版的Systolic Array,利用了局部存储的高带宽的优势,让计算逻辑与存储逻辑更加靠近,从而满足高吞吐率,高计算量应用的要求。

参考

  1. ^AM009-AI Engine Architecture https://docs.xilinx.com/r/scNYG4asFKV~nqnjEkGwmA/root

link

这篇关于Versal系列0-AI Engine与Systolic Array的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179109

相关文章

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首