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
false
if 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
5e5
or 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
1
and only increase if memory allows.
(2) Lower reduce_bucket_size
and sub_group_size
- Decrease both to
1e5
or5e4
. 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
bf16
for 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: true
in 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系统架构…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...