DeepSpeed是微软开源的大模型训练优化库,通过ZeRO技术显著减少GPU显存占用,支持训练千亿至万亿参数模型。其核心模块包括训练优化、推理加速、模型压缩和科学计算应用。文章详细介绍了DeepSpeed与Transformers的集成、安装配置、T5模型训练方法,以及单机多卡和分布式训练的实现,为开发者在有限硬件资源下高效训练大模型提供了完整解决方案。
介绍
DeepSpeed 是一个开源深度学习优化库,旨在提高大模型训练和运行效率,以支持数千亿-万亿参数的超大语言模型。为了提高大模型训练的效率和扩展性,DeepSpeed 不仅实现了ZeRO 论文中的核心技术,还组合了多个模块,并持续跟进前沿训练方法,如 MoE(混合专家)模型支持:稀疏激活,高效扩展、长序列处理:处理超长文本/序列、RLHF(人类反馈强化学习):对齐人类偏好等。
1、Training(训练)模块
实现了ZeRO ,是 DeepSpeed 的一个关键组成部分,它通过优化数据并行训练中的显存使用,显著减少了所需的GPU显存。ZeRO 分为几个不同的级别(ZeRO-DP, ZeRO-Officad, ZeRO-Infinity),每个级别都提供了不同程度的优化和显存节省,允许训练更大的模型或在有限的硬件资源上训练模型。
ZeRO-Offload是ZeRO-DP技术的一个扩展,它将部分数据和计算从GPU(或其他主要训练设备)卸载到CPU,从而减轻了GPU的显存负担,并使得在有限GPU资源下训练更大的模型成为可能。核心策略如下:
- 模型卸载:ZeRO-Offload可以将模型的一部分状态(如优化器状态、梯度或参数)从GPU卸载到CPU内存中,从而减少GPU上的内存需求。
- 计算卸载:除了模型卸载之外,ZeRO-Offload还可以将一部分计算任务(如参数更新)卸载到CPU,减轻GPU的计算负担,使得GPU可以专注于更加密集的前向和反向传播计算。同时尽量减少数据在GPU和CPU之间的移动,以及减少CPU上的计算时间,从而在GPU上节省显存
- 效率和规模:在单个NVIDIA V100 GPU上可以实现40 TFlops的性能,训练超过100亿参数的模型,相比于PyTorch等流行框架在单GPU上能训练的最大模型规模提高了10倍。
- 灵活性和可扩展性:设计用于在多GPU上扩展,提供接近线性的加速比,最多支持128个GPU。
ZeRO-Infinity也是ZeRO技术的扩展,旨在设计面向百万亿大模型的训练框架。它的主要创新如下:
- 全面优化:ZeRO-Infinity结合了数据并行、模型并行、流水线并行和ZeRO-Offload的优点,提供了一套全面的显存和计算优化方案。
- 高效利用各种存储层:通过智能地使用GPU显存、CPU内存和NVMe SSD存储,最大化训练设备的存储和计算能力。
- 超大模型规模:可以在当前一代GPU集群上训练高达数十甚至数百万亿参数的模型。在单个NVIDIA DGX-2节点上微调万亿参数模型,降低了超大模型训练和微调的资源需求。
- 优秀的吞吐量和可扩展性:在512个NVIDIA V100 GPU上保持超过25 petaflops的性能(达到峰值的40%),在不受CPU或NVMe带宽限制的情况下,展示了超线性的可扩展性。
- 开源友好:Microsoft 在 DeepSpeed 框架中开源实现了ZeRO-Infinity 技术。
2、Inference(推理)模块
实现了模型并行(Model Parallelism),如:Tensor切片,以支持大型模型的分布式训练。这些技术允许模型的不同部分在不同的计算设备上并行运行,从而处理那些单个设备无法容纳的大型模型。实现了流水线并行(Pipeline Parallelism):通过将模型训练分解为多个阶段,并在不同的设备上并行处理这些阶段,流水线并行技术可以进一步提高训练效率。这种方法特别适合于顺序依赖较弱的训练任务,如某些类型的深度学习模型。
3、Compression(压缩)模块
**实现了显存和带宽优化,采用了多种技术来优化显存使用和增加带宽效率,如异步I/O、内存池化和压缩通信等。这些优化有助于提高数据加载和模型训练过程中的效率。**稀疏注意力**(Sparse Attention):DeepSpeed 支持稀疏注意力机制,这有助于降低训练大模型(尤其是那些基于Transformer的模型)时的计算和内存需求。稀疏性技术可以减少不必要的计算,使模型更加高效。
4、DeepSpeed4Science(科学计算)模块
用AI技术创新推动科学发现,应用于气候科学、生物医药、物理化学等。
DeepSpeed与Transformers集成方式
1、使用Trainer参数启动DeepSpeed
model_wrapped:self.model_wrapped指向DeepSpeed 包裹后的最外层模型,(用于前向传递)
place_model_on_device:是否自动将模型放置到设备(如 GPU),在DeepSpeed或模型并行场景下,该参数必须设为False(避免重复放置导致冲突)
2、使用HfDeepSpeedConfig类以独立配置文件注入 DeepSpeed 训练参数(推荐)
可传入 DeepSpeed 配置文件路径(字符串)或配置字典(直接提供配置内容)
DeepSpeed框架编译与安装
1、更新GCC和G++版本
# 添加必要的 PPA 仓库,然后更新 gcc 和 g++: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gcc-7 g++-7 # 更新系统的默认 gcc 和 g++ 指向 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7 sudo update-alternatives --config.gcc2、创建独立的Anaconda环境
如果想要隔离环境,建议采用 clone 方式,新建一个 DeepSpeed 专用的 Anaconda 环境:
conda create -n deepspeed --clone base3、安装Transformers和DeepSpeed
需要源代码方式安装,DeepSpeed要求的transformers版本是dev开发版本,需要源代码方式安装transformers、DeepSpeed两者才能正常使用。
源代码方式安装transformers,遵循官方文档,通过命令安装 Transformers:
pip install git+https://github.com/huggingface/transformers根据gpu情况并编译安装DeepSpeed
torch.cuda.get_device_capability()输出(7, 5)→Tesla T4 (sm_75)。
torch.cuda.get_arch_list()包含sm_75(支持 Tesla T4)。
GPU 兼容性:Tesla T4(sm_75)兼容当前 PyTorch 环境(支持sm_75)
通过源代码安装DeepSpeed解决编译兼容性问题,即通过正确设置 GPU 架构(TORCH_CUDA_ARCH_LIST)确保 DeepSpeed 适配用户硬件。
# 1. 克隆 DeepSpeed 仓库 git clone https://github.com/microsoft/DeepSpeed/ # 2. 进入项目目录 cd DeepSpeed # 3. 清理旧构建文件(避免冲突) rm -rf build # 4. 执行安装(关键命令) TORCH_CUDA_ARCH_LIST="7.5" DS_BUILD_CPU_ADAM=1 DS_BUILD_UTILS=1 pip install . \ --global-option="build_ext" --global-option="-j8" --no-cache -v \ --disable-pip-version-check 2>&1 | tee build.log| 参数 | 作用 |
|---|---|
TORCH_CUDA_ARCH_LIST="7.5" | 指定 GPU 架构(替换为实际值,如7.5) |
DS_BUILD_CPU_ADAM=1 | 启用 CPU Offload |
DS_BUILD_UTILS=1 | NVMe Offload(SSD存储卸载计算/存储任务) |
--global-option="-j8" | 使用 8 个线程并行编译(提升构建速度) |
--no-cache -v | 禁用缓存 + 详细日志输出(便于排查问题) |
| `2>&1 | tee build.log` |
安装完成如下提示
使用DeepSpeed训练T5模型
1、T5模型介绍
2019 年,由 Google Research 团队提出T5(Text-to-Text Transfer Transformer)模型。T5 将所有 NLP 任务(如翻译、摘要、分类、情感分析、文本补全等)都视为“文本到文本”的转换问题。即输入是一段文本(通常带有任务前缀),输出也是一段文本(任务的答案或结果)
2、使用 DeepSpeed 框架和 ZeRO-2 优化技术来训练 T5-Large 模型(7.7亿参数)
deepspeed --num_gpus=1 # 使用多少显卡 translation/run_translation.py \ # transformers 库官方提供的一个示例脚本,给翻译任务训练和评估,提供一个“开箱即用”的标准流程。这个脚本封装了从数据加载、模型初始化、训练、评估到保存的整个机器学习工作流。用户无需从头编写复杂的训练循环、日志记录、评估代码。 --deepspeed config/ds_config_zero2.json \ # 指定DeepSpeed ZeRO-2配置文件 --model_name_or_path t5-large \ # 加载预训练的T5-Large模型 --do_train --do_eval \ # 执行训练和评估 --per_device_train_batch_size 4 \ # 每个GPU的训练批大小为4 --per_device_eval_batch_size 4 \ --output_dir output_dir \ # 输出目录 --overwrite_output_dir \ --max_train_samples 500 \ # 仅使用500个训练样本(示例/调试用) --num_train_epochs 1 \ # 只训练1轮 --dataset_name wmt16 --dataset_config "ro-en" \ # 使用WMT16英罗翻译数据集 --source_lang en --target_lang ro # 指定源语言和目标语言(英语 → 罗马尼亚语)这是一个小规模测试运行:只用了500个样本,训练1个epoch,主要是为了演示和验证流程,而非追求最终模型性能。
ZeRO-2配置文件关键内容说明,通过ZeRO-2 内存优化+自动混合精度+自动优化器/调度器配置,在有限 GPU 资源下高效训练7.7亿参数的 T5-Large 模型,避免内存溢出并加速训练过程。"auto"参数均表示 DeepSpeed 自动适配硬件环境,无需手动调整。
# 关键优化参数 "zero_optimization": { "stage": 2,# 模型参数/梯度/优化器状态分区存储,显著减少 GPU 内存占用。 "offload_optimizer": { "device": "cpu",# 优化器状态卸载到 CPU "pin_memory": true # CPU 使用页锁定内存,加速 GPU 数据传输。 }, "allgather_partitions": true, "allgather_bucket_size": 2e8, # All-Gather 通信桶大小(2亿数据) "overlap_comm": true, # 通信与计算重叠,提升效率。 "reduce_scatter": true, "reduce_bucket_size": 2e8, "contiguous_gradients": true # 梯度连续存储,加速传输 }, "gradient_accumulation_steps": "auto", # 自动确定梯度累积步数 "gradient_clipping": "auto", # 自动梯度裁剪 "steps_per_print": 20, # 每 20 步打印一次日志 "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto", "wall_clock_breakdown": false # 训练核心配置 "fp16": { "enabled": "auto", # 混合精度训练,自动启用 FP16 "loss_scale": 0, "loss_scale_window": 1000, "initial_scale_power": 16, "hysteresis": 2, "min_loss_scale": 1 }, "bf16": { "enabled": "auto" # 混合精度训练,自动启用 BFloat16 }, "optimizer": { "type": "AdamW", # 使用 AdamW 优化器 "params": { "lr": "auto", "betas": "auto", "eps": "auto", "weight_decay": "auto" } }, "scheduler": { "type": "WarmupLR", # 使用 Warmup 学习率调度器 "params": { "warmup_min_lr": "auto", "warmup_max_lr": "auto", "warmup_num_steps": "auto" } }3、ZeRO-3
ZeRO-3 是 ZeRO-2 的增强版,在保留基础优化能力的同时,新增参数卸载功能并提供更精细的内存控制,专为超大规模模型训练设计,能有效解决 GPU 显存不足问题。
// ZeRO-3 配置文件 (ds_config_zero3.json) { "zero_optimization": { "stage": 3, "offload_optimizer": { "device": "cpu", "pin_memory": true }, "offload_param": { # 额外支持参数卸载,极大减少GPU显存占用,可训练更大模型 "device": "cpu", "pin_memory": true }, "overlap_comm": true, "contiguous_gradients": true, "sub_group_size": 1e9, # 控制参数分区粒度,ZeRO-3将参数分为更小的子组,便于高效卸载/加载 "reduce_bucket_size": "auto", # 控制梯度归并操作的批量大小,从固定值到"auto":ZeRO-2固定为2e8 → ZeRO-3自动优化 "stage3_prefetch_bucket_size": "auto", # 控制从CPU预取到GPU的参数批量大小 "stage3_param_persistence_threshold": "auto", # 定义哪些参数应常驻GPU(不再卸载) "stage3_max_live_parameters": 1e9, # GPU上同时保留的参数上限,限制活跃参数量 "stage3_max_reuse_distance": 1e9, # 判断参数是否应该预取的阈值,如果参数在未来较长时间内不会被重用,则不预取 "stage3_gather_16bit_weights_on_model_save": true # 保存模型时,将分布在多个GPU上的16位参数收集合并 }, "gradient_accumulation_steps": "auto", "gradient_clipping": "auto", "steps_per_print": 20, "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto", "wall_clock_breakdown": false }DeepSpeed单机多卡、分布式训练说明
1、单机多卡环境下的启动命令
如何利用一个简单的命令调用所有GPU进行分布式训练
deepspeed --num_gpus=<显卡数量> your_program.py <常规参数> --deepspeed ds_config.json使用deepspeed启动器,并通过--num_gpus和--deepspeed两个参数分别控制硬件资源和优化策略。
示例
使用4张GPU,使用ZeRO Stage 2的配置文件来节省显存
deepspeed --num_gpus=4 translation/run_translation.py \ --deepspeed config/ds_config_zero2.json --model_name_or_path t5-3b \ --do_train --per_device_train_batch_size 4 \ --do_eval --per_device_eval_batch_size 4 \ --output_dir output_dir --overwrite_output_dir \ --max_train_samples 500 --num_train_epochs 1 \ --dataset_name wmt16 --dataset_config "ro-en" \ --source_lang en --target_lang ro \ --fp162、分布式训练
分布式训练需要在所有节点上安装 DeepSpeed,并且序号配置 hostfile 文件
# hostname1、hostname2:节点的 SSH 主机名(或 IP 地址),必须能通过 SSH 无密码访问,通常配置在 ~/.ssh/config 文件中 # slots=8:该节点可用的 GPU 数量 hostname1 slots=8 hostname2 slots=8分布式命令示例
deepspeed --num_gpus 8 --num_nodes 2 --hostfile hostfile \ --master_addr hostname1 --master_port=9901 \ your_program.py <normal cl args> --deepspeed ds_config.json| 参数 | 作用 | 示例值 | 说明 |
|---|---|---|---|
--num_gpus | 每个节点使用的 GPU 数 | 8 | 必须与 hostfile 中每个节点的 slots 数匹配 |
--num_nodes | 节点总数 | 2 | 必须与 hostfile 中的行数匹配 |
--hostfile | hostfile 文件路径 | hostfile | 定义所有节点的连接信息 |
--master_addr | 主节点地址 | hostname1 | Rank 0 所在的节点,必须是 hostfile 中的某个主机名 |
--master_port | 主节点端口 | 9901 | 用于节点间通信,确保该端口在所有节点都可用且未被占用 |
| 其余参数 | 与单机训练相同 | - | 训练脚本、常规参数、DeepSpeed 配置文件 |
如果感觉hostfile 这种配置太复杂,可以考虑:使用 SLURM 等集群管理系统
最后
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤ 这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**