ACCL+: an FPGA-Based Collective Engine for Distributed Applications——论文泛读

news2024/11/14 12:09:28

OSDI 2024 Paper 论文阅读笔记整理

问题

FPGA在云部署中越来越普遍[16,81],如智能NIC[29,35,64,67103]、流处理器[31,32,55,68]和分布式加速器[15,41,61,65,86,93115]。可以使用FPGA到FPGA的直接通信来构建高效的分布式系统。然而,使用FPGA设计分布式应用程序是困难的,它需要FPGA上与数据中心基础设施兼容的网络栈,以及更高层次的抽象,例如集体通信,以实现更复杂的交互模式。集体通信是并行计算和分布式系统中的一种通信模式,涉及多个进程之间的数据交换和同步操作。集体通信操作通常由消息传递接口(MPI)等库提供,允许多个进程进行协同工作,而不需要每个进程独立地进行点对点通信。

最近的方法[10,18,60,70,72100]侧重于虚拟化FPGA资源以抽象数据移动,缺乏对网络的支持。这迫使利用FPGA的分布式应用程序依赖CPU进行通信[22,92116],从而增加了FPGA之间数据传输的延迟。直到最近,FPGA才有了本机网络支持[14,45,56,87,95]。但这些系统缺乏集体通信,限制了它们在更大的分布式用例中的适用性。

挑战

为FPGA实现高性能和多功能的集体抽象面临几个挑战:

  • 支持多种传输协议。这源于对特定应用解决方案的需求,并确保FPGA、CPU和加速器共存的混合环境中的互操作性。适应各种通信协议对于将基于FPGA的组件与系统的其他部分无缝集成至关重要。现有的工作[25,26,36,44,73,84,85,101,104,112]通常是针对FPGA直接相互连接而不通过数据中心分组交换网络连接的场景。在这些方法中,通信是通过低级链路层协议进行的,这导致了数据中心规模的可扩展性和集成挑战。

  • 集体实施的灵活性。一个关键的挑战是在硬件中提供灵活的设计,允许在运行时选择不同的集合和算法。当前的解决方案[26,45]通常将所有可能的集合模块直接集成到FPGA硬件中,导致对静态原语的更高需要数小时的重新编译。替代方法,例如在FPGA上使用嵌入式微控制器(uC)[89]的集体,以牺牲性能为代价提供了更大的灵活性。

  • 跨应用程序和平台的可移植性。可移植性是一个关键挑战,因为FPGA用于各种配置。图1a显示了FPGA集体通信库(CCL)作为FPGA加速器之间直联网络,还演示了以FPGA为中心的应用程序的分区内存模型[54,59,60],如果数据来自CPU内存(虚线),则需要显式内存副本。图1b说明了CCL作为具有共享虚拟内存的CPU应用程序的集体卸载引擎[62,70,75106]。这引发了应该向应用程序提供哪些通信模型的问题。接口应该支持消息传递,即MPI,在内存缓冲区之间进行通信;还是流式传输,在流式传输中通过连续的数据流进行通信。

本文方法

本文提出了FPGA上的自适应集体通信库ACCL+。

  • 可跨不同平台,支持UDP、TCP以及RDMA,使FPGA应用程序能够启动FPGA到FPGA的直接集体通信。可以作为CPU应用程序的集体卸载引擎,将CPU从网络任务中解放。

  • 提供了具有显式缓冲区分配的类MPI集体API和具有直接通道到通信层的流式集体API。

  • 为了实现可移植性,采用了模块化的系统架构,将特定于平台的IO管理和运行时与集体实现解耦,并结合了特定于平台和网络协议的适配器和驱动程序。

  • 为了灵活性,开发了独立于平台和协议的集体卸载引擎,支持在不重新编译硬件的情况下修改集体实现。

开源代码:GitHub - Xilinx/ACCL: Alveo Collective Communication Library: MPI-like communication operations for Xilinx Alveo accelerators 【可能是】

在具有100 Gb/s网络的FPGA集群上评估了ACCL+,并将其性能与RDMA上的软件MPI进行了比较。结果表明,ACCL+在基于FPGA的分布式应用中具有显著优势,在CPU应用中具有竞争力。

通过两个用例展示了ACCL+的双重作用:作为分布式基于CPU的向量矩阵乘法的集体卸载引擎,以及作为设计完全基于FPGA的分布式深度学习推荐推理的组件。

总结

针对基于FPGA的通信库,现有方法不能支持多种传输协议、灵活性不足、可移植性不足。本文提出FPGA上的自适应集体通信库ACCL+。包括四个技术:(1)可跨不同平台,支持UDP、TCP以及RDMA,使FPGA应用程序能够启动FPGA到FPGA的直接集体通信。可以作为CPU应用程序的集体卸载引擎,将CPU从网络任务中解放。(2)提供了具有显式缓冲区分配的类MPI集体API和具有直接通道到通信层的流式集体API。(3)为了可移植性,采用了模块化的系统架构,将特定于平台的IO管理和运行时与集体实现解耦,并结合了特定于平台和网络协议的适配器和驱动程序。(4)为了灵活性,开发了独立于平台和协议的集体卸载引擎,支持在不重新编译硬件的情况下修改集体实现。

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

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

相关文章

通过 EMR Serverless Spark 提交 PySpark 流任务

在大数据快速发展的时代,流式处理技术对于实时数据分析至关重要。EMR Serverless Spark提供了一个强大而可扩展的平台,它不仅简化了实时数据处理流程,还免去了服务器管理的烦恼,提升了效率。本文将指导您使用EMR Serverless Spark…

python爬虫获取网易云音乐评论歌词以及歌曲地址

python爬虫获取网易云音乐评论歌词以及歌曲地址 一.寻找数据接口二.对负载分析三.寻找参数加密过程1.首先找到评论的请求包并找到发起程序2.寻找js加密的代码 四.扣取js的加密源码1.加密函数参数分析①.JSON.stringify(i0x)②bse6Y(["流泪", "强"])③bse6Y…

Linux--Socket套接字编程

Socket编程 Socket编程是一种在网络中不同计算机之间实现数据交换的编程方式。它允许程序创建网络连接,并通过这些连接来发送和接收数据。Socket编程是网络编程的基础,广泛应用于客户端-服务器(C/S)架构中。 要实现双方通信&…

【扩散模型(六)】Stable Diffusion 3 diffusers 源码详解1-推理代码-文本处理部分

系列文章目录 【扩散模型(一)】中介绍了 Stable Diffusion 可以被理解为重建分支(reconstruction branch)和条件分支(condition branch)【扩散模型(二)】IP-Adapter 从条件分支的视…

基于python的去除图像内部填充

1 代码功能 该代码实现了一个图像处理的功能,具体来说是去除图像内部填充(或更准确地说,是提取并显示图像中轮廓的外围区域,而忽略内部填充)。以下是该功能的详细步骤: 读取图像:使用cv2.imread…

Hadoop-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBaseRedis 章节内容 上一节我们完成了: HBase …

机器学习-18-统计学与机器学习中回归的区别以及统计学基础知识

参考通透!一万字的统计学知识大梳理 参考3万字长文!手把手教你学会用Python实现统计学 参考统计学的回归和机器学习中的回归有什么差别? 1 研究对象 一维:就是当前摆在我们面前的“一组”,“一批数据。这里我们会用到统计学的知识去研究这类对象。 二维:就是研究某个“事…

【系统架构设计】数据库系统(三)

数据库系统(三) 数据库模式与范式数据库设计备份与恢复分布式数据库系统分布式数据库的概念特点分类目标 分布式数据库的架构分布式数据库系统与并行数据库系统 数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 备份与恢复 分布式数据库系统…

生活中生智慧

【 圣人多过 小人无过 】 觉得自己做得不够才能做得更好,互相成全;反求诸己是致良知的第一步;有苦难才能超越自己,开胸怀和智慧;不浪费任何一次困苦,危机中寻找智慧,成长自己。 把困苦当作当下…

自动驾驶三维车道线检测系列—LATR: 3D Lane Detection from Monocular Images with Transformer

文章目录 1. 概述2. 背景介绍3. 方法3.1 整体结构3.2 车道感知查询生成器3.3 动态3D地面位置嵌入3.4 预测头和损失 4. 实验评测4.1 数据集和评估指标4.2 实验设置4.3 主要结果 5. 讨论和总结 1. 概述 3D 车道线检测是自动驾驶中的一个基础但具有挑战性的任务。最近的进展主要依…

【NetTopologySuite类库】GeometryFixer几何自动修复,解决几何自相交等问题

介绍 NetTopologySuite 2.x 提供了GeometryFixer类,该类能够将几何体修复为有效几何体,同时尽可能保留输入的形状和位置。几何的IsValid属性,反映了几何是否是有效的。 输入的几何图形始终会被处理,因此即使是有效的输入也可能会…

特征工程方法总结

方法有以下这些 首先看数据有没有重复值、缺失值情况 离散:独热 连续变量:离散化(也成为分箱) 作用:1.消除异常值影响 2.引入非线性因素,提升模型表现能力 3.缺点是会损失一些信息 怎么分:…

pdf太大了怎么变小 pdf太大了如何变小一点

在数字化时代,pdf文件已成为工作与学习的重要工具。然而,有时我们可能会遇到pdf文件过大的问题,这会导致传输困难或者存储不便。别担心,下面我将为你介绍一些实用的技巧和工具,帮助你轻松减小pdf文件的大小。 方法一、…

docker的学习(一):docker的基本概念和命令

简介 docker的学习,基本概念,以及镜像命令和容器命令的使用 docker docker的基本概念 一次镜像,处处运行。 在部署程序的过程中,往往是很繁琐的,要保证运行的环境,软件的版本,配置文件&…

SQLite数据库在Android中的使用

目录 一,SQLite简介 二,SQLIte在Android中的使用 1,打开或者创建数据库 2,创建表 3,插入数据 4,删除数据 5,修改数据 6,查询数据 三,SQLiteOpenHelper类 四&…

信弘智能与图为科技共探科技合作新蓝图

本期导读 近日,图为信息科技(深圳)有限公司迎来上海信弘智能科技有限公司代表的到访,双方共同探讨英伟达生态系统在人工智能领域的发展。 在科技日新月异的今天,跨界合作与技术交流成为了推动行业发展的重要驱动。7月…

使用JWT双令牌机制进行接口请求鉴权

在前后端分离的开发过程中,前端发起请求,调用后端接口,后端在接收请求时,首先需要对收到的请求鉴权,在这种情况先我们可以采用JWT机制来鉴权。 JWT有两种机制,单令牌机制和双令牌机制。 单令牌机制服务端…

JAVA 异步编程(线程安全)二

1、线程安全 线程安全是指你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行的代码结果和单线程运行的结果是一样的,且其他变量的值和预期的也是一样的,那么就是线程安全的。 一个类或者程序…

Linux驱动开发-06蜂鸣器和多组GPIO控制

一、控制蜂鸣器 1.1 控制原理 我们可以看到SNVS_TAMPER1是这个端口在控制着蜂鸣器,同时这是一个PNP型的三极管,在端口输出为低电平时,蜂鸣器响,在高电平时,蜂鸣器不响 1.2 在Linux中端口号的控制 gpiochipX:当前SoC所包含的GPIO控制器,我们知道I.MX6UL/I.MX6ULL一共包…

整顿职场?安全体系建设

本文由 ChatMoney团队出品 00后整顿职场,职场到底怎么了?无压力、无忧虑的00后可以直接开整,那绝大部分打工人寒窗苦读、闯过高考,艰辛毕业,几轮面试杀入职场,结婚买房、上有老下有小,就活该再被…