SuperAPI AI 工具集

pytorch-fsdp2

通用与其它

查看项目

更新于 10-16 03:36

技能介绍

用途:指导编码智能体在训练循环中正确加入 PyTorch FSDP2,主要 API 为 torch.distributed.fsdp.fully_shard 及其就地添加到模块上的 FSDPModule 方法。

主要能力与规则:用 torchrun 启动并按 LOCAL_RANK 设置 CUDA 设备;自底向上应用 fully_shard(先子模块如 Transformer 块,再根模块);调用 model(input) 而非 model.forward(input) 以触发钩子;在分片后创建优化器,使其基于 DTensor 参数;检查点优先用分布式检查点(DCP)或分布式 state dict 辅助函数,避免直接 torch.save(model.state_dict())。

配置要点:可用 reshard_after_forward 权衡显存与吞吐;通过 MixedPrecisionPolicy 设置 param_dtype、reduce_dtype、output_dtype、cast_forward_inputs;用 CPUOffloadPolicy 做 CPU 卸载;梯度累积用 set_requires_gradient_sync 而非 FSDP1 的 no_sync;大模型可先在 meta 设备建模型,分片后 to_empty 并 reset_parameters。

适用场景:模型参数、梯度与优化器状态单卡放不下;需要比 FSDP1 更可检查、分片 state dict 更简单的逐参数分片;后续用 DeviceMesh 组合并行。

限制:需要较新 PyTorch 版本;DCP 对跨版本严格向后兼容的检查点有警告;若需经典数据并行可用 DDP,若需原版分片包装可用 FSDP1。具体示例见资料所列 references 文件。