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系统架构…...
SiameseUIE中文信息抽取:Matlab科学计算集成
SiameseUIE中文信息抽取:Matlab科学计算集成 如果你是一位科研人员,每天面对海量的文献、实验报告和调研数据,是不是经常觉得手动整理信息太费时间了?特别是当需要从一大段文字里找出特定的人名、机构、关系或者事件时࿰…...
skimage计算彩色图像SSIM报错?别慌,手把手教你排查‘win_size exceeds image extent’的坑
彩色图像SSIM计算报错全解析:从源码到实战的深度排坑指南 当你满怀信心地调用skimage.metrics.structural_similarity计算彩色图像的SSIM指标时,突然遭遇"win_size exceeds image extent"的报错——即使已经设置了multichannelTrue参数。这种看…...
如何快速打造专业音乐播放器:foobox-cn终极美化指南
如何快速打造专业音乐播放器:foobox-cn终极美化指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 还在为foobar2000单调的界面而烦恼吗?想要让专业音频播放器既强大又美观&a…...
ECharts多Y轴布局踩坑记:手把手教你调`axisLabel`和`nameTextStyle`的间距
ECharts多Y轴布局实战:精准控制标签与名称间距的深度解析 第一次在项目中遇到ECharts多Y轴布局时,我盯着屏幕上挤成一团的轴标签和名称发愁——明明数据已经准确呈现,却因为样式重叠导致专业度大打折扣。这种体验想必不少开发者都深有体会。本…...
模块化关节设计实战:如何打造可快速更换的人形机器人关节?
模块化关节设计实战:如何打造可快速更换的人形机器人关节? 人形机器人的关节系统如同人体的膝关节与肘关节,承担着力量传递、运动灵活性和动态平衡的核心职能。想象一下,当一台价值数百万的仿人机器人在执行救灾任务时,…...
MobaXterm新手必看:5分钟搞定SSH连接Linux的完整配置流程
MobaXterm新手避坑指南:SSH连接Linux的完整实战手册 第一次用MobaXterm连Linux服务器就像学骑自行车——看着别人操作行云流水,自己上手却总在奇怪的地方摔跟头。为什么连接总是超时?粘贴功能怎么时灵时不灵?X-Server服务到底该不…...
nli-distilroberta-base环境配置:Docker镜像内Python依赖与模型加载流程详解
nli-distilroberta-base环境配置:Docker镜像内Python依赖与模型加载流程详解 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能智能分析两个句子之间的关系,判断它们属于以下哪种情况: 蕴…...
香飘飘大力出海东南亚,香飘飘的全球之路该咋看?
据香飘飘近期公告,该公司将在泰国建设即饮饮料生产基地,预计总投资为3800万美元,折合人民币超2.6亿元,于今年5月开工。香飘飘在接受调研者提问时表示,出海系公司看到了海外市场较大的发展机会,计划将泰国作…...
PCL2-CE社区版启动器:用智能管理重塑Minecraft游戏体验,如何让个性化与稳定性兼得?
PCL2-CE社区版启动器:用智能管理重塑Minecraft游戏体验,如何让个性化与稳定性兼得? 【免费下载链接】PCL-CE PCL2 社区版,可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL-CE PCL2-CE社区版启动…...
基于Qwen3-ASR的语音爬虫:音频内容自动化采集与分析
基于Qwen3-ASR的语音爬虫:音频内容自动化采集与分析 1. 引言 你有没有遇到过这样的情况:需要从海量的音频内容中提取有价值的信息,却苦于手动处理效率太低?无论是市场调研、舆情监控,还是内容分析,传统的…...
