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.rhkb.cn/news/421811.html

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

相关文章

创建Django 项目

创建一个新的 Django 项目&#xff1a; django-admin startproject myproject cd myproject 在 Django 项目中创建一个新的应用&#xff1a; python manage.py startapp myapp设置数据库 编辑 myproject/settings.py 文件中的数据库设置&#xff1a; DATABASES {default:…

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT&#xff0c;这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频&#xff0c;并利用 SAM 2 进行 3D 空间分割&#xff0c;无需进一步训练或 2D-3D 投影。 我们的框架…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

unity3d入门教程一

unity3d入门教程一 2.1-开发环境2.2 新建项目3.1编辑器页面3.2场景3.3添加资源4.1场景视图4.2游戏对象4.3坐标系4.4游戏对象的操作4.5摄像机 2.1-开发环境 https://unity.com/ https://unity.cn/ 安装时若卡住&#xff0c;打开路径自动安装 C:\Users\zhaocai\AppData\Local\T…

TAPD卓越版的全面评测:超强的功能与用户体验优势

在数字化转型浪潮中&#xff0c;项目管理和团队协作工具成为提升企业效能的关键。其中&#xff0c;腾讯研发的TAPD卓越版&#xff0c;作为一款集敏捷项目管理、研发管理和知识管理为一体的全方位协作平台&#xff0c;深受众多企业的青睐。本文将从功能特性、用户体验、以及实际…

html+css网页设计 旅游 雪花旅行社5个页面

htmlcss网页设计 旅游 雪花旅行社5个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

【C++】Stack

个人主页~ Stack 一、Stack的介绍和使用1、stack的介绍2、stack的使用3、stack的模拟实现 二、容器适配器1、什么是适配器2、容器适配器的使用 三、deque1、原理介绍2、deque的使用3、deque的缺陷 一、Stack的介绍和使用 1、stack的介绍 stack详细解释 stack是一种容器适配器…

Oracle反向键索引Reverse Key Index

Oracle反向键索引&#xff08;Reverse Key Index&#xff09;是一种特殊的B-Tree索引&#xff0c;它在创建索引时对索引列的键值进行字节反转。这种索引的主要设计目的是为了解决在多实例环境&#xff08;如Oracle RAC&#xff09;中由于索引键值顺序插入导致的索引块争用问题。…

C#环境搭建和入门教程--vs2022之下

目录 1.环境搭建 2.先让程序跑起来 3.C#代码结构 4.变量&#xff0c;输入输出介绍 5.内容输入和类型转换 1.环境搭建 我们的这个c#基础学习主要就是在这个vs2022上面进行的&#xff0c;我们的这个c/c使用的都是这个平台 我们首先检查一下我们的这个环境是不是完全的配置了…

【算法笔记】二分查找 二分答案 (超详细解析,一篇让你搞懂二分)

【算法笔记】二分查找 && 二分答案&#xff08;超详细解析&#xff0c;一篇让你搞懂二分&#xff09; 目录 【算法笔记】二分查找 && 二分答案&#xff08;超详细解析&#xff0c;一篇让你搞懂二分&#xff09;前言一、什么是二分查找&#xff1f;为什么要用二…

vite+vue3快速构建项目+router、vuex、scss安装

安装 Vite npm install -g create-vite-app创建vue3项目 npm init vitelatestnpm i安装依赖 安装veux、router npm install vue-router vuex新建router/index.js&#xff08;自己创建home、login对应页面文件&#xff09; import { createRouter, createWebHistory } from…

python-游戏自动化(三)(实战-豆腐女孩)

前提准备 特别注意&#xff1a; 本节教程所演示的模拟器分辨率设置为 720x1080&#xff08;手机版&#xff09;&#xff0c;电脑分辨率设置大720x1080并且没有设置放大。 今天的课程开始之前我们来回顾一下昨天所学的知识内容&#xff0c;因为今天要学的内容和昨天内容…

828华为云征文 | 华为云Flexusx实例,高效部署Servas书签管理工具的优选平台

前言 华为云Flexus X实例&#xff0c;Servas书签管理工具部署的优选平台&#xff01;828节日特惠&#xff0c;让高效管理您的知识宝藏触手可及。Flexus X实例以其卓越的算力、灵活的资源配置和智能调优技术&#xff0c;为Servas提供了稳定、高效的运行环境。无论是快速访问、安…

链表相关OJ

目录 1、移除链表元素 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;算法原理 2、链表的中间结点 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;算法原理 3、链表中倒数第K个结点 &#xff08;1&#xff09;题目描述 &#xff0…

ssrf漏洞利用+CTF实例

引发ssrf漏洞的几个函数 file_get_contents() 把整个文件读入一个字符串中&#xff0c;获取本地或者远程文件内容fsockopen() 获得套接字信息curl_exec() 执行一个curl会话&#xff0c;由curl_init()初始化一个新的会话&#xff0c;返回一个curl句柄fopen() 打开文件或者URLre…

【C语言】内存函数详细讲解

文章目录 前言strerror的声明和使用字符串分类函数字符转换函数内存拷贝函数&#xff08;memcpy)memcpy的声明和使用memcpy函数的模拟实现 内存拷贝函数&#xff08;memmove&#xff09;memmove的声明和使用memmove模拟实现 内存比较函数&#xff08;memcmp&#xff09;memcmp的…

如何解决在idea中的hadoop日志错误

在idea中操作hadoop的时候&#xff0c;每次运行代码都会发现有个日志错误&#xff0c;虽然不影响程序运行&#xff0c;但是无法打印日志。这是缺少依赖&#xff0c;和windows上缺少log4j的文件 解决方案&#xff1a; 1、导入slf4j依赖 2、导入hadoop中的log4j文件 1、从hado…

Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第十九章 ChatGPT

19.1 ChatGPT 简介和功能 1、对话框可以输入任何东西 2、可以继续追问 19.2 对于 ChatGPT 的误解 1、第一个误解是 ChatGPT 的回答是罐头讯息 2、另外一个常见的误解是 ChatGPT 的答案是网络搜索的结果 3、那 ChatGPT 真正在做的事情是什么呢&#xff1f;一言以蔽之就是做…

开放式激光振镜运动控制器在Ubuntu+Qt下的文本标刻

开放式激光振镜运动控制器在UbuntuQt下的文本标刻 上节课程我们讲述了如何通过UbuntuQt进行振镜校正&#xff08;详情点击→开放式激光振镜运动控制器在UbuntuQt下的激光振镜校正&#xff09;&#xff0c;本节文本标刻是在振镜校正的前提下实现的。 在正式学习之前&#xff0…

F12抓包08:查看网站Cookie

课程大纲 1、查看Cookie 1. 应用界面查看&#xff1a;按F12进入浏览器的开发者模式 - “应用”&#xff08;Application&#xff09; - Cookie&#xff0c;可查看Cookie并进行增、删、改、查操作。 2. 控制台命令行查看&#xff1a;按F12进入浏览器的开发者模式 - “控制台”&…