DeepSpeed Zero 解读

news2025/2/6 18:43:22

目录


主要参考:
分布式训练基础 – 数据并行,模型并行,流水线并行
DeepSpeed Zero 的各个 stage 介绍

针对Zero 的各个stage,这里有三个点需要额外再说一下:

  1. 各个stage,要实现将某一部分参数分配到不同GPU,需要一个 分区映射表,用于指明哪个GPU储存哪个变量的哪一部分,这个映射在整个训练过程是固定的,方便后续查找和更新。例如:stage 1 是把优化器参数分区储存了,那么在进行优化器更新步骤时,就需要先根据分区映射表在不同GPU上找到当前步骤需要的数据,再来完成相应计算。且在计算完成后需要做参数广播(必要时)。这也可以解释越是后面的stage,其速度越慢,因为需要更多额外的时间在参数分区查找和数据通信上面。
  2. 不难发现实际当中 activates 的内存占用往往比模型参数和梯度都要大得多,但 Zero 当中没用对这部分变量做分区存储,原因主要有两点:
  1. 模型参数,梯度等变量是与input无关的,即无论input是什么,batch size多大,需要用到的变量都是这些,因此可以认为这些变量在各个GPU上都保留一份是纯复制,是冗余的;但activates相关的变量于input强相关,输入长,batch size大,activates内存就大,各个GPU上由于输入的数据不同,其activates变量也不一样,不涉及重复存储的问题
    \quad
  2. activates内存优化的方法是梯度检查点(checkpointing)和重计算策略,而不是简单的分区存储。检查点技术通过在前向传播时只存储部分关键激活值(称为“检查点”),在反向传播时重新计算丢弃的部分,以此降低内存占用,并不会引入跨设备的数据传输延迟。
  1. 同样是将模型参数分区放在不同GPU上,Zero stage3 和 模型并行 还是有较大区别:
  1. 模型并行 是将不同layer的参数放在不同GPU上,一个mini-batch的数据进来,要依次在不同GPU上进行计算。每个 GPU 直接存储自己负责的完整layer,前向和反向传播过程中不需要对同一层参数做额外的跨设备聚合,因为每个层的数据都在本地
    \quad
  2. Zero stage3 的模型参数分区,是对每个参数张量进行细粒度分片,也就是说,一个张量(无论它属于网络的哪个层)会被划分成多个部分,每个 GPU 只保存其中的一部分。由于每个 GPU 只持有部分参数(例如,一个权重矩阵被分成多份),在前向传播或反向传播时可能需要从其他 GPU 聚合(如通过 All-Gather 操作)各个分片来获得完整的参数信息,然后进行计算。更新后,同样需要将分片的数据更新到各自所在的 GPU。这里使用的映射表记录了每个参数分片的归属,从而协调数据传输和更新过程
    \quad
  3. 模型并行 一般是当模型本身太大,单个 GPU 无法装下整个模型或中间激活,必须跨 GPU 分布计算。且每个 GPU 不仅存储自己负责的 layer 的模型参数,同时也负责该部分计算产生的中间激活值和对应的梯度,这是与 Zero stage3 不同的地方。而 Zero stage3 大类上还是数据并行,即模型前向和反向计算单卡可行,只不过由于数据并行复制导致内存浪费,通过分片消除冗余存储

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

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

相关文章

基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理

之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级…

算法题(48):反转链表

审题: 需要我们将链表反转并返回头结点地址 思路: 一般在面试中,涉及链表的题会主要考察链表的指向改变,所以一般不会允许我们改变节点val值。 这里是单向链表,如果要把指向反过来则需要同时知道前中后三个节点&#x…

梯度、梯度下降、最小二乘法

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,另一种常用的方法是最小二乘法。 1. 梯度和梯度下降 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式…

独立开发者小程序开发变现思路

随着移动互联网的发展,小程序已成为许多独立开发者展示才能和实现收入的重要平台。作为一种轻量级的应用形态,小程序具有开发成本低、用户体验好、传播效率高等优势,为独立开发者提供了多种变现方式。然而,要想实现真正的盈利&…

软件测试 - 概念篇

目录 1. 需求 1.1 用户需求 1.2 软件需求 2. 开发模型 2.1 软件的生命周期 2.2 常见开发模型 2.2.1 瀑布模型 2.2.2 螺旋模型 1. 需求 对于软件开发而言, 需求分为以下两种: 用户需求软件需求 1.1 用户需求 用户需求, 就是用户提出的需求, 没有经过合理的评估, 通常…

使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025

使用SpringBoot发送邮件 文章目录 使用SpringBoot发送邮件1. 获取网易邮箱服务的授权码2. 初始化项目maven部分web部分 3. 发送邮件填写配置EmailSendService [已解决]部署时连接超时附:Docker脚本Dockerfile创建镜像启动容器 1. 获取网易邮箱服务的授权码 温馨提示…

基于springboot+vue的航空散货调度系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

[MRCTF2020]Ez_bypass1(md5绕过)

[MRCTF2020]Ez_bypass1(md5绕过) ​​ 这道题就是要绕过md5强类型比较,但是本身又不相等: md5无法处理数组,如果传入的是数组进行md5加密,会直接放回NULL,两个NuLL相比较会等于true; 所以?id[]1&gg…

MATLAB实现多种群遗传算法

多种群遗传算法(MPGA, Multi-Population Genetic Algorithm)是一种改进的遗传算法,它通过将种群分成多个子种群并在不同的子种群之间进行交叉和交换,旨在提高全局搜索能力并避免早期收敛。下面是多种群遗传算法的主要步骤和流程&a…

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下,函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下,f(x)*p(x)/q(x) 的期望。 起因是:求最大化回报的期望,所以对ceta求梯度 具体举例…

【MATLAB例程】TOA和AOA混合的高精度定位程序,适用于三维、N锚点的情况

代码实现了一个基于到达角(AOA)和到达时间(TOA)混合定位的例程。该算法能够根据不同基站接收到的信号信息,自适应地计算目标的位置,适用于多个基站的场景 文章目录 主要功能代码结构运行结果程序代码 主要功…

使用Pygame制作“青蛙过河”游戏

本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典,玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型,包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…

深度解读 Docker Swarm

一、引言 随着业务规模的不断扩大和应用复杂度的增加,容器集群管理的需求应运而生。如何有效地管理和调度大量的容器,确保应用的高可用性、弹性伸缩和资源的合理分配,成为了亟待解决的问题。Docker Swarm 作为 Docker 官方推出的容器集群管理工具,正是在这样的背景下崭露头…

8、面向对象:类、封装、构造方法

一、类 1、定义 类:对现实世界中事物的抽象。Student 对象:现实世界中具体的个体。张三、李四 这些具体的学生 面向对象的特征:抽象、封装、继承、多态 OOP: Object Oriented Programming(面向对象编程) 类和对象…

STM32 旋转编码器

旋转编码器简介 旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向 类型:机械触点式/霍尔传…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

【算法】回溯算法专题③ ——排列型回溯 python

目录 前置小试牛刀回归经典举一反三总结 前置 【算法】回溯算法专题① ——子集型回溯 python 【算法】回溯算法专题② ——组合型回溯 剪枝 python 小试牛刀 全排列 https://leetcode.cn/problems/permutations/description/ 给定一个不含重复数字的数组 nums ,返…

Vue2.x简介

Vue2.x简介 Vue2.x的版本介绍Vue2.x的两大组件库 Vue2.x的版本介绍 Vue2.x是vue.js的第二个主要版本,最初版发布于2016 年,最终版发布于2023年12月24日(版本号:2.7.16,版本名:Swan Song(绝唱&a…

FFmpeg:多媒体处理的瑞士军刀

FFmpeg:多媒体处理的瑞士军刀 前言 FFmpeg 是一个功能强大且跨平台的开源多媒体框架,广泛应用于音视频处理领域。 它由多个库和工具组成,能够处理各种音视频格式,涵盖编码、解码、转码、流处理等多种操作。 无论是专业视频编辑…

【深度分析】DeepSeek大模型技术解析:从架构到应用的全面探索

深度与创新:AI领域的革新者 DeepSeek,这个由幻方量化创立的人工智能公司推出的一系列AI模型,不仅在技术架构上展现出了前所未有的突破,更在应用领域中开启了无限可能的大门。从其混合专家架构(MoE)到多头潜…