显存不够不是显卡的错… 而是你的配置有问题

BBetter Stack
컴퓨터/소프트웨어자격증/평생교육AI/미래기술

Transcript

00:00:00这是 DeepSpeed,微软的开源库。它可以直接接入 PyTorch,专门解决内存的核心痛点。
00:00:07它能让你在单张 GPU 上运行那些本会瞬间崩溃的模型,而不会导致显存溢出。大模型失败通常不是因为跑得慢,
00:00:14而是因为优化器状态、梯度和参数撑爆了显存。DeepSpeed 的秘诀在于 ZeRO,它采用了切片技术来处理训练状态。
00:00:23这样你就不用在每个地方都存储相同的数据。我们会持续更新视频,记得订阅关注。
00:00:30现在让我们直接进入实操。由于我使用的是 Mac 且配有 M4 Pro 芯片,
00:00:40没有英伟达显卡会导致运行更困难,所以我会在 Google Colab 上运行这一切。
00:00:46首先,我会快速检查一下 GPU 情况,然后通过 pip 安装所有的依赖包。
00:00:51我要安装 PyTorch、Hugging Face 和 DeepSpeed,然后运行 ds_report 来检查 CUDA 和编译器的设置。
00:00:59再多装几个包,确保运行顺畅。
00:01:02接下来我们要创建 config.json 文件来配置 DeepSpeed。这个配置文件才是重头戏。
00:01:09我们将从 ZeRO 阶段二开始,它会将优化器状态和梯度分散到
00:01:14多个 GPU 上,从而显著减少内存使用,而模型参数仍保持副本同步。别想得太复杂,这步当初可把我折腾坏了。
00:01:22建议从官方文档开始,一次只改动一个地方,千万别乱加
00:01:28各种配置。你可以在 Hugging Face 和 DeepSpeed 的文档中找到相关的配置参考。
00:01:34我的 Python 脚本大部分也是从这些文档里直接拿来的。
00:01:37不过为了让我的 Mac 系统处理得更好,我做了一些细微的调整。
00:01:42如果这一步失败了,就先停下来,因为大多数 DeepSpeed 的问题都是 CUDA 匹配问题,而不是你的模型问题。
00:01:48现在我们运行一下,看看它的表现。
00:01:51为了让示例跑得更快,我会导入一个小型数据集。
00:01:58好了,几分钟后就能看到训练步数和 GPU 显存的使用峰值。
00:02:03没错,这次运行的训练损失值其实没怎么下降。
00:02:08但我们可以通过优化或使用更大数据集来改善损失。现在,
00:02:13来看看人们最容易踩的坑——即便用了它,有时还是会显存溢出。
00:02:16ZeRO 分为不同阶段,每个阶段都在回答一个问题:我可以停止在单张 GPU 上存储哪些内容?
00:02:24第一阶段对优化器状态进行分片;第二阶段在此基础上又对梯度进行了分片。
00:02:30现在你正在大幅削减那些悄悄吞噬内存的负载。然后我们还有 ZeRO 第三阶段。
00:02:36这是个大杀器。它对优化器状态、梯度和参数全部进行分片处理。
00:02:40这是对内存的最大程度优化,但即便如此,有时可能还是不够用。
00:02:45如果你还是跑不动模型,ZeRO-Infinity 可以将数据卸载到 CPU 甚至 NVMe 硬盘上。
00:02:50是的,虽然这是在用速度换规模,但有时首要任务是得先让模型跑起来。
00:02:56如果你觉得内存不是唯一的问题,那你说对了。DeepSpeed 还支持数据并行、
00:03:04流水线并行和张量并行的 3D 并行技术,并且内置了对混合专家模型(MoE)的支持。
00:03:09这样稀疏模型就不会耗尽你的算力了。
00:03:12现在我们有了真正的选择。DeepSpeed 与 Hugging Face 和 Accelerate 集成得非常好,
00:03:19所以你不需要从零开始构建所有东西。
00:03:21基本上只需按需取用即可。至于基准测试,它很大程度上取决于你的硬件配置,
00:03:27所以不要盲目相信那些漂亮的数据。我自己尝试跑了几次,
00:03:30但重申一遍,由于我用的是 M4 Pro,在这种基础模型上很难再进行进一步优化了。
00:03:36虽然不好定论,但其他 DeepSpeed 项目已经展现出了巨大的吞吐量优势,
00:03:41尤其是在内存成为瓶颈的情况下。如果你使用的是 Windows 或 Linux,收益会非常明显。
00:03:46所以,最好的办法就是去尝试。先从官方配置开始,
00:03:51就像我在这里做的一样:针对 Mac 做点微调,然后解决 CUDA 问题。
00:03:56如果你启用了卸载功能,记得观察 CPU 内存。如果你之后决定使用多显卡并行,
00:04:01Accelerate 会帮到你。DeepSpeed 基本上就是那个“老子今天绝不内存溢出”的保底按钮。
00:04:07一旦你理解了 ZeRO 和卸载机制,在有限的硬件上运行超大模型就变得触手可及。
00:04:14虽然刚开始配置时确实会让人头大。
00:04:17如果这个工具帮到了你或者你喜欢这类开发工具,请订阅关注,我们下期视频见。

Key Takeaway

DeepSpeed 通过其核心的 ZeRO 优化技术和灵活的硬件卸载机制,让开发者能够在有限的硬件显存上成功运行并训练超大规模深度学习模型。

Highlights

DeepSpeed 是微软开发的开源库,旨在解决 PyTorch 训练中的显存溢出(OOM)问题

ZeRO 技术通过对优化器状态、梯度和参数进行切片处理,极大降低了单卡显存占用

ZeRO 分为三个阶段,第三阶段是最高级别的显存优化方案

ZeRO-Infinity 支持将显存负载卸载到 CPU 或 NVMe 硬盘,实现用速度换取规模

DeepSpeed 与 Hugging Face 和 Accelerate 深度集成,简化了大模型分布式训练的门槛

配置过程中最常见的障碍是 CUDA 环境匹配问题,而非模型本身的代码逻辑

Timeline

DeepSpeed 核心概念与 ZeRO 技术简介

本段介绍了由微软开发的开源库 DeepSpeed,它能直接接入 PyTorch 框架以解决训练中的核心痛点。视频指出大模型训练失败的主因并非运行速度慢,而是优化器状态、梯度和参数导致了显存溢出。作者详细解释了其核心秘诀 ZeRO 技术,该技术利用切片原理处理训练状态,避免了在每个 GPU 上存储重复数据的浪费。这部分内容强调了优化显存分配对单卡运行大模型的重要性。对于初学者来说,理解这些技术背景是掌握大模型微调的第一步。

实操演示:在 Google Colab 上配置环境

视频博主分享了在 Mac M4 Pro 环境下运行 DeepSpeed 的局限性,并建议使用 Google Colab 作为替代实验平台。演示过程包括检查 GPU 状态、通过 pip 安装 PyTorch、Hugging Face 和 DeepSpeed 等必要依赖包。博主重点展示了使用 ds_report 工具来验证 CUDA 环境和编译器的配置是否正确。这一步至关重要,因为许多后续报错都源于底层环境的不兼容。通过快速的脚本检查,可以确保训练环境在正式运行前已经准备就绪。

关键配置文件 config.json 的编写与调优

博主深入讲解了 DeepSpeed 配置文件的编写逻辑,称其为整个框架的“重头戏”。从 ZeRO 阶段二开始配置,重点在于将优化器状态和梯度分散到多个 GPU 上,同时保持模型参数副本同步。视频建议新手应直接参考官方文档,采取“每次只改一个地方”的策略,切忌盲目添加复杂配置。作者还提到针对 Mac 系统的微调经验,并强调大多数失败案例源于 CUDA 匹配问题。这种循序渐进的配置方法能有效降低开发者在初期遇到的挫败感。

模型运行实测与训练损失观察

这部分展示了模型在导入小型数据集后的实际运行表现,旨在快速验证配置是否生效。几分钟的运行后,博主展示了训练步数以及 GPU 显存的使用峰值数据。虽然本次测试中的训练损失值下降并不明显,但博主解释这可以通过优化参数或扩大数据集来解决。重点在于证明了模型能够在受限显存下稳定跑完训练流程,而不发生崩溃。这验证了 DeepSpeed 在资源受限环境下的实用价值。对于开发者而言,先让模型“跑通”往往比追求即时的性能指标更重要。

深入剖析 ZeRO 阶段与 ZeRO-Infinity 卸载机制

博主详细对比了 ZeRO 的三个阶段:第一阶段负责优化器状态分片,第二阶段加入梯度分片,第三阶段则是对参数也进行分片。如果这些优化仍不足以支撑模型,ZeRO-Infinity 提供了将数据卸载到 CPU 甚至 NVMe 的终极方案。这种方案虽然通过牺牲一部分计算速度来换取模型规模,但却是解决硬件瓶颈的保底手段。此外,DeepSpeed 还支持 3D 并行技术和混合专家模型(MoE),防止稀疏模型耗尽算力。这一章节完整勾勒出了 DeepSpeed 应对超大规模计算的阶梯式策略。

总结与针对不同平台的优化建议

最后一部分讨论了 DeepSpeed 与 Hugging Face、Accelerate 的生态集成,极大简化了开发流程。博主提醒观众不要迷信现成的基准测试数据,因为实际吞吐量取决于具体的硬件配置。他指出 Windows 和 Linux 用户能从 DeepSpeed 中获得最明显的收益,而 Mac 用户则需更多微调。视频总结道,一旦掌握了 ZeRO 和卸载机制,在普通硬件上运行大模型就不再是遥不可及的梦想。尽管初始配置过程可能让人头大,但 DeepSpeed 是大模型微调中不可或缺的利器。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video