DeepSpeed 是一个由微软开发的开源深度学习优化库。
如果把大模型训练比作"运送货物",PyTorch 就像是一辆标准的卡车,而 DeepSpeed 则是一套超级物流系统。它不仅能调度成千上万辆卡车(GPU)协同工作,还能通过特殊的压缩和拆分技术,让一辆小卡车(比如你的 V100 32G)也能装下原本需要巨型卡车才能运走的庞然大物(千亿参数模型)。
在你的微调任务中,DeepSpeed 主要扮演以下三个关键角色:
1. 显存"魔术师"(突破硬件限制)
这是 DeepSpeed 最核心的功能,主要依靠 ZeRO(零冗余优化器) 技术。
- 痛点:训练大模型时,显存不仅被模型权重占用,还有大量的优化器状态(Optimizer States)和梯度。往往模型本身不大,但训练时的"开销"把显存撑爆了。
- DeepSpeed 的作用:它将这些数据(优化器状态、梯度、模型参数)拆分并分散存储在所有可用的 GPU 显存中,而不是让每张卡都存一份完整的副本。
- 对你的意义:虽然 Qwen3-4B 在 V100 32G 上可以直接跑,但如果未来你尝试更大的模型(如 14B、32B),或者想开更大的 Batch Size 来提升训练效果,没有 DeepSpeed 显存会瞬间溢出(OOM),而有了它,单张显卡也能微调原本跑不起来的模型。
2. 训练"加速器"(提升效率)
DeepSpeed 通过多种系统级优化来加快训练速度:
- 混合精度训练:自动使用 FP16(半精度)或 BF16 进行计算,既减少显存占用,又能利用 V100 的 Tensor Core 特性大幅提升计算速度。
- 通信优化:在多卡训练时,优化 GPU 之间的数据传输,减少"等待时间",让算力利用率更高。
3. 推理与压缩(模型瘦身)
除了训练,DeepSpeed 在模型推理阶段也很有用:
- 量化:支持将模型压缩(如 INT8、INT4),在不明显损失精度的情况下,让模型体积变小,运行速度更快。
- 高效推理:通过 DeepSpeed-Inference,可以加速大模型的生成速度。
总结:为什么你需要它?
在你的 requirements.txt 中加入 DeepSpeed,是为了给你的微调任务上一道**"双保险"**:
- 兜底:万一显存不够了,开启 DeepSpeed 的 ZeRO-3 模式就能救场。
- 提速:配合混合精度,能让你的 V100 跑得更快。
在 LLaMA-Factory 中,你只需要在配置文件中指定 deepspeed: "ds_z3_config.json"(或其他配置文件),就能轻松开启这些强大的功能,而无需修改任何模型代码。