大规模模型训练tricks集锦

35ebf8221887e1156561cabfb9661592.png

文 | Connolly@知乎

大规模模型训练其实就是在和计算、存储和通信玩的过程,所以我列一下跟这些相关的文章。

1. 大规模模型并行策略

先来介绍一下几种经典的并行范式,以及他们对应的经典文章

1.1 数据并行(Data parallelism)

不同设备执行相同模型,不同数据。

dfbf44c487214504eb9124e025d65abc.png
▲数据并行

这个比较简单,贴一篇PyTorch DDP:PyTorch Distributed: Experiences on Accelerating Data Parallel Training

1.2 模型并行(Model Parallelism or Tensor Parallelism)

不同设备执行相同数据,模型不同部分,图为行切分模型并行的一个例子。

ad1bca82db2e047620d268452ea03ed9.png
▲模型并行

代表性工作:

  • Megatron-LM: Efficient Large-Scale Language Model Training on GPU Clusters

  • Mesh-Tensorflow:  Mesh-TensorFlow: Deep Learning for Supercomputers

1.2.1 高维模型并行

对参数矩阵进行二维以上切分的方法,目前尤洋的潞晨科技主推的夸父分布式框架在做这个。

  • 夸父:Colossal-AI: A Unified Deep Learning System For Large-Scale Parallel Training

里面实现了2D,2.5D,3D并行

1.3 流水线并行(Pipeline parallelism)

以前也叫层间模型并行(inter-layer parallelism)。流水线并行分阶段(stage)运行模型,不同阶段之间可以流水化执行。

827d34cf4ce8b73bfadad16abe5a6d9a.png

1.3.1 PipeDream一族

47247ee7758c75ec3f90c754d10359d5.png
▲PipeDream 1F1B异步流水线

微软msr-fiddle团队提出的。不要在谷歌上搜PipeDream...,到github上搜。

PipeDream一族流水线是异步流水线,因为用的是异步更新(第N+m次的前向传播利用的是第N次更新的参数),所以可能存在一定的收敛性问题。但是实际应用上业界还没有发现大问题。

  • PipeDream: Fast and Efficient Pipeline Parallel DNN Training

  • PipeDream-2BW: Memory-Efficient Pipeline-Parallel DNN Training

  • HetPipe: Enabling Large DNN Training on (Whimpy) Heterogeneous GPU Clusters through Integration of Pipelined Model Parallelism and Data Parallelism

1.3.2 GPipe一族

d38c41a20e6224671acf30c408d6e65b.pngGpipe和DAPPLE

Google最早提出的同步流水线,每一个minibatch计算完后进行同步后再计算下一个minibatch。

  • GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism

  • 阿里的DAPPLE,目前业界最流行的流水线,Megatron的PipeDream-1F1B其实跟这个本质上是一个东西:  DAPPLE: A Pipelined Data Parallel Approach for Training Large Models

  • 双向化的GPipe,个人看好的一种内存计算折中方案:Chimera: efficiently training large-scale neural networks with bidirectional pipelines

1.4 重计算(Recomputation or Checkpointing)

华为把他列到了并行策略里,所以在这也提一提。

重计算将前向计算的激活值丢弃,在后向计算时再重新进行计算,节省了巨量的激活值开销。

pytorch的话用torch.utils.checkpoint就可以实现,很方便。

原始论文:Algorithm 799: Revolve: An implementation of checkpointing for the reverse or adjoint mode of computational differentiation

陈天奇最早把他带到了机器学习里:Training Deep Nets with Sublinear Memory Cost

1.5 零冗余优化器 (Zero REdundancy Optimizer)

很多公司把他也当做一种并行的策略(sharding),所以我也列在这里。

大名鼎鼎的ZeRO,来自于微软的DeepSpeed团队。在执行的逻辑上是数据并行,但是同时可以达到模型并行的显存优化效果。

  • ZeRO: memory optimizations toward training trillion parameter models

  • Meta(原Facebook)的FSDP,不同名字而已:[Fully Sharded Data Parallel: faster AI training with fewer GPUs][1] (混进来一篇不是paper的东东)

1.6 专家并行

现在为了扩大模型规模,很多人都在使用的方法

2ab29769b2627d56a9c3149985d46564.png

  • MoE Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer

  • 谷歌 GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding

1.7 其他并行方法

几种针对Transformer模型训练中数据sequence_length维度的并行方法

  • 谷歌的 TeraPipe: Token-Level Pipeline Parallelism for Training Large-Scale Language Models,本质上是一种流水线

  • 新加坡国立(夸父)的 Sequence Parallelism: Making 4D Parallelism Possible

2. 显存优化技术

2.1 重计算

1.4 提到过了,不做赘述。

2.2 Offload

拿通信换显存的一种方法,简单来说就是让模型参数、激活值等在CPU内存和GPU显存之间左右横跳。

  • ZeRO-Offload: Democratizing Billion-Scale Model Training

  • ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning

2.3 优化器

为分布式训练设计的优化器

  • 尤洋提出的用于大批量卷积神经网络训练的自适应优化器LARS: Layer-wise Adaptive Moments optimizer for Batch training

  • 还是尤洋提出的用于大批量 BERT 训练的新型优化器 LAMB:Large Batch Optimization for Deep Learning: Training BERT in 76 minutes

节省显存的优化器

  • Adafactor: Adaptive Learning Rates with Sublinear Memory Cost

低精度存储优化器状态的优化器

  • DeepSpeed: 1-bit Adam: Communication Efficient Large-Scale Training with Adam's Convergence Speed

  • DeepSpeed: 1-bit LAMB: Communication Efficient Large-Scale Large-Batch Training with LAMB's Convergence Speed

2.4 内核优化

以这个为例,Self-attention Does Not Need  Memory

这个我研究的时候写了个实现。

[Connolly:Self Attention 固定激活值显存分析与优化及PyTorch实现][2]

目前因为大模型都是基于Transformer的,我认为Transformer核的优化是比较关键的:主要是可以把softmax和layernorm的激活值给去掉。可以参考DeepSpeed里[Transformer核的实现][3]。

3. 通信

这两篇博客可以涵盖大部分深度学习中的通信问题了。

[ZOMI酱:分布式训练硬核技术——通讯原语][4]

[兰瑞Frank:腾讯机智团队分享--AllReduce算法的前世今生][5]

3.1 通信方式

  • 参数服务器:经典的主从节点模式,例子有PyTorch DP,基于PS的深度学习是李牧提出的,对就是这个人->[跟李沐学AI的个人空间_哔哩哔哩_Bilibili][6] 。现在多用于大规模的推荐系统。如果主节点弄得多的话,它的性能甚至可以超过Allreduce,比如在BytePS里提到的:A Unified Architecture for Accelerating Distributed DNN Training in Heterogeneous GPU/CPU Clusters 。

cd2d367b8b83ddea8552645d7af5f9b1.png

  • 无参数服务器:采用集合通信的方法来实现模型参数、梯度等信息的同步,例子有PyTorch DDP,[horovod][7],DeepSpeed等等,目前比较流行。

3.2 通信优化

  • 环状路由,采用ring的方式来进行通信,比原始方法的通信量降低N倍(N为设备数量),最早应该是[百度提出][8]用来搞深度学习的,现在PyTorch DDP,horovod,DeepSpeed等都有相应实现。

5be7887397ca661a016ff735a24d03ad.png

4. 流行大模型

时间,名字,组织,大小,论文或报告

  • 2021.12.9 GLaM Google Brain 1.162T, [blog][9]

  • 2021.12.8 Gopher Google DeepMind 280 B, [deepmind][10]

  • 2021.12.8 Wenxin Baidu and PengCheng Lab 260 B, [arxiv][11]

  • 2021.10.25 M6-10T Alibaba 10T, [arxiv][12]

  • 2021.9.28 Yuan 1.0 Inspur 245.7 B, [arxiv][13]

  • 2021.8 Jurassic-1 AI21 178B, [tech paper][14]

  • 2021.5 Wudao 2.0 BAAI 1.75 T, ?

  • 2021.4.26 Pangu-alpha Huawei and PengCheng Lab 207 B, [arxiv][15]

  • 2020.5 GPT3 Open-AI 175 B, [arxiv][16]

5. 分布式框架论文(字母序)

  • Colossal-AI,最新的一批框架,主打多维模型并行:Colossal-AI: A Unified Deep Learning System For Large-Scale Parallel Training (2021)

  • DeepSpeed,跟英伟达玩得比较近,大家都在学:Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (2020)

  • Horovod,比较经典,多人使用的Tensorflow分布式计算框架:Horovod: fast and easy distributed deep learning in TensorFlow。(2018)

  • Megatron-LM,手动的DP+MP+PP性能baseline:Efficient Large-Scale Language Model Training on GPU Clusters (2021)

  • OneFlow,介绍了SBP和Actor,现在业界都在学:OneFlow: Redesign the Distributed Deep Learning Framework from Scratch (2021)

  • PaddlePaddle,异构现在做的挺好:End-to-end Adaptive Distributed Training on PaddlePaddle (2021)

6. 自动并行

更新一波,我搜集的一些自动并行策略搜索算法,对部分内容进行了分析,欢迎大家star~

[https://github.com/ConnollyLeon/awesome-Auto-Parallelismgithub.com/ConnollyLeon/awesome-Auto-Parallelism] [17]

6.1 Jia Zhihao

据我所知...贾志豪开创了自动并行的先河,他提出的FlexFlow现在和Facebook的推荐模型DLRM玩的比较近。

  • OptCNN,用基于图搜索的动态规划来寻找CNN的自动并行策略: Exploring Hidden Dimensions in Parallelizing Convolutional Neural Networks (2018)。以OptCNN为起点,也延伸出了ToFu,TensorOpt等等的工作,老师木经常提。

  • FlexFlow,用蒙特卡洛马尔科夫链(MCMC)来搜索数据并行和模型并行策略:Beyond Data and Model Parallelism for Deep Neural Networks (2018)

6.2 Google

6.2.1 GSPMD

谷歌提出的GSPMD,现在被多个框架包括Tensorflow,MindSpore,OneFlow,PaddlePaddle借鉴和修改后使用。

GSPMD是一种半自动并行,用户手动配置部分的并行操作,然后他会对并行策略进行传播得到完成的并行策略。

  • GSPMD: General and Scalable Parallelization for ML Computation Graphs (2021)

6.2.2 Automap

Google DeepMind提出的,利用蒙特卡洛树和交互网络进行策略的预测,生成策略的效果可逼近Megatron-LM:Automap: Towards Ergonomic Automated Parallelism for ML Models (2021)

6.2.3 REINFORCE

Google Brain做的,最早利用强化学习来做自动并行的方法,做的是层间模型并行:

Device Placement Optimization with Reinforcement Learning (2017)

6.3 msr-fiddle

又是PipeDream的那帮人,

  • 利用动态规划和Profile技术来搜索数据并行及流水线并行策略:PipeDream: Fast and Efficient Pipeline Parallel DNN Training (2018)

  • Dnn-partition: 利用动态规划和整数规划来搜索数据并行和模型并行的策略:Efficient Algorithms for Device Placement of DNN Graph Operators

  • PipeDream作者的师弟(现在还不在fiddle),利用网格搜索方法来生成最优的并行策略:DistIR: An Intermediate Representation and Simulator for Efficient Neural Network Distribution (2021)

  • 利用两级动态规划方法来做数据并行,模型并行和流水线并行策略的搜索 Piper: Multidimensional Planner for DNN Parallelization (2021)

6.4 MindSpore

MindSpore现在只能处理数据并行和模型并行的自动策略搜索,双递归算法的速度远比动态规划要快。

  • OptCNN的进阶版,可以处理非线性模型:TensorOpt: Exploring the Tradeoffs in Distributed DNN Training with Auto-Parallelism (2020)

  • 双递归算法 Efficient and Systematic Partitioning of Large and Deep Neural Networks for Parallelization (2020)

6.5 阿里

  • 利用强化学习的方法来解决策略划分问题,Auto-MAP: A DQN Framework for Exploring Distributed Execution Plans for DNN Workloads (2020)

各大公司现在都在暗搓搓的做自动并行,今年应该能看到百花齐放,部署到大模型上的场景:)

Alpa出来以后,引发了一大波MLSys的热点,卷起来了

7202a0b5f21a8a992bbd5b69ee8d5a9f.png后台回复关键词【入群

加入卖萌屋NLP、CV与搜推广与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

de6cafb42de267883231e3efd51d2931.gif e5066baa8214b7ce7e5c70159c03353a.png

[1]https://engineering.fb.com/2021/07/15/open-source/fsdp/

[2]https://zhuanlan.zhihu.com/p/445016136

[3]https://www.deepspeed.ai/news/2020/05/27/fastest-bert-training.html

[4]https://zhuanlan.zhihu.com/p/465967735

[5]https://zhuanlan.zhihu.com/p/79030485

[6]https://space.bilibili.com/1567748478?from=search&seid=6189094745462877262&spm_id_from=333.337.0.0

[7]https://arxiv.org/pdf/1802.05799

[8]https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/

[9]https://ai.googleblog.com/2021/12/more-efficient-in-context-learnning-with.html

[10]https://storage.googleapis.com/deepmind-media/research/language-research/Training%20Gopher.pdf

[11]https://arxiv.org/pdf/2112.12731.pdf

[12]https://arxiv.org/pdf/2110.03888.pdf

[13]https://arxiv.org/pdf/2110.04725.pdf

[14]https://uploads-ssl.webflow.com/60fd4503684b466578c0d307/61138924626a6981ee09caf6_jurassic_tech_paper.pdf

[15]https://arxiv.org/pdf/2104.12369.pdf

[16]https://arxiv.org/pdf/2005.14165.pdf

[17]https://github.com/ConnollyLeon/awesome-Auto-Parallelism

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

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

相关文章

Spring Cloud源码分析(二)Ribbon

断断续续看Ribbon的源码差不多也有7-8天了,总算告一段落。本文记录了这些天对源码的阅读过程与一些分析理解,如有不对还请指出。 友情提示:本文较长,请选择一个较为舒适的姿势来阅读 在之前介绍使用Ribbon进行服务消费的时候&…

LeetCode 1340. 跳跃游戏 V(DP)

1. 题目 给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到&#xff1a; i x &#xff0c;其中 i x < arr.length 且 0 < x < d 。i - x &#xff0c;其中 i - x > 0 且 0 < x < d 。 除此以外&#xff0c;你从下标 i 跳到下标 j 需要满足…

论文浅尝 | TKGR with Low-rank and Model-agnostic Representations

笔记整理&#xff1a;李行&#xff0c;天津大学硕士链接&#xff1a;https://arxiv.org/pdf/2204.04783v1.pdf动机现有MKGC方法中的知识转移效率低下&#xff0c;因为它们分别对每个KG进行编码并通过强制对齐的实体共享相同的嵌入来转移知识。亮点本文的亮点主要包括&#xff1…

ICLR’22 最佳脑洞奖提名:《GPT 如何进行布朗运动?》

文 | 付瑶编 | 小轶今天给大家介绍一篇斯坦福大学的 ICLR22 论文。该文在 OpenReview 中获得了8/8/8/8的高分。在写这篇推送之前&#xff0c;小编身边有多位朋友都私下向我推荐过这篇文章。虽然这几位朋友所研究的任务并不相同&#xff0c;却都认为这篇文章“极具启发性&#x…

条件随机场(Conditional Random Field,CRF)

文章目录1. 概率无向图模型1.1 模型定义1.2 概率无向图模型的因子分解2. 条件随机场的定义与形成2.1 条件随机场的定义2.2 条件随机场的参数化形式例题2.3 条件随机场的简化形式2.4 条件随机场的矩阵形式例题3. 条件随机场的概率计算问题3.1 前向-后向算法3.2 概率计算3.3 期望…

Spring Cloud构建微服务架构(七)消息总线

先回顾一下&#xff0c;在之前的Spring Cloud Config的介绍中&#xff0c;我们还留了一个悬念&#xff1a;如何实现对配置信息的实时更新。虽然&#xff0c;我们已经能够通过/refresh接口和Git仓库的Web Hook来实现Git仓库中的内容修改触发应用程序的属性更新。但是&#xff0c…

2022中国最有钱大学排名出炉!北大只能排第三

文 | 大勇源 | 抓码计算机考研4月21日&#xff0c;教育部直属高校、工信部直属高校陆续在其信息公开网公布了2022年部门预算&#xff0c;高绩对各高校2022年预算数据进行了整理&#xff0c;从中可以一窥国内重点高校的经费情况。中国有各类型、各层次高校2000余所&#xff0c;就…

图谱实战 | 百度基于异构互联知识图谱的多模内容创作技术

分享嘉宾&#xff1a;卞东海 百度 高级研发工程师编辑整理&#xff1a;蒋郭鑫 河海大学出品平台&#xff1a;DataFunTalk导读&#xff1a;由于大数据时代的发展&#xff0c;知识呈指数级增长&#xff0c;而知识图谱技术又在近年来逐步火热&#xff0c;因此诞生了利用知识图谱技…

Spring Cloud构建微服务架构(四)分布式配置中心

Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它实现了对服务端和客户端对Spring Environment和PropertySource抽象的映射&#xff0c;所以它除了适用于Spring构建的应用程序&#xff0c;也…

华尔街投资人因股价暴跌起诉阿里巴巴,马云为起诉对象?

文 | 曹小灵知乎www.zhihu.com/question/530087383/answer/2458458738前几天发生了一个比较有意思的事情&#xff0c;直接上图&#xff1a;这新闻把我看乐了。这中国科技公司在美国股价下跌的原因&#xff0c;美国人自己不清楚么。2020年就开始闹&#xff0c;2021年落地的《外国…

Spring Cloud源码分析(一)Eureka

看过之前文章的朋友们&#xff0c;相信已经对Eureka的运行机制已经有了一定的了解。为了更深入的理解它的运作和配置&#xff0c;下面我们结合源码来分别看看服务端和客户端的通信行为是如何实现的。另外写这篇文章&#xff0c;还有一个目的&#xff0c;还是希望鼓励大家能够学…

手把手教你写出令人窒息的烂代码

源 | 机器之心在 GitHub 上有一个新项目&#xff0c;它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写。这些准则将指导你写出最亮眼的烂代码。为了保持与原 GitHub 项目一致的风格&#xff0c;下文没有进行转换。读者们可以以相反的角度来理解所有观点&#x…

LeetCode 85. 最大矩形(DP/单调递增栈,难)

文章目录1. 题目2. 解题2.1 DP2.2 单调递增栈1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例: 输入: [["1","0","1","0","0"],["1",&quo…

图谱实战 | 故障知识图谱技术落地探索:装备制造故障知识图谱构建及其应用案例剖析总结...

故障知识图谱是当前面向装备制造领域的落地重要探索领域&#xff0c;如何通过对设备的运行状态、运行日志进行信息抽取、关系建模&#xff0c;建成可供分析应用的知识库&#xff0c;并支撑故障诊断、维修辅助等应用场景&#xff0c;具有重要意义。鉴于当前还未有系统性的开源相…

聊聊Spring Cloud版本的那些事儿

继续昨天说的计划&#xff0c;解惑一下收到比较多的问题。 有朋友问“为什么在很多文章中&#xff0c;大家引用的Spring版本名字都不一样呢&#xff1f;比如&#xff1a;Angel.SR6&#xff0c;Brixton.SR5等等&#xff0c;它们都有什么区别呢&#xff1f;”&#xff0c;今天我…

小样本学习只是一场学术界自嗨吗

文 | ALme知乎这两年看见很多人&#xff0c;包括我实习的mentor在内&#xff0c;都在批评few-shot learning&#xff0c;觉得是学术界在自high&#xff0c;思考良久&#xff0c;感觉有必要给这个领域正个名&#xff5e;(注意&#xff0c;此答案仅关注few-shot image classifica…

Spring Cloud构建微服务架构(六)高可用服务注册中心

近期因工作原因减缓了更新频率&#xff0c;同时为了把Spring Cloud中文社区搭建起来也费了不少时间&#xff0c;几乎每天都在挤牙膏般的凑时间出来做一些有意义的事。未能按原计划更新博文&#xff0c;在此对持续关注我博客的朋友们深表歉意。 之前在写Spring Cloud系列文章的…

技术动态 | 「可解释知识图谱推理」最新方法综述

转载公众号 | 专知近年来&#xff0c;以深度学习模型为基础的人工智能研究不断取得突破性进展&#xff0c;但其大多具有黑盒性&#xff0c;不 利于人类认知推理过程&#xff0c;导致高性能的复杂算法、模型及系统普遍缺乏决策的透明度和可解释性。在国 防、医疗、网络与信息安全…

ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损

文 | jxyxiangyu我们都知道&#xff0c;为了让以深度神经网络为基础的模型更快地训练&#xff0c;人们提出了单机多卡、多机多卡等分布式训练的方式&#xff0c;那么&#xff0c;在模型预测推理阶段&#xff0c;有什么方法可以加速推理呢&#xff1f;遗憾的是&#xff0c;并行/…

LeetCode 第 19 场双周赛(231 / 1120,前20.6%)

文章目录1. 比赛结果2. 题目LeetCode 5311. 将数字变成 0 的操作次数 easyLeetCode 5312. 大小为 K 且平均值大于等于阈值的子数组数目 mediumLeetCode 5313. 时钟指针的夹角 mediumLeetCode 5314. 跳跃游戏 IV hard1. 比赛结果 做出来了1, 3, 4题&#xff0c;第2题结束后12分…