FSDP(Fully Sharded Data Parallel)

在这里插入图片描述
完全分片数据并行 (FSDP) ,它将AI 模型的参数分片到数据并行工作器上,并且可以选择将部分训练计算卸载到 CPU。顾名思义,FSDP 是一种数据并行训练算法。尽管参数被分片到不同的GPU,但每个微批次数据的计算仍然是每个 GPU Worker 本地的。这种概念上的简单性使得 FSDP 更容易理解,并且更适用于广泛的使用场景(与层内并行和管道并行相比)。与优化器状态+梯度分片数据并行方法相比,FSDP 参数分片更均匀,并且能够通过训练期间的通信和计算重叠获得更好的性能。

借助 FSDP,现在可以使用更少的 GPU 更有效地训练数量级更大的模型。FSDP 已在FairScale 库中实施,允许工程师和开发人员使用简单的 API 扩展和优化模型的训练。在 Facebook,FSDP 已经被集成并测试用于训练我们的一些NLP和Vision模型。

大规模训练的计算成本高

NLP 研究是一个特殊领域,我们可以看到有效利用计算来训练人工智能的重要性。去年,OpenAI 宣布他们已经训练了GPT-3,这是有史以来最大的神经语言模型,拥有 1750 亿个参数。据估计,训练GPT-3 大约需要 355 个 GPU 年,相当于 1,000 个 GPU 连续工作四个多月。

除了需要大量的计算和工程资源之外,大多数像这样的扩展方法都会引入额外的通信成本,并要求工程师仔细评估内存使用和计算效率之间的权衡。例如,典型的数据并行训练需要在每个 GPU 上维护模型的冗余副本,并且模型并行训练会引入额外的通信成本以在工作线程 (GPU) 之间移动激活。

相比之下,FSDP 相对来说不需要权衡。它通过跨 GPU 分片模型参数、梯度和优化器状态来提高内存效率,并通过分解通信并将其与前向和后向传递重叠来提高计算效率。FSDP 产生与标准分布式数据并行 (DDP) 训练相同的结果,并且可在易于使用的界面中使用,该界面是 PyTorch 的 DistributedDataParallel 模块的直接替代品。我们的早期测试表明,FSDP 可以扩展到数万亿个参数。

FSDP的运作方式

在标准 DDP 训练中,每个工作人员处理一个单独的批次,并使用全归约操作对各个工作人员的梯度进行求和。虽然 DDP 已经变得非常流行,但它占用的 GPU 内存超出了其需要,因为模型权重和优化器状态会在所有 DDP 工作线程之间复制。

减少重复的一种方法是应用称为全参数分片的过程,其中仅提供本地计算所需的模型参数、梯度和优化器的子集。这种方法的实现 ZeRO-3 已被 Microsoft 推广。

解锁全参数分片的关键在于我们可以将DDP 中的全归约操作分解为单独的归约分散和全收集操作:

在这里插入图片描述
然后,我们可以重新安排reduce-scatter和all-gather,以便每个DDP工作线程只需要存储参数和优化器状态的单个分片。下图说明了标准 DDP 培训(上)和 FSDP 培训(下):
在这里插入图片描述
在这里插入图片描述
为了最大限度地提高内存效率,我们可以在每层前向传递后丢弃全部权重,为后续层节省内存。这可以通过将 FSDP 包装器应用到网络中的每一层来实现(使用reshard_after_forward=True )。

FSDP的使用

语言模型中使用FSDP

在这里插入图片描述

计算机视觉模型中使用FSDP

在这里插入图片描述

PyTorch Lightning中使用FSDP

在这里插入图片描述
在这里插入图片描述

FairScale中使用FSDP

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考资料
Fully Sharded Data Parallel: faster AI training with fewer GPUs

一、目的1. 加速训练过程2. 适应大规模数据3. 资源利用率高4. 提升训练速度5. 增大系统容量6. 提高系统可用性7. 加速模型迭代二、 LLaMA-Factory1.安装2. LLaMA-Factory 校验三、 训练引擎1.DDP2. DeepSpeed3.FSDP四、WebUI五. 参数配置1. 模型2. 数据3. 训练参数4. 多卡参数1. ZeRO-12. ZeRO-23. ZeRO-3六、训练七、推理八、XTuner一、目的分布式训练是一种在多个计算节点上共同完成机器学习模型训练任务的过程,它可以充分利用多台计算机的资源,提高训练效率和模型准确性。分布式训练的主要优势包括:1. 加速训练过程通过并行计算,分布式训练大幅缩短了训练时间,提高了训练效率。提高模型准确性:利用更多的计算资源和数据样本进行训练,减少了过拟合风险,提高了模型的泛化能力和准确性。2. 适应大规模数据分布式训练能够处理传统单机训练难以应对的大规模数据集。3. 资源利用率高有效利用了计算资源,避免了单机训练时的资源闲置和浪费。4. 提升训练速度通过并行计算,分布式训练能够显著缩短模型训练的时间,尤其是在处理大规模数据集和复杂模型时效果更为明显。5. 增大系统容量随着业务量的增长,单机性能已无法满足需求。分布式训练通过多台计算设备的协同工作,能够应对更大规模的应用场景。6. 提高系统可用性分布式架构能够消除单点故障,提高系统的整体可用性。即使某个计算设备出现故障,也不会影响整个训练任务的进行。7. 加速模型迭代在快速迭代的机器学习项目中,分布式训练能够更快地完成模型训练,从而加速模型迭代和优化过程。总的来说,分布式训练在深度学习领域提高训练效率和加快模型收敛的重要手段 。二、 LLaMA-Factory1.安装在安装 LLaMA-Factory 之前,请确保您安装了下列依赖:运行以下指令以安装 LLaMA-Factory 及其依赖:git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"123如果出现环境冲突,请尝试使用 pip install --no-deps -e . 解决2. LLaMA-Factory 校验完成安装后,可以通过使用 llamafactory-cli version 来快速校验安装是否成功如果看到类似下面的界面,就说明安装成功了。 Successfully uninstalled requests-2.31.0 Attempting uninstall: anyio Found existing installation: anyio 4.4.0 Uninstalling anyio-4.4.0: Successfully uninstalled anyio-4.4.0Successfully installed accelerate-1.2.1 aiofiles-23.2.1 aiohappyeyeballs-2.4.6 aiohttp-3.11.12 aiosignal-1.3.2 annotated-types-0.7.0 anyio-4.8.0 audioread-3.0.1 av-14.1.0 click-8.1.8 datasets-3.2.0 dill-0.3.8 docstring-parser-0.16 einops-0.8.1 fastapi-0.115.8 ffmpy-0.5.0 fire-0.7.0 frozenlist-1.5.0 gradio-5.12.0 gradio-client-1.5.4 huggingface-hub-0.28.1 jieba-0.42.1 joblib-1.4.2 lazy-loader-0.4 librosa-0.10.2.post1 llamafactory-0.9.2.dev0 llvmlite-0.44.0 markdown-it-py-3.0.0 mdurl-0.1.2 msgpack-1.1.0 multidict-6.1.0 multiprocess-0.70.16 nltk-3.9.1 numba-0.61.0 orjson-3.10.15 pandas-2.2.3 peft-0.12.0 pooch-1.8.2 propcache-0.2.1 pyarrow-19.0.0 pydantic-2.10.6 pydantic-core-2.27.2 pydub-0.25.1 python-multipart-0.0.20 pytz-2025.1 regex-2024.11.6 requests-2.32.3 rich-13.9.4 rouge-chinese-1.0.3 ruff-0.9.6 safehttpx-0.1.6 safetensors-0.5.2 scikit-learn-1.6.1 scipy-1.15.1 semantic-version-2.10.0 sentencepiece-0.2.0 shellingham-1.5.4 shtab-1.7.1 soundfile-0.13.1 soxr-0.5.0.post1 sse-starlette-2.2.1 starlette-0.45.3 termcolor-2.5.0 threadpoolctl-3.5.0 tiktoken-0.9.0 tokenizers-0.21.0 tomlkit-0.13.2 tqdm-4.67.1 transformers-4.48.3 trl-0.9.6 typer-0.15.1 typing-extensions-4.12.2 tyro-0.8.14 tzdata-2025.1 uvicorn-0.34.0 websockets-14.2 xxhash-3.5.0 yarl-1.18.3WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venvroot@autodl-container-c2d74383d9-db8bb7c4:~/autodl-tmp/LLaMA-Factory# llamafactory-cli version----------------------------------------------------------| Welcome to LLaMA Factory, version 0.9.2.dev0 || || Project page: https://github.com/hiyouga/LLaMA-Factory |----------------------------------------------------------root@autodl-container-c2d74383d9-db8bb7c4:~/autodl-tmp/LLaMA-Factory# 1234567891011121314三、 训练引擎LLaMA-Factory 支持单机多卡和多机多卡分布式训练。同时也支持 DDP , DeepSpeed 和 FSDP 三种分布式引擎。1.DDPDDP (DistributedDataParallel) 通过实现模型并行和数据并行实现训练加速。 使用 DDP 的程序需要生成多个进程并且为每个进程创建一个 DDP 实例,他们之间通过 torch.distributed 库同步。2. DeepSpeedDeepSpeed 是微软开发的分布式训练引擎,并提供ZeRO(Zero Redundancy Optimizer)、offload、Sparse Attention、1 bit Adam、流水线并行等优化技术。 您可以根据任务需求与设备选择使用。3.FSDP通过全切片数据并行技术(Fully Sharded Data Parallel)来处理更多更大的模型。在 DDP 中,每张 GPU 都各自保留了一份完整的模型参数和优化器参数。而 FSDP 切分了模型参数、梯度与优化器参数,使得每张 GPU 只保留这些参数的一部分。 除了并行技术之外,FSDP 还支持将模型参数卸载至CPU,从而进一步降低显存需求。由于deepseek分布式训练加速,采用混合精度(fp16/fp32)和ZeRO优化,减少显存占用,从而加速训练。所以本文采用DeepSpeed 是训练引擎。四、WebUILLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 在完成 安装 后,您可以通过以下指令进入 WebUI:llamafactory-cli webui1WebUI 主要分为四个界面:训练、评估与预测、对话、导出。当运行上面命令后,打开如下界面在开始训练模型之前,需要指定的参数有:模型名称及路径训练阶段微调方法训练数据集学习率、训练轮数等训练参数微调参数等其他参数输出目录及配置路径
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值