当前位置: 首页 > news >正文

Tranformer分布式特辑

随着大模型的发展,如何进行分布式训练也成了每位开发者必备的技能。

1. 单机训练

  • CPU Offloading
  • Gradient Checkpointing
    • 正向传播时,不存储当前节点的中间结果,在反向传播时重新计算,从而起到降低显存占用的作用
  • Low Precision Data Types
  • Memory Efficient Optimizers

2. 分布式

数据并行(DP)和模型并行(MP)

分布式通信基础:

  • Broadcast: 把一个节点自身的数据广播到其他节点上
  • Scatter:数据进行切片再分发给集群内所有的节点
  • Gather: 把多个节点的数据收集到一个节点上
  • AllGather:多个节点的数据收集到一个主节点上(Gather),再把收集到的数据分发到其他节点上(broadcast)
  • Reduce:把多个节点的数据规约运算到一个主节点上
  • ReduceScatter:所有节点上都按维度执行相同的Reduce规约运算,再将结果发散到集群所有节点上
  • AllReduce: 多个节点的数据规约运算(Reducer),再把结果分发到其他节点上(broadcast)
    在这里插入图片描述

类型基础:
在这里插入图片描述

在这里插入图片描述

3. FullyShardedDataParallel (FSDP)

  • https://huggingface.co/docs/transformers/main/en/fsdp

4. ZeRO

zero的一些分布式设置

5. Deepspeed

在这里插入图片描述

a. Stage 1 : Shards optimizer states across data parallel workers/GPUs. 优化器状态切分 (ZeRO stage 1)

b. Stage 2 : Shards optimizer states + gradients across data parallel workers/GPUs. +梯度切分 (ZeRO stage 2)

c. Stage 3: Shards optimizer states + gradients + model parameters across data parallel workers/GPUs. + 参数切分 (ZeRO stage 3)

d. Optimizer Offload: Offloads the gradients + optimizer states to CPU/Disk building on top of ZERO Stage 2

e. Param Offload: Offloads the model parameters to CPU/Disk building on top of ZERO Stage 3
请添加图片描述
其中多数情况下,
速度对比:ZeRO-0> ZeRO-1> ZeRO-2> ZeRO-2+offload> ZeRO-3> ZeRO-3+offloads
显存对比:ZeRO-0 <ZeRO-1< ZeRO-2< ZeRO-2+offload< ZeRO-3< ZeRO-3+offloads

因此,选择时,从FSDP开始,如果显存不足,则依次尝试ZeRO-2,ZeRO-2+offload,ZeRO-3,ZeRO-3+offload_optimizer, ZeRO-3+offload_optimizer+offload_param. 其中offload_optimizer: 是为减少GPU显存,将优化器状态加载到CPU。ZeRO-2仅用于训练,推理时不需要优化器和梯度。ZeRO-3也可用于推断,模型分布加载到多个GPU。

  • ZeRO-0:禁用所有分片,此时将DeepSpeed视为DDP使用 (stage默认值:0)
"zero_optimization": {"stage": 0}
  • ZeRO-1:ZeRO第一阶段的优化,将优化器状态进行切分。
"zero_optimization": {"stage": 1}
  • ZeRO2
"zero_optimization": {"stage": 2,"allgather_partitions": true,"allgather_bucket_size": 3e8,"overlap_comm": true,"reduce_scatter": true,"reduce_bucket_size": 3e8,"contiguous_gradients": true}
  • ZeRO3
"zero_optimization": {"stage": 3,"offload_optimizer": {"device": "cpu","pin_memory": true},"offload_param": {"device": "cpu","pin_memory": true},"overlap_comm": true,"contiguous_gradients": true,"sub_group_size": 1e9,"reduce_bucket_size": 1e6,"stage3_prefetch_bucket_size": 4e6,"stage3_param_persistence_threshold": 1e4,"stage3_max_live_parameters": 1e9,"stage3_max_reuse_distance": 1e9,"stage3_gather_16bit_weights_on_model_save": true},

6. Megatron

  • https://huggingface.co/docs/transformers/main/en/perf_train_gpu_many
  • 下图来自bloom
    请添加图片描述

7. Megatron-deepspeed

  • https://github.com/bigscience-workshop/Megatron-DeepSpeed

Reference

  • https://pytorch.org/docs/stable/distributed.html
  • accelerate
  • https://www.deepspeed.ai/getting-started/
  • https://wandb.ai/byyoung3/ml-news/reports/A-Guide-to-DeepSpeed-Zero-With-the-HuggingFace-Trainer–Vmlldzo2ODkwMDc4
  • https://github.com/huggingface/blog/blob/main/accelerate-deepspeed.md
  • DeepSpeed之ZeRO系列:将显存优化进行到底 - basicv8vc的文章 - 知乎
  • 从啥也不会到DeepSpeed————一篇大模型分布式训练的学习过程总结 - elihe的文章 - 知乎
  • DDP系列第二篇:实现原理与源代码解析 - 996黄金一代的文章 - 知乎
  • 关于Deepspeed的一些总结与心得 - 白板笔的文章 - 知乎
  • deepspeed入门教程 - JOYWIN的文章 - 知乎
  • deepspeed多机多卡训练踏过的坑 - 100110的文章 - 知乎
  • https://www.zhangzhenhu.com/deepspeed/index.html
  • https://github.com/hpcaitech/ColossalAI
  • 模型并行训练:为什么要用Megatron,DeepSpeed不够用吗? - 流逝的文章 - 知乎
  • 如何判断候选人有没有千卡GPU集群的训练经验? - 你的真实姓名的回答 - 知乎
  • https://www.determined.ai/blog/tp
  • https://imbue.com/research/70b-infrastructure/
http://www.lryc.cn/news/435826.html

相关文章:

  • 【Moveit2官方教程】使用 MoveIt Task Constructor (MTC) 框架来定义和执行一个机器人任务
  • 使用docker配置wordpress
  • JVM字节码
  • python访问mysql
  • Java工具插件
  • Class3——Esp32|Thonny——网络连接主机-wifi连接(源代码带教程)
  • 特效【生日视频制作】小车汽车黄金色版悍马车身AE模板修改文字软件生成器教程特效素材【AE模板】
  • 如何利用Java进行快速的足球大小球及亚盘数据处理与分析
  • 代码随想录打卡Day29
  • 图分类!!!
  • 高防IP是如何防御攻击
  • Kubernetes 系列 | k8s入门运维
  • yolov8+deepsort+botsort+bytetrack车辆检测和测速系统
  • 基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现
  • C++笔记---指针常量和常量指针
  • Python习题 177:设计银行账户类并实现存取款功能
  • IPhone 16:它的 “苹果智能 “包括哪些内容?
  • 【中国国际航空-注册/登录安全分析报告】
  • 【ArcGIS】栅格计算器原理及案例介绍
  • LOOKUP函数和VLOOKUP函数知识讲解与案例演示
  • Java技术深度探索:高并发场景下的线程安全与性能优化
  • Vulnhub-RickdiculouslyEasy靶场(9个flag)
  • Android Studio Menu制作
  • 【mybatis】使用模糊查询时报错:Encountered unexpected token: “?“ “?“
  • 【Linux】文件权限与类型全解:你的文件安全指南
  • 解析DNS查询报文,探索DNS工作原理
  • Unity让摄像机跟随物体的方法(不借助父子关系)
  • misc音频隐写
  • 如何启动网络安全计划:首先要做的事情
  • Java零基础-三维数组详解!