alpa概览

news2024/10/7 16:19:48

文章目录

  • 背景
  • alpa
    • 简介
    • DeviceMesh
    • 跨 DeviceMeshes 的 GPU Buffer管理
    • Ray Collective
    • Pipeline parallelism runtime orchestration
    • 运行时

背景

LLM训练有3D并行的需求(alpa将数据并行视为张量并行,即张量沿batch切分)

  • 算子间并行的通信成本小,但会引入数据依赖性,产生bubble,流水线仅可以缓解
  • 算子内并行性无bubble,但通信成本更高
  • 由于节点内外通信带宽不同,需根据异构网络拓扑将划分结果映射到 GPU 设备

alpa

TPU 集群上仅使用JAX的算子内并行即可,但在GPU集群,JAX 没有提供流水线并行

Alpa 的关键 API 是@alpa.parallelize装饰器,可以自动并行化和优化最佳模型并行策略。JAX 具有已知大小和形状的静态图,对样本批次的训练进行跟踪即可捕获自动划分和并行化所需的所有信息。

简介

在编译步骤中,Alpa采用计算图形式的模型描述和设备集群作为输入,并执行一些编译和优化以生成模型并行执行计划,该计划是为模型和集群定制的。

然后,Alpa根据训练代码和并行执行计划为集群中的每个参与计算设备生成二进制可执行文件。

在运行时步骤中,Alpa编排这些可执行文件在集群上的并行执行。
在这里插入图片描述

DeviceMesh

Alpa 利用 Ray Actors 创建更高级的设备管理抽象,例如 DeviceMesh:GPU 设备的二维网格Mesh。一个Mesh可以跨越多个物理主机;多个网格可以驻留在同一台主机上;一个网格可以包含整个主机。
在这里插入图片描述
Ray Actors 为管理集群内的 GPU 设备提供了极大的灵活性。 可以选择每个主机一个Actor,每个网格一个Actor,甚至每个设备一个Actor

算子间并行会将集群切分为多个设备组。每个组可能包含许多具有高通信带宽的设备,例如NVIDIA NVLink。我们将每组设备称为DeviceMeshes
在这里插入图片描述
worker即Ray actors。每个DeviceMesh可能包含来自单个节点或多个节点的部分或完整设备。Alpa 使用一个 worker 从一个节点管理多个设备;因此,一个DeviceMesh可能包含多个worker,每个worker映射到一个进程,该进程管理一个节点上的多个设备。

在这里插入图片描述

跨 DeviceMeshes 的 GPU Buffer管理

在GPU计算过程中,我们经常使用GPU张量来表示更大矩阵的块。Alpa有一个应用级GPU Buffer管理系统,为每个GPU Buffer分配一个UUID,并提供基本的原语,如Send/Recv/Delete,以实现跨DeviceMeshes 张量移动和生命周期管理。

使用Ray Actors和DeviceMesh抽象,可以通过在主机上调用相应的方法来管理和传输缓冲区,以方便高级模型训练范例。

Ray Collective

它是一组通信原语,可实现跨不同 CPU、GPU 和 DeviceMesh 的高效灵活的张量移动。它是pipeline并行的重要通信层。

Pipeline parallelism runtime orchestration

在JAX和Alpa中,计算、通信和指令往往被设计为静态的。静态特性是一个重要的属性,因为在JAX中,用户程序可以被编译为中间表示(IR),然后作为自包含的可执行文件传递给XLA。用户可以将输入传递给可执行文件,并期望得到输出结果,其中所有的张量在大小和形状上都是已知的。

JAX的函数式特性以及它的较低级别中间表示(IR)与Ray很好地配合。如果我们回顾一下Ray任务,在其中我们装饰一个函数并让它在集群中执行,装饰的函数就是"可执行文件"。在Ray中,可执行文件总是通过序列化装饰的Python函数或包装任意代码的类来生成。

然而,使用JAX时,可执行文件是一个具有清晰数学属性的强大计算单元。通过良好的调度和编排可执行文件,我们可以表示复杂且强大的神经网络,例如transformer和pipeline并行性的训练范式,这是将LLM(语言模型)扩展到GPU集群的基本技术。

下面是编译过程:

  1. 算子间并行: Alpa 将 transformer 块最佳地拆分为单独的流水线阶段stage,并将它们分配给相应的 DeviceMesh(es)。
  2. 算子内并行 :接收生成的 <stage, mesh> 对,并为该阶段生成最佳的 intra-op 并行执行计划以在其分配的网格上运行。Alpa 将运算符输入和输出矩阵与GSPMD(ML计算图的通用和可扩展并行化)一起划分到位于同一主机上的 GPU 设备上。
  3. 为网格workers生成静态指令:为每个 DeviceMesh 编译一个静态可执行文件,与用户配置相关,例如pipeline调度(1F1B、GPipe)、micro-batch、梯度累积等。
  1. 每条指令都可以是{RUN、SEND、RECV、FREE},用于处理运行自包含的 JAX HLO/XLA 程序,跨 DeviceMesh 分配/传输/释放 GPU 缓冲区。
  2. 通过静态指令,我们大大降低了 Ray single controller级别的调度频率和开销,以获得更好的性能和可扩展性。
  3. 尝试生成关于如何在两个网格之间传递张量的最佳方案。
  4. 将编译后的可执行文件放入相应的主机 Ray actor 中,供以后调用。

请添加图片描述
两层流水线并行的静态指令示例

这三个编译过程是在XLA和GSPMD之上实现的。除了分布式执行的编译过程外,XLA和GSPMD还额外执行了一些其他必要的优化以提高单设备执行性能。

运行时

Driver 调用并编排每个host worker上编译的可执行文件,以启动端到端流水线transformer 训练。

在这里插入图片描述

https://alpa.ai/architecture/overview.html?highlight=ray#design-and-architecture
https://www.anyscale.com/blog/training-175b-parameter-language-models-at-1000-gpu-scale-with-alpa-and-ray

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

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

相关文章

【Vue】父子组件传参 孙子调用爷爷的方法 provide inject

一. 父传子 父组件先在data中定义要传给子组件的属性名父组件在中引入子组件在components中注册使用步骤 3 中注册好的子组件在 3 中&#xff0c;父传子 &#xff08;1&#xff09;利用 : 将父组件的对象、数组、字符串等传给子组件&#xff0c;供子组件使用 &#xff08;2&am…

Rocky Linux9安装教程

序言 Centos废了&#xff0c;最近在考虑将服务器迁移至Rockylinux系统&#xff0c;在这里记录下安装过程 当前安装版本RockyLinux9.2&#xff08;minimal版本&#xff09;&#xff0c;VMware Fusion专业版13.0.2 创建虚拟机 第一步&#xff1a; 先下载好ISO文件&#xff0c…

python-高级特性

文章目录 1.生成式2.生成器3.闭包4.装饰器&#xff08;1&#xff09;万能装饰器的实现&#xff08;2&#xff09;含参数的装饰器&#xff08;3&#xff09;多装饰器 5.内置高阶函数 1.生成式 列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表…

2023.6.7小记——什么是FPGA?

最近打算开始继续做一些个人分享&#xff0c;已经太久时间没有写文章了&#xff0c;感觉这样下去肯定不是个好事&#xff0c;当程序员当然是要保持分享~ 标题就暂时先以每天我认为最重要的一点来取&#xff0c;内容不仅限于此。 1. 什么是FPGA&#xff1f; 全称是Field-Progra…

PCL 点云均值漂移算法(MeanShift)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 均值漂移算法是一种非常经典的层次聚类方式,已在二维图像中得到了广泛的应用。这里我们也已二维图像为例来阐述其整个计算过程: 算法基本思想:如下图所示,左侧为实际的图像特征的分布,右侧为基于图像特征分布计…

Linux操作系统——第二章 进程控制

目录 进程创建 fork函数初识 fork函数返回值 写时拷贝 fork常规用法 fork调用失败的原因 进程终止 进程退出场景 进程常见退出方法 _exit函数 exit函数 return退出 进程等待 进程等待必要性 进程等待的方法 wait方法 waitpid方法 获取子进程status 进程程序…

接口测试框架实战 | 通用 API 封装实战

接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法&#xff0c;是远远不够的&#xff0c;还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以&#xff0c;接下来&#xff0c;我们主要介绍下接口测试用例分析以及通用的流程封装是如何…

火龙果MM32F3273G8P开发板MindSDK开发教程3 - Sysclk的配置

Sysclk的配置 1、时钟初始化流程 一般流程为startup_mm32f3273g.s中调用system_mm32f3273g.c中的SystemInit函数完成系统时钟的初始&#xff0c;而system_mm32f3273g.c中函数是空的。 原来MindSdk时钟初始化的流程放到了clock_init.c中。 2、采用外部高速时钟源 先弄清几个…

Effective第三版 中英 | 第二章 创建和销毁对象 | 通过私有构造器强化不可实例化的能力

文章目录 Effective第三版前言第二章 创建和销毁对象通过私有构造器强化不可实例化的能力 Effective第三版 前言 大家好&#xff0c;这里是 Rocky 编程日记 &#xff0c;喜欢后端架构及中间件源码&#xff0c;目前正在阅读 effective-java 书籍。同时也把自己学习该书时的笔记…

文本三剑客 之 grep

目录 一.grep 1.grep常用选项命令选项 2.grep 命令选项 3.简单的正则表达式 二.sort 命令 三.uniq 去重 四 .语法格式&#xff1a; tr 选项 参数 五.快速裁剪命令——cut: 六.split 文件拆分 七.文件合并——paste 一.grep 文本三剑客了之一&#xff0c;对文本内容进行…

网络通信 --- HTTP 协议初识

目录 &#x1f332;一、HTTP 协议是什么 &#x1f333;二、HTTP协议格式 &#x1f9aa;1.抓包工具的使用(以 Fiddler 为例) &#x1f363;2. 抓包工具的原理 (以 Fiddler 为例) &#x1f364;3. 抓包结果 &#x1f365;① HTTP 请求(request) &#x1f96e;②HTTP响应(re…

chatgpt赋能python:Python中的平均值如何计算?

Python中的平均值如何计算&#xff1f; 在Python编程中&#xff0c;求取列表、元组或数据集合的平均值是一个相当常见的操作。幸运的是&#xff0c;Python内置的统计模块提供了方便的方法去实现这个操作。在这篇文章里&#xff0c;我们将探讨计算平均值的方法&#xff0c;帮助…

Unity制作二次元卡通渲染角色材质——5、脸部的特殊处理

Unity制作二次元材质角色 回到目录 大家好&#xff0c;我是阿赵。 这里继续讲二次元角色材质的制作。这次是讲头部的做法。 1、脸部 之前在分析资源的时候&#xff0c;其实已经发现了这个模型的脸部法线有问题&#xff0c;导致在做光照模型的时候&#xff0c;脸部很奇怪。 把f…

阅读ConcurrentHashMap源码,我学到了什么?

文章目录 ConcurrentHashMap怎样保证线程安全的put元素的流程具体对于红黑树是怎样保证线程安全的如何并发安全的初始化一个数组如何统计存储元素个数的怎样进行多线程扩容的 首先说明, 本篇分析基于jdk1.8. ConcurrentHashMap怎样保证线程安全的 ConcurrentHashMap主要是通过…

Java:字符流

字符流的底层其实就是字节流。 字符流字节流字符集 结构体系&#xff1a; 1.特点 输入流:一次读一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节。 输出流:底层会把数据按照指定的编码方式进行编码&#xff0c;变成字节再写到文件中。 2.使用场景 对于纯文本…

AI实战营第二期 笔记5——MMPretrain代码课

文章目录 摘要MMPreTrain实战安装推理 OR 使用API数据集训练与测试微调 摘要 MMPretrain 是一个全新升级的预训练开源算法框架&#xff0c;旨在提供各种强大的预训练主干网络&#xff0c; 并支持了不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和 MMSel…

chatgpt赋能python:Python开立方函数math:让数学计算更加简单

Python开立方函数math&#xff1a;让数学计算更加简单 Python作为一种高级编程语言&#xff0c;提供了丰富的数学计算功能&#xff0c;其中就包括了开立方函数math。本篇文章将详细介绍math开立方函数在Python中的使用方法及其优点。 什么是开立方函数&#xff1f; 开立方函…

chatgpt赋能python:Python开发BI,助力企业数据驱动决策

Python开发BI&#xff0c;助力企业数据驱动决策 随着企业数据规模的呈现爆炸式增长&#xff0c;传统的Excel等表格计算工具已经无法满足业务需求&#xff0c;因此&#xff0c;企业需要更加全面和强大的方法来进行数据分析和展示。此时&#xff0c;BI&#xff08;全称Business …

css蓝桥杯--电影院排座位

目录 一、介绍二、准备三、⽬标四、代码五、知识点六、完成 一、介绍 随着⼈们⽣活⽔平的⽇益提升&#xff0c;电影院成为了越来越多的⼈休闲娱乐&#xff0c;周末放松的好去处。各个城市的电影院数量也随着市场的需求逐年攀升。近⽇&#xff0c;⼜有⼀个电影院正在做着开张前…

chatgpt赋能python:Python强制关闭程序的解决方案

Python 强制关闭程序的解决方案 在Python开发过程中&#xff0c;难免会遇到程序卡死&#xff0c;无响应等问题&#xff0c;这时候如果无法正常退出程序&#xff0c;就需要进行强制关闭。本篇文章将介绍Python强制关闭程序的几种解决方案。 方法一: 使用系统命令 在Linux或Ma…