Colossal AI 并行技术

2023-10-27

简介

随着深度学习的发展,对并行训练的需求越来越大。这是因为模型和数据集越来越大,如果我们坚持使用单 GPU 训练,训练过程的等待将会成为一场噩梦。在本节中,我们将对现有的并行训练方法进行简要介绍。如果您想对这篇文章进行补充,欢迎在GitHub论坛上进行讨论。

数据并行

数据并行是最常见的并行形式,因为它很简单。在数据并行训练中,数据集被分割成几个碎片,每个碎片被分配到一个设备上。这相当于沿批次维度训练过程进行并行化。每个设备将持有一个完整的模型副本,并在分配的数据集碎片上进行训练。在反向传播之后,模型的梯度将被全部减少,以便在不同设备上的模型参数能够保持同步。

数据并行

模型并行

在数据并行训练中,一个明显的特点是每个 GPU 持有整个模型权重的副本。这就带来了冗余问题。另一种并行模式是模型并行,即模型被分割并分布在一个设备阵列上。通常有两种类型的并行:张量并行和流水线并行。张量并行是在一个操作中进行并行计算,如矩阵-矩阵乘法。流水线并行是在各层之间进行并行计算。因此,从另一个角度来看,张量并行可以被看作是层内并行,流水线并行可以被看作是层间并行。

张量并行

张量并行训练是将一个张量沿特定维度分成 N 块,每个设备只持有整个张量的 1/N,同时不影响计算图的正确性。这需要额外的通信来确保结果的正确性。

以一般的矩阵乘法为例,假设我们有 C = AB。我们可以将B沿着列分割成 [B0 B1 B2 ... Bn],每个设备持有一列。然后我们将 A 与每个设备上 B 中的每一列相乘,我们将得到 [AB0 AB1 AB2 ... ABn] 。此刻,每个设备仍然持有一部分的结果,例如,设备(rank=0)持有 AB0。为了确保结果的正确性,我们需要收集全部的结果,并沿列维串联张量。通过这种方式,我们能够将张量分布在设备上,同时确保计算流程保持正确。

张量并行

在 Colossal-AI 中,我们提供了一系列的张量并行方法,即 1D、2D、2.5D 和 3D 张量并行。我们将在高级教程中详细讨论它们。

相关文章:

流水线并行

流水线并行一般来说很容易理解。请您回忆一下您的计算机结构课程,这确实存在于 CPU 设计中。

流水线并行

流水线并行的核心思想是,模型按层分割成若干块,每块都交给一个设备。在前向传递过程中,每个设备将中间的激活传递给下一个阶段。在后向传递过程中,每个设备将输入张量的梯度传回给前一个流水线阶段。这允许设备同时进行计算,并增加了训练的吞吐量。流水线并行训练的一个缺点是,会有一些设备参与计算冒泡时间,导致计算资源的浪费。

Source: GPipe

相关文章:

优化器相关的并行

另一种并行方法和优化器相关,目前这种并行最流行的方法是 ZeRO,即零冗余优化器。 ZeRO 在三个层面上工作,以消除内存冗余(ZeRO需要进行fp16训练)。

  • Level 1: 优化器状态在各进程中被划分。
  • Level 2: 用于更新模型权重的32位梯度也被划分,因此每个进程只存储与其优化器状态划分相对应的梯度。
  • Level 3: 16位模型参数在各进程中被划分。

相关文章:

异构系统的并行

上述方法通常需要大量的 GPU 来训练一个大型模型。然而,人们常常忽略的是,与 GPU 相比,CPU 的内存要大得多。在一个典型的服务器上,CPU 可以轻松拥有几百GB的内存,而每个 GPU 通常只有16或32GB的内存。这促使人们思考为什么 CPU 内存没有被用于分布式训练。

最近的进展是依靠 CPU 甚至是 NVMe 磁盘来训练大型模型。主要的想法是,在不使用张量时,将其卸载回 CPU 内存或 NVMe 磁盘。通过使用异构系统架构,有可能在一台机器上容纳一个巨大的模型。

异构系统

相关文章:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Colossal AI 并行技术 的相关文章

随机推荐

  • 2014年2月21日星期五(DEMO7-6战区漫步)

    这是本章最后一个例子 与上个例子不同的是 1 加载的物体是2个 2 用了欧拉相机 视野120度 这个DEMO是个综合 应该没有新的函数了 稍微简单些 首先设定个宇宙空间 以及 各物体参数 define UNIVERSE RADIUS 400
  • 集成 Redis & 异步任务-SpringBoot 2.7 .2实战基础

    学SpringBoot 2 7 2实战基础 09 集成 Redis 异步任务 1 集成Redis docker 安装 MySQL 和 Redis 一文已介绍如何在 Docker 中安装 Redis 本文就看看 SpringBoot 如何整合
  • warning: #1295-D: Deprecated declaration lcd_init - give arg types

    将void lcd init 改为void lcd init void 即可
  • FFMPEG视音频编解码学习笔记

    文章转载自 http www jianshu com p 5c7bec29fdbd 一直对音视频这块比较感兴趣 但是一直不知道从何下手 终于找到了比较好的资料 希望通过接下来的时间好好研究一下FFMPEG相关的知识 这里感谢一下雷霄骅大神
  • 2022年软件测试面试题分享

    一 上来必然是自我介绍 自我介绍是任何一个面试过程中必不可少的环节 并且可以说是最重要的环节 因为每个面试官都需要用最短的时间去了解你这个人 以前干过什么 有过几年经验 做过哪些项目 可以说 通过一个简短的自我介绍 面试官心里已经有50 的
  • UE4状态机

    1 准备一套带动作的模型 并导入UE4 2 新建一个动画蓝图 右键 gt Animation gt AnimationBlueprint 选择继承AnimationInstance 并选择相应的骨骼 命名HeroAnimation 3 双击
  • 【网络编程】【UDP】UDP协议介绍

    一 UDP介绍 UDP和TCP相比是截然不同的 是一个简单的传输协议 全称是用户数据包协议 User Datagram Protocol 是一个无连接协议 UDP不保证UDP数据报会到达其最终目的地 不保证各个数据报的先后顺序跨网络后保持不
  • 操作复杂对象结构——访问者模式(四)

    26 4 访问者模式与组合模式联用 在访问者模式中 包含一个用于存储元素对象集合的对象结构 我们通常可以使用迭代器来遍历对象结构 同时具体元素之间可以存在整体与部分关系 有些元素作为容器对象 有些元素作为成员对象 可以使用组合模式来组织元素
  • Fortify自定义规则笔记(一)

    一 Fortify SCA 自定义规则介绍 Fortify是一款强大的静态代码扫描分析工具 其发现代码漏洞缺陷的能力十分强悍 主要是将代码经过编译 依托于其强大的内置规则库来发现漏洞的 其次fortify SCA 团队在开发此商业工具时 也
  • 使用el-dialog组件嵌套,导致页面整体出现遮罩层无法操作,页面多出<div class=‘v-modal‘ tabindex=‘0‘ style=‘z-index:2001‘></div>标签

    样例 解决 方法一 给嵌套dialog添加属性 append to body值为 true 方法二 如果不需要遮罩层可以采用此方法
  • PackageNotFoundError: Package not found at ‘*.doc’

    我通过python docx读取一个docx文件 路径确认无误的情况下 还是报错了 上代码 from docx import Document path E Python project pro1 fafa docx doc Documen
  • SprigBoot--Redis之 @Cacheable总结

    Cacheable总结 Redis的作用很多 缓存是其中之一 作为内存数据库 效率不言而喻 热点 高频搜索词汇基本都要进行缓存 Java使用redis是一件麻烦的事情 需要使用客户端API去操作 如Jedis lettuce Spring对
  • Java实现redis缓存效果变量过期

    目录 1 实现 2 测试 3 接口 1 实现 redis中的Expire命令用于设置 key 的过期时间 key 过期后将不再可用 不过有些变量我们不需要设置到redis中 只要存到本地就可以了 也需要过期时间 也可以同样方法定义一个全局变
  • 阿里云短信验证码实战

    一 创建阿里云短信权限用户 1 登陆阿里云之后我们点击头像 接着点击AccessKey 2 选择开始使用子用户 3 我们先要创建一个用户组 4 依次点击新建的用户组 授权管理 给用户组授权 开通短信验证码服务 5 接着我们新建一个用户 具体
  • 需要注意字节序的大端(big endian)和小端(little endian)的几种情景

    大端 big endian 在内存中 按照从最低有效字节到最高有效字节的顺序存储对象 即数据的高字节 保存在内存的低地址中 而数据的低字节 保存在内存的高地址中 小端 little endian 在内存中 按照从最高有效字节到最低有效字节的
  • secure-CRT问题解答

    secureCRT secureCRT可以作为windows下连接远程linux服务器的工具 注意 ssh2是加密的连接 ssh服务监听的是22端口 Ssh secure shell 到目前为止共有两个不兼容的版本 ssh1和ssh2 Ss
  • 大厂经典Linux面试题整理汇总

    一 Linux 系统管理类 1 什么是Linux Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和Unix的多用户 多任务 支持多线程和多CPU的操作系统 它能运行主要的Unix工具软件 应用程序和网络协议 它
  • Vue技术 Object.defineProperty

    Object defineProperty 是JavaScript中的一个内置方法 用于定义或修改对象的属性 它接受三个参数 对象 属性名 以及一个属性描述符对象 属性描述符对象有两种形式 数据描述符和访问描述符 数据描述符用于定义普通属性
  • 彻底解决 163邮箱转发邮件提示报错554 DT:SPM smtp12

    原来还好好的 不知道为啥今天早上在群发邮件的时候 显示失败 出现的错误是下图 原来这时因为网易将我发的邮件当成了垃圾邮件 这时候你只要在发邮件的时候抄送上自己 就再也不会报这个错误了
  • Colossal AI 并行技术

    简介 随着深度学习的发展 对并行训练的需求越来越大 这是因为模型和数据集越来越大 如果我们坚持使用单 GPU 训练 训练过程的等待将会成为一场噩梦 在本节中 我们将对现有的并行训练方法进行简要介绍 如果您想对这篇文章进行补充 欢迎在GitH