DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释
中文版
本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。
DeepSpeed 配置文件详解:从基础到实战
DeepSpeed 是用于加速大规模分布式训练的重要工具,其灵活的配置文件是实现高效训练的关键。在本篇博客中,我们将深入解读 DeepSpeed 配置文件的结构和关键参数,结合 4 卡 3090 的实际训练场景,探讨如何优化配置,解决爆显存问题。
1. 配置文件的结构
DeepSpeed 的配置文件一般以 JSON 格式定义,包括以下几个核心部分:
- bf16/fp16 配置:决定是否启用混合精度训练。
- ZeRO 优化配置:用于控制内存优化策略。
- 训练相关参数:例如批量大小、梯度累积步数等。
以下是一个典型的配置文件示例:
{"bf16": {"enabled": true},"zero_optimization": {"stage": 2,"overlap_comm": true,"contiguous_gradients": false,"reduce_bucket_size": 5e5,"sub_group_size": 5e5},"gradient_accumulation_steps": 4,"train_micro_batch_size_per_gpu": 1,"gradient_clipping": 1.0
}
2. 关键参数解析
bf16.enabled
- 含义:启用 BF16 混合精度训练。
- 影响:显著减少显存占用,提升训练速度。
zero_optimization.stage
- 含义:指定 ZeRO 优化的阶段。
- Stage 1:优化梯度存储。
- Stage 2:进一步优化优化器状态存储。
- Stage 3:支持模型分片。
- 推荐:对于 4 卡 3090,优先选择 Stage 2,在显存允许的情况下使用 Stage 3。
overlap_comm
- 含义:启用通信与计算的重叠,减少通信开销。
- 建议:在多卡场景中始终开启。
contiguous_gradients
- 含义:是否在内存中存储连续梯度。
- 优点:开启后可减少内存碎片化,提高通信效率。
- 缺点:增加显存开销。
- 建议:若显存不足,可将其设置为
false。
reduce_bucket_size
- 含义:定义一次通信中参数分片的最大大小。
- 单位:字节。
- 默认值:
5e6(即 5 MB)。 - 调整:
- 若显存不足,减小值至
1e5或5e5。 - 如果通信瓶颈明显,可适当增大值。
- 若显存不足,减小值至
sub_group_size
- 含义:设置通信子组的参数分片大小。
- 默认值:
1e8(即 100 MB)。 - 调整:
- 小模型:
5e5或更低。 - 大模型:可根据显存容量调试,通常
1e6至1e7。
- 小模型:
gradient_accumulation_steps
- 含义:设置梯度累积步数,减少单步的显存压力。
- 建议:逐步增加值(如从
4到8),但需注意总批量大小的变化。
train_micro_batch_size_per_gpu
- 含义:每张 GPU 的微批量大小。
- 建议:在显存不足时减小,如从
4降为1。
gradient_clipping
- 含义:限制梯度范数,防止梯度爆炸。
- 推荐值:
1.0。
3. 针对 4 卡 3090 的优化建议
-
显存不足问题解决方法:
- 减小
reduce_bucket_size和sub_group_size:"reduce_bucket_size": 1e5, "sub_group_size": 5e5 - 降低
train_micro_batch_size_per_gpu:"train_micro_batch_size_per_gpu": 1 - 增大
gradient_accumulation_steps:"gradient_accumulation_steps": 8 - 禁用
contiguous_gradients:"contiguous_gradients": false
- 减小
-
检查 NCCL 环境变量:
确保以下变量已正确设置,避免通信问题导致显存不足。export NCCL_BLOCKING_WAIT=1 export NCCL_ASYNC_ERROR_HANDLING=1 export NCCL_TIMEOUT=10800 -
启用 CPU Offloading(如果必要):
对于显存严重不足的场景,可将部分优化器状态卸载至 CPU。"offload_optimizer": {"device": "cpu","pin_memory": true }
4. 实验结果分析与日志监控
在训练过程中,通过以下设置获取详细的资源占用信息:
"wall_clock_breakdown": true
并结合 DeepSpeed 的日志分析显存使用、通信效率等关键指标。
通过合理配置 DeepSpeed 配置文件,结合具体的硬件资源和任务需求,可以显著提升训练效率,减少显存压力。
英文版
This article is about explaining DeepSpeed configuration files, focusing on practical usage with a 4x 3090 GPU setup. This includes a breakdown of key parameters like contiguous_gradients, reduce_bucket_size, and sub_group_size, as well as solutions for handling out-of-memory (OOM) errors.
DeepSpeed Configuration Files: A Comprehensive Guide
DeepSpeed offers advanced optimization features like ZeRO (Zero Redundancy Optimizer) to enable efficient large-scale model training. This post will delve into configuring DeepSpeed for optimal performance, with examples and tips tailored to a 4x NVIDIA 3090 GPU setup.
1. Key Parameters in a DeepSpeed Configuration File
Below is an example configuration file for ZeRO Stage 2 optimization, designed for fine-tuning large models:
{"zero_optimization": {"stage": 2,"overlap_comm": true,"contiguous_gradients": false,"reduce_bucket_size": 5e5,"sub_group_size": 5e5},"gradient_accumulation_steps": 4,"train_micro_batch_size_per_gpu": 1,"gradient_clipping": 1.0
}
Let’s break down the parameters:
(1) zero_optimization.stage
- Defines the ZeRO optimization stage:
- Stage 2: Optimizes optimizer states and gradients across GPUs, reducing memory usage.
- Use Stage 3 for more aggressive memory savings by offloading parameters to CPU, if applicable.
(2) overlap_comm
- Default:
true - Enables overlapping communication with computation, improving efficiency during distributed training.
(3) contiguous_gradients
- Default:
false - When
true, all gradients are stored contiguously in memory.- Benefit: Faster gradient reductions.
- Drawback: Increases memory usage.
- Recommendation: Set to
falseif facing OOM issues.
(4) reduce_bucket_size
- Defines the size of gradient buckets for all-reduce operations.
- Smaller values (e.g.,
5e5) reduce memory pressure but may slightly slow down training. - Larger values improve speed but require more memory.
- Smaller values (e.g.,
(5) sub_group_size
- Controls sub-grouping of gradients during communication.
- Default: A large value (e.g.,
1e9), meaning no sub-grouping. - Recommendation: Reduce to
5e5or lower for better memory efficiency.
- Default: A large value (e.g.,
(6) gradient_accumulation_steps
- Number of steps to accumulate gradients before performing a backward pass.
- Higher values effectively increase the batch size without increasing per-GPU memory load.
(7) train_micro_batch_size_per_gpu
- Batch size per GPU per step.
- Recommendation: Start with a small value (e.g.,
1) and scale up gradually.
- Recommendation: Start with a small value (e.g.,
2. Handling Out-of-Memory (OOM) Errors
Training large models like Google Gemma-2-2B on GPUs with limited memory (24 GB, such as NVIDIA 3090) often results in OOM errors. Here are optimization strategies:
(1) Reduce train_micro_batch_size_per_gpu
- Start with
1and only increase if memory allows.
(2) Lower reduce_bucket_size and sub_group_size
- Decrease both to
1e5or5e4. This reduces the memory footprint during gradient reduction at the cost of slightly increased communication overhead.
(3) Enable offload_optimizer or offload_param (for ZeRO Stage 3)
- Offload optimizer states or parameters to CPU if memory remains insufficient.
- Example configuration for optimizer offloading:
{"zero_optimization": {"stage": 3,"offload_optimizer": {"device": "cpu","pin_memory": true}} }
(4) Use Gradient Checkpointing
- Activates checkpointing for intermediate activations to save memory during backpropagation.
from deepspeed.runtime.activation_checkpointing import checkpointing_config checkpointing_config(partition_activations=True,contiguous_memory_optimization=False )
(5) Mixed Precision Training (bf16 or fp16)
- Use
bf16for better memory efficiency with minimal precision loss.
(6) Increase gradient_accumulation_steps
- Accumulate gradients over more steps to reduce the batch size processed per GPU.
(7) Reduce max_seq_length
- Shorten sequence length (e.g., 512 or 768 tokens) to decrease memory usage.
3. Practical Example: Fine-Tuning on 4x NVIDIA 3090 GPUs
The following accelerate command illustrates how to combine the above settings for fine-tuning a large model:
accelerate launch \--mixed_precision bf16 \--num_machines 1 \--num_processes 4 \--machine_rank 0 \--main_process_ip 127.0.0.1 \--main_process_port 29400 \--use_deepspeed \--deepspeed_config_file configs/ds_config.json \--model_name_or_path google/gemma-2-2b \--tokenizer_name google/gemma-2-2b \--max_seq_length 768 \--per_device_train_batch_size 1 \--gradient_accumulation_steps 4 \--learning_rate 5e-6 \--num_train_epochs 1 \--output_dir output/sft_gemma2
4. Debugging Tips
- Enable Detailed Logs: Set
wall_clock_breakdown: truein the config file to identify bottlenecks. - NCCL Tuning: Add environment variables to handle communication errors:
export NCCL_BLOCKING_WAIT=1 export NCCL_ASYNC_ERROR_HANDLING=1
Conclusion
DeepSpeed’s configuration is highly flexible, but tuning requires balancing memory efficiency and computational speed. By adjusting parameters like reduce_bucket_size, gradient_accumulation_steps, and leveraging ZeRO’s offloading capabilities, you can effectively train large models even on memory-constrained GPUs like the NVIDIA 3090.
后记
2024年11月27日22点08分于上海,基于GPT4o大模型。
相关文章:
DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释
中文版 本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。 DeepSpeed 配置文件详解:从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具,…...
前端JavaScript(一)---基本介绍
Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对…...
文本处理之sed
1、概述 sed是文本编辑器,作用是对文本的内容进行增删改查。 和vim不一样,sed是按行进行处理。 sed一次处理一行内容,处理完一行之后紧接着处理下一行,一直到文件的末尾 模式空间:临时储存,修改的结果临…...
uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...
计算机网络 实验七 NAT配置实验
一、实验目的 通过本实验理解网络地址转换的原理和技术,掌握扩展NAT/NAPT设计、配置和测试。 二、实验原理 NAT配置实验的原理主要基于网络地址转换(NAT)技术,该技术用于将内部私有网络地址转换为外部公有网络地址,从…...
数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!
文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...
【kafka04】消息队列与微服务之Kafka 图形工具
Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…...
剖析前后端 API 接口参数设计:JSON 数据结构化全攻略
在当今软件开发领域,前后端分离架构已成为主流趋势。而 API 接口作为前后端之间数据交互的桥梁,其设计的合理性对系统的可维护性和扩展性起着至关重要的作用。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&…...
vue3 多种方式接受props,定义ref,reactive
定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...
逻辑处理器核心指纹修改
navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义: third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…...
如何制作项目网页
一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/,这个就是将论文中的内容或者补充视频放到一个网页上,以更好的展示他们的工作。因此,这里介绍下如何使用前人提供的模板制作我…...
mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
随笔 从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条? 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项? 监控报警系统如何实现自监控? java 老矣,尚能饭否ÿ…...
1、正则表达式
grep匹配 grep用来过滤文本内容,以匹配要查询的结果。 grep root /etc/passwd:匹配包含root的行 -m 数字:匹配几次后停止 -v:取反-i:忽略字符的大小写,默认的,可以不加-n:…...
Airsim安装问题:This project was made with a different version of the Unreal Engine.
本文记录如何在 Ubuntu 18.04 系统中配置 AirSim 和 Unreal Engine 4.27,并成功打开默认的 Blocks 环境项目。 环境说明 系统:Ubuntu 18.04Unreal Engine 版本:4.27AirSim:主分支文件路径: Unreal Engine:…...
java八股-分布式服务的接口幂等性如何设计?
文章目录 接口幂等token Redis分布式锁 原文视频链接:讲解的流程特别清晰,易懂,收获巨大 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 https://www.bilibili.com/…...
vscode python code runner执行乱码
打开vscode code runner插件配置,如图所示: 然后在setting.json修改运行python的默认命令: 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考:Vscode——python环境输出中文乱…...
Java中的继承详解
在Java编程中,继承(Inheritance)是一种面向对象编程(OOP)的核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承&a…...
kafka进阶_2.存储消息
文章目录 一、存储消息介绍二、副本同步2.1、数据一致性2.2、HW在副本之间的传递 如果想了解kafka基础架构和生产者架构可以参考 kafka基础和 Kafka进阶_1.生产消息。 一、存储消息介绍 数据已经由生产者Producer发送给Kafka集群,当Kafka接收到数据后,…...
如何启用本机GPU硬件加速猿大师播放器网页同时播放多路RTSP H.265 1080P高清摄像头RTSP视频流?
目前市面上主流播放RTSP视频流的方式是用服务器转码方案,这种方案的好处是兼容性更强,可以用于不同的平台,比如:Windows、Linux或者手机端,但是缺点也很明显:延迟高、播放高清或者同时播放多路视频视频容易…...
如何更好地设计SaaS系统架构
SaaS(Software as a Service)架构设计的核心目标是满足多租户需求、支持弹性扩展和高性能,同时保持低成本和高可靠性。一个成功的SaaS系统需要兼顾技术架构、资源利用、用户体验和商业目标。本文从以下几个方面探讨如何更好地设计SaaS系统架构…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
