优雅谈大模型:白话ZeRO 下

2024-09-01 15:36
文章标签 优雅 模型 zero 白话 谈大

本文主要是介绍优雅谈大模型:白话ZeRO 下,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习模型的复杂性和规模不断增长,分布式训练变得比以往任何时候都更加重要。训练具有数千亿参数的大型语言模型( LLMs )将是机器学习基础设施面临的挑战。与传统的分布式计算框架不同的地方在于GPU的分布式训练需要将数据传递给GPU芯片等物理硬件层。GPU设备之间会进行频繁、大规模的数据交换以进行高效训练,今天将揭开分布式训练的神秘面纱。

上图为基本的机器学习训练框架,数据准备占据1/3,训练占据1/3,将中间版本进行保存以及调整参数占据1/3。在模型的训练过程中,若读者拥有多片GPU,那么如何让这些GPU同时工作,目前有数据并行,模型并行以及管道并行。

数据并行

数据并行是跨多个 GPU 扩展模型训练最常用的方法之一。在这种方法中,每个GPU设备都需要存储全尺寸模型并处理不同批次的训练数据。除了存储模型和训练数据之外,每个GPU设备还保存临时结果,其中包括前向传播输出和梯度下降结果。

每个副本完成前向传递阶段后, NCCL All Reduce<白话ZeRO>会跨GPU节点同步模型参数,确保模型更新就像单个节点处理过所有批次数据。 

ZeRO数据并行<白话ZeRO>是对传统数据并行的增强,旨在减少 GPU内存使用。与每个GPU存储完整模型不同,ZeRO跨GPU分割模型参数。这种方法仍然是数据并行的一种形式,因为每一层的张量计算不会跨GPU分割。GPU负责持久化模型分片,并可以在完成必要的计算后丢弃它们。

这种方法显着减少了内存消耗,使得可以在相同的硬件上训练更大的模型。PyTorch 提供完全分片数据并行 ( FSDP ),它将模型参数、优化器状态和跨分布式数据并行 ( DDP ) 等级的梯度进行分片,因此进一步减少内存消耗。

模型并行

数据并行简单直接,同时可以将训练分布在多GPU。特别大的模型而言,即便仅仅加载大型模型的单层也会对GPU的内存带来很大的压力。

在单GPU上训练模型时,若模型超过GPU内存,则训练过程中需要频繁地通过HostToDevice操作在主机内存和GPU内存之间不断地交换模型参数。这种频繁的I/O操作会导致GPU空闲,从而拖累了整个训练过程。

张量并行是模型并行的一种,模型参数被分割到多个GPU,从而实现并行计算。模型参数具备矩阵运算特点,可以切分按行或按列划分,允许每个 GPU独立执行乘法操作。最终通过将不同的GPU计算的子结果合并就可以得到最终的运算结果,也可以充分的利用所有的GPU设备。下图很直观的展示将矩阵分割,两路并行计算。

管道并行

除了数据并行和张量并行之外,管道并行可以进一步提高训练期间的GPU利用率。在管道并行性中,模型根据其层被分为块,允许前向传播和后向传播分布在不同的GPU上。这种方法可能会导致GPU出现空闲等待时间。

若模型足够小,单个GPU能够搞定,则可以使用数据并行将其扩展到多个节点。随着模型大小的增加,可能需要张量并行才能将模型分布到单个节点内的多个 GPU 上。如果模型变得更大,可以在同一节点内应用张量并行,而在不同节点之间使用管道并行。

当然需要确保参与管道并行的节点位于同一网络等级内以实现最佳 I/O 性能至关重要。对于读者而言,小编建议先从数据并行入手,熟悉和感受下分布式训练方法。目前随着分布式计算越发的成熟,涌现出许多流行的训练框架,例如PyTorch Distributed Data Parallel ( DDP )、 DeepSpeed和Megatron-LM ,这些框架都提供并行方法的实现。

这篇关于优雅谈大模型:白话ZeRO 下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127346

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2