大模型技术实践(五)|支持千亿参数模型训练的分布式并行框架

在上一期的大模型技术实践中,我们介绍了增加式方法、选择式方法和重新参数化式方法三种主流的参数高效微调技术(PEFT)。微调模型可以让模型更适合于我们当前的下游任务,但当模型过大或数据集规模很大时,单个加速器(比如GPU)负载和不同加速器之间的通信是值得关注的问题,这就需要关注并行技术


并行化是大规模训练中训练大型模型的关键策略,本期内容UCloud将为大家带来“加速并行框架”的技术科普和实践。在学习Accelerate、DeepSpeed、Megatron加速并行框架之前,我们先来了解一下数据并行和模型并行


01

数据并行与模型并行


1.1  数据并行

数据并行可分为DP(Data Parallelism,数据并行)、DDP(Distributed Data Parallelism,分布式数据并行)、ZeRO(Zero Redundancy Optimizer,零冗余优化器)3种方式。

其中,DP的做法是在每个设备上复制1份模型参数,在每个训练步骤中,一个小批量数据均匀地分配给所有数据并行的进程,以便每个进程在不同子集的数据样本上执行前向和反向传播,并使用跨进程的平均梯度来局部更新模型。
DP通常用参数服务器(Parameters Server)来实现,其中用作计算的GPU称为Worker,用作梯度聚合的GPU称为Server,Server要和每个Worker传输梯度,那么通信的瓶颈就在Server上。受限于通信开销大和通信负载不均的因素,DP通常用于单机多卡场景。
DDP为了克服Server的带宽制约计算效率,采用Ring-AllReduce的通信方式。在Ring-AllReduce中,所有的GPU形成1个环形通信拓扑,在1轮环形传递后,所有GPU都获得了数据的聚合结果,带宽利用率高。在Ring-AllReduce的每1轮通信中,各个GPU都与相邻GPU通信,而不依赖于单个GPU作为聚合中心,有效解决了通信负载不均的问题。DDP同时适用于单机和多机场景。
ZeRO采用的是数据并行结合张量并行的方式,后面将详细展开讲解。

1.2 模型并行

模型并行(MP,Model Parallelism)可分为流水线并行(PP,Pipeline Parallelism)和张量并行(TP,Tensor Parallesim),都是解决当GPU放不下一个模型时,而将模型拆分到不同的GPU上的方法。
 

流水线并行


8fda094d94d27027d1d309b72e7b2c8e.jpeg
如上图所示,PP将模型在Layer层面上进行水平切分,不同切分部分在不同GPU上运行,并使用微批处理(Micro-Batching,在1个Batch上再划分得到Micro-Batch)和隐藏流水线泡沫(Pipeline Bubble,GPU空转的部分)。由于水平分割和微批处理,模型功能(如权重共享和批量归一化)的实现都很困难。
 

张量并行


dc8c478539773635989499eebe01f352.jpeg
如上图所示,TP在模型的Layer内部进行切分,所有GPU计算所有层的不同部分在单个节点之外无法高效扩展,这是由于细粒度计算和昂贵的通信所致。

02

分布式框架


2.1 Megatron


2019年英伟达发布的Megatron是一个基于PyTorch的分布式训练框架,实现了一种简单高效的层内模型并行方法(TP,是切分矩阵的形式实现的),可以训练具有数十亿参数的Transformer模型。Megatron不需要新的编译器或库更改,可以通过在PyTorch中插入几个通信操作来完全实现。当然Megatron目前支持TP、PP、SP(Sequence Parallelism)和Selective Activation Recomputation,此处对TP进行讲解。
 

切分矩阵的方式


切分矩阵的方式可按行或者按列,其目的是为了当1个模型无法完整放入1个GPU时,让这个模型能塞到多个GPU中[1]。
1.对于MLP层的切分a54a76cde12adcf0bb8f50e891c30cc4.jpeg
上图中的f和g分别表示2个算子,每个算子都包含一组Forward + Backward操作,也就是前向传播和后向传播操作。具体[2]可表示为:e9a4f7fdc11423d806caba15368a3985.jpeg
左侧为输入数据X按列切开,将权重矩阵A按行切开。右侧为将输入数据X复制到2个GPU上,将权重矩阵A按列切开。当然,这里是2个GPU的例,同理可类推到多个GPU的情况。
2.对于Multi-Head Attention层的切分Multi-Head Attention,也就是多头注意力,其结构如下图所示:
5db8302c84875e60b617b083101f43f8.jpeg
其每个Head本身就是独立计算,再将结果Concat起来,就可以把每个Head的权重放到1个GPU上。当然,1个GPU上可以有多个Head。
d6b5a7ca310fe4732bdc6f55f65c3acd.jpeg
如上图所示,先把输入数据X复制到多个GPU上,此时每个Head分别在1个GPU上。对每个Head的参数矩阵Q、K、V按列切开,切分原理、算子f、算子g与MLP层切分章节中的描述一致。之后,各个GPU按照Self-Attention的计算方式得到结果,再经过权重B按行切开的线性层计算。
 

MLP层和Multi-Head Attention层的通信量


1.MLP层的通信量由上述章节可知,MLP层进行Forward和Backward操作都有一次All-Reduce操作。All-Reduce操作包括Reduce-Scatter操作和All-Gather操作,每个操作的通讯量都相等,假设这2个操作的通讯量都为φ,则进行一次All-Reduce的通讯量为2φ,MLP层的总通讯量为4φ。

2.Multi-head Attention层的通信量
7b66546c24e81f04ede422ab1ebb10bf.jpeg
由上图可知,Self-Attention层在Forward和Backward中都要做一次All-Reduce,总通讯量也是。
 

张量并行与数据并行的结合


1.MP+DP混合的结构
c7b5105b41f3c28485d79bb6bce66bf9.jpeg
由上图可知,中间每个虚线框表示一台机器,每台机器有8个GPU,合计512个GPU。同一个机器内的1个或多个GPU构成1个模型并行组,不同机器上同一个位置的GPU构成1个数据并行组,图中有8路模型并行组和64路数据并行组。
2.MP与MP+DP的通信量对比
1fbeea7c096b0987a65f846a8dba1192.jpeg
左图是MP模式,可以看到单个GPU的计算效率为100%。随着GPU个数的增加,通信量增大,GPU的计算效率有一定的下降。右图是MP+DP模式,64个GPU(可理解为64台机器,1台机器1个GPU,此时相当于DP模式)的计算效率有96%之高,是由于DP在计算梯度时,可一边继续往下做Backward,一边把梯度发送出去和DP组内其他GPU做All-Reduce。同理,当GPU个数增多,GPU的计算效率也会下降。

2.2 DeepSpeed


2020年微软发布了分布式训练框DeepSpeed和一种新型内存优化技术ZeRO-1,极大地推进了大模型训练的进程。后续,微软又陆续推出ZeRO-2、ZeRO-3技术等,ZeRO这3个阶段称为ZeRO-DP(ZeRO-Powered Data Parallelism)。另外,DeepSpeed还支持自定义混合精度训练处理,一系列基于快速CUDA扩展的优化器,ZeRO-Offload到CPU和磁盘/NVMe。DeepSpeed支持PP、DP、TP这3种范式,支持万亿参数模型的训练。
其中,ZeRO-DP用来克服数据并行性和模型并行性的限制,通过将模型状态(参数、梯度和优化器状态)在数据并行进程之间进行分片,使用动态通信调度实现在分布式设备之间共享必要的状态。ZeRO-R技术可减少剩余的显存消耗。在模型训练过程中产生的激活值(Activations)、存储中间结果的临时缓冲区、显存碎片,我们称之为剩余状态。
 

ZeRO-DP


1.ZeRO-DP的3个阶段
ZeRO-DP[3]的3个阶段,可在参数zero_optimization中设置。比如:{
    "zero_optimization": {        
        "stage": stage_number,    
    }
}
其中,stage_number可写1、2、3,当然也可以写0。ZeRO-1只对优化器状态进行分片,ZeRO-2在ZeRO-1的基础上还对梯度分片,ZeRO-3在ZeRO-2的基础上还对模型参数分片。当stage_number为0时,不做任何分片处理,此时相当于DDP。
在ZeRO-DP优化的3个阶段下,1个模型状态在各个GPU上内存消耗情况,如下图所示:d8ea6add111986ea9e3bc1f89dfe7144.jpeg
其中Ψ表示模型大小(参数数量),K表示优化器状态的内存倍增器。Nd表示数据并行度,也就是GPU的个数。1. Pos对应优化器状态分片,也就是ZeRO-1,内存减少4倍。2. Pos+g对应添加梯度分片,也就是ZeRO-2, 内存减少8倍。3. Pos+g+p对应模型参数分片,内存减少与数据并行性程度Nd线性相关。
论文中提到,使用64个GPU(Nd = 64)将导致内存减少64倍、通信量略有增加约50%。
2.ZeRO-DP的通信量
9323f6ce9bfd0b27abf4a759e4501ff8.jpeg
由上图可知,ZeRO-DP在使用Pos和Pg时不会增加额外的通信,同时可以实现高达8倍的内存减少。使用PP,除了Pos和Pg之外,ZeRO-DP最多会引入1.5倍的通信开销,同时进一步降低内存占用Nd倍。
 

ZeRO-R


1.ZeRO-R的思路将Activations Checkpoints分片到各个GPU上,并使用All-Gather操作按需重构它们,消除了模型并行中的内存冗余。对于非常大的模型,甚至可以选择将激活分区移动到CPU内存。
2.ZeRO-R的通信量分片Activations Checkpoints(记为Pa)的通信量权衡取决于模型大小、Checkpoints策略和模型并行策略。对于模型并行来说,Pa的总通信开销不到原始通信量的10%。

当模型并行与数据并行结合使用时,Pa可以用来将数据并行的通信量降低一个数量级,代价是模型并行的通信量增加了10%,并在数据并行通信成为性能瓶颈时显著提高效率。

2.3 Accelerate


Accelerate[4]由Huggingface于2021年发布,是一个适用于Pytorch用户的简单封装的库,其简化了分布式训练和混合精度训练的过程。Accelerate基于torch_xla和torch.distributed,只需要添加几行代码,使得相同的PyTorch代码可以在任何分布式配置下运行!简而言之,它使得大规模训练和推理变得简单、高效和适应性强。Accelerate 可与DeepSpeed、Megatron-LM 和FSDP(PyTorch Fully Sharded Data Parallel)等扩展一起使用。

2.4 小结


Accelerate更加稳定和易于使用,适合中小规模的训练任务。DeepSpeed和Megatron支持更大规模的模型。通过Accelerate库,可轻松在单个设备或多个设备上结合Megatron、DeepSpeed进行分布式训练。当然,Megatron、Deepspeed 也可以结合使用,比如Megatron-DeepSpeed,这是NVIDIA的Megatron-LM的DeepSpeed版本。

03

在UCloud云平台选择A800

进行Baichuan2大模型的微调实验


首先参照UCloud文档中心(https://docs.ucloud.cn),登录UCloud控制台(https://console.ucloud.cn/uhost/uhost/create)。

在UCloud云平台上创建云主机,选择显卡为A800,配置如下:ebfd4b8e6d3e0902ffb4f4e19994d2f6.jpeg
实验项目代码获取:https://github.com/hiyouga/LLaMA-Efficient-Tuning
模型下载方式:Git Clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
数据集来源于:1.https://huggingface.co/datasets/neuclir/csl/viewer/default/csl 包含多篇论文摘要、标题、关键词、学科, 可用来做标题总结,关键词提取,学科分类。2.https://huggingface.co/datasets/hugcyp/LCSTS/viewer/default/train?p=24002微博新闻缩写成标题。3.https://huggingface.co/datasets/csebuetnlp/xlsum 中文/英文 BBC新闻、摘要和标题。
本实验的微调任务是从一段文字中提取出概括性的标题。选8万条数据去训练,1000条数据作为测试集,数据样例为:[
    {
        "instruction": "为以下内容生成一个概括性的标题:\n",
        "input": "随着IT巨头们将触角逐渐伸向移动中的汽车产品,鲶鱼效应推动了“车联网”的迅速发展,领军人物苹果与谷歌率先在这场跨界之争中形成了针锋相对的格局,继手机屏幕、电视屏幕等领域之后,又展开了新一轮的“入口”抢滩战。",
        "output": "汽车联网苹果已获进展谷歌紧随其后开发",
        "source": "LCSTS"
    },
    {
        "instruction": "为以下内容生成一个概括性的标题:\n",
        "input": "调查显示,近半数俄罗斯人一年内未读过一本书。曾在苏联时期受到极度喜爱的书籍为何在今天遭遇几乎无人问津的尴尬境地,实体书店又将如何应对危机?《透视俄罗斯》记者带您一探究竟。",
        "output": "阅读形式多元化俄罗斯或将告别纸质图书时代",
        "source": "LCSTS"
    }
]
根据以下配置去执行训练(此处并未做参数调优):deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \--deepspeed ds_config.json \--stage sft \--model_name_or_path /data/text-generation-webui/models/Baichuan2-13B-Chat \--do_train True \--overwrite_cache False \--finetuning_type lora \--template baichuan2 \--dataset_dir data \--dataset summary_instruction_train \--cutoff_len 1024 \--learning_rate 1e-05 \--num_train_epochs 5.0 \--max_samples 100000 \--per_device_train_batch_size 8 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 800 \--warmup_steps 0 \--flash_attn False \--lora_rank 8 \--lora_dropout 0.1 \--lora_target W_pack \--resume_lora_training True \--output_dir saves/Baichuan2-13B-Chat/lora/2023-10-08-18-20-07 \--fp16 True \--plot_loss True
再进行测试,测试结果为:{ "predict_bleu-4": 15.863159399999999,
"predict_rouge-1": 29.348522,"predict_rouge-2": 10.655794799999999,"predict_rouge-l": 26.600239000000002,"predict_runtime": 120.571,"predict_samples_per_second": 8.294,"predict_steps_per_second": 1.037 }
上述结果中:BLEU-4是一种用于评估机器翻译结果的指标;ROUGE-1、ROUGE-2和ROUGE-L是ROUGE系统中的三个常用变体,一组用于评估文本摘要和生成任务的自动评估指标;predict_runtime是模型进行预测所花费的总运行时间,单位为秒;predict_samples_per_second是模型每秒钟处理的样本数量;predict_steps_per_second是模型每秒钟执行的步骤数量。
【参考文献】[1]《Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism》
[2] Megatron-LM:https://developer.download.nvidia.com/video/gputechconf/gtc/2020/presentations/s21496-megatron-lm-training-multi-billion-parameter-language-models-using-model-parallelism.pdf[3]《ZeRO: Memory Optimizations Toward Training Trillion Parameter Models》[4] accelerate Hugging Face:https://huggingface.co/docs/accelerate/index

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

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

相关文章

Hadoop3教程(七):MapReduce概述

文章目录 (68) MR的概述&优缺点(69)MR的核心思想MapReduce进程 (70)官方WC源码&序列化类型(71)MR的编程规范MapperReducerDriver (72)WordCount案例需…

OpenCV16-图像连通域分析

OpenCV16-图像连通域分析 1.图像连通域分析2.connectedComponents3.connectedComponentsWithStatus 1.图像连通域分析 连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域。连通域分析是指在图像中寻找彼此互相独立的连通域并将其标记出来。 4邻域与8邻域的概念&am…

梯度下降算法(Gradient Descent)

GD 梯度下降法的含义是通过当前点的梯度(偏导数)的反方向寻找到新的迭代点,并从当前点移动到新的迭代点继续寻找新的迭代点,直到找到最优解,梯度下降的目的,就是为了最小化损失函数。 1、给定待优化连续可微…

PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术

近期,2023年中国模式识别与计算机视觉大会(PRCV)在厦门成功举行。大会由中国计算机学会(CCF)、中国自动化学会(CAA)、中国图象图形学学会(CSIG)和中国人工智能学会&#…

分享一个比对图片是否一致的小工具(来源: github)

运行效果图: 官网: GitHub - codingfishman/image-diff: 一个方便的图片对比工具一个方便的图片对比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub.https://github.com/codingfishman/image-diff 优缺点: 1.采用比对各色块是…

Sqoop技术文档笔记

Sqoop是一个用于在Hadoop和关系型数据库之间传输数据的开源工具。它可以将结构化数据从关系型数据库(如MySQL、Oracle、SQL Server等)导入到Hadoop的分布式文件系统(HDFS)或hive中,并且可以将数据从HDFS、hive导出到关…

安装VSCode,提升工作效率!iPad Pro生产力进阶之路

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

【复盘】主从延迟以及 Waiting for tablemetadata lock 线上问题

背景 今晚DBA给一个大表添加索引,1000多W,正好风控系统这个时间段有查询这个表的请求,于是就出现了复制延迟。 这是正常下的延迟 可以看出基本都是是100毫秒以下。 Waiting for tablemetadata lock,并且业务跑的SQL出现锁等待…

开发者职场“生存状态”大调研报告分析 - 第四版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

1.13.C++项目:仿muduo库实现并发服务器之TcpServer模块的设计

文章目录 一、LoopThreadPool模块二、实现思想(一)管理(二)流程(三)功能设计 三、代码 一、LoopThreadPool模块 TcpServer模块: 对所有模块的整合,通过 tcpserver 模块实例化的对象&…

Linux高性能服务器编程——ch2笔记

第2章 IP 协议详解 2.1 IP服务的特点 无状态:IP通信双方不同步传输数据的状态信息。IP数据报相互独立,缺点是无法处理乱序和重复的IP数据报。上层协议如果是面向连接的协议(TCP),能够自己处理乱序和重复的报文段。IP…

【广州华锐互动】利用AR进行野外地质调查学习,培养学生实践能力

在科技发展的驱动下,AR(增强现实)技术已经在许多领域中找到了应用,包括医疗、教育、建筑和娱乐等。然而,有一个领域尚未充分利用AR技术的潜力,那就是野外地质调查。通过将AR技术引入到这个传统上需要大量人…

想找就能找!如何找回iPhone中被隐藏或主屏幕上被删除的应用程序

本文介绍了如何取消隐藏你在iPhone上隐藏的应用程序,以及如何检索你从iPhone中删除的应用程序。 如何取消隐藏隐藏的应用程序 你过去可能在iPhone上隐藏了应用程序,因为你不经常使用它们,或者你只是喜欢几个整洁的主屏幕。如果你决定将隐藏…

Write-Ahead Log(PostgreSQL 14 Internals翻译版)

日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障,RAM中的所有内容都将丢失;只有写入磁盘的数据才会被保留。要在故障后启动服务器,必须恢复数据一致性。如果磁盘本身已损坏,则必须通过备份恢复来解决相同的问题。 理论…

Web前端—盒子模型:选择器、PxCook、盒子模型、正则表达式、综合案例(产品卡片与新闻列表)

版本说明 当前版本号[20231019]。 版本修改说明20231018初版20231019补充了综合案例二新闻列表的代码及完善部分代码 目录 文章目录 版本说明目录盒子模型01-选择器结构伪类选择器基本使用:nth-child(公式)伪元素选择器 02-PxCook03-盒子模型盒子模型-组成边框线四个方向单方…

MySQL高可用架构学习

MHA(Master HA)是一款开源的由Perl语言开发的MySQL高可用架构方案。它为MySQL 主从复制架构提供了 automating master failover 功能。MHA在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的 master 节点,在…

二叉搜索树的详解及Map和Set的介绍

目录 1.二叉搜索树 1.1二叉搜索树的介绍 1.2.二叉搜索树的实现 1.2.1二叉搜索树的创建 1.2.2查找关键字 1.2.3插入 1.2.4删除 1.3二叉搜索树的性能分析 2.Map Map官方文档 2.1Map 的常用方法说明 2.2关于Map.Entry的说明,> 2.3注意事项 2.4reeMap和HashMap的区别 …

【四:httpclient的使用】

目录 1、Demo案例2、请求一个带cookies的get请求3、请求一个带cookies的post请求案例一,案例二的properties的配置 1、Demo案例 public class MyHttpClient {Testpublic void test1() throws IOException {//用来存放我们的结果String result;HttpGet get new Htt…

【每日一题】—— B. Arrays Sum (Grakn Forces 2020)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

基于java的校园论坛系统,ssm+jsp,Mysql数据库,前台用户+后台管理,完美运行,有一万多字论文

目录 演示视频 基本介绍 论文目录 功能架构 系统截图 演示视频 基本介绍 基于java的校园论坛系统,Mysql数据库,系统整体采用ssmjsp设计,前台用户后台管理,完美运行,有一万多字论文。 用户功能: 1.系统…