尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
07-FSDP分布式训练多卡跑大模型不再OOM
FSDP分布式训练:多卡跑大模型不再OOM单卡显存不够,第一反应就是"加卡"。但多卡不是插上去就能用——数据怎么分、梯度怎么同步、显存怎么管,这三个问题搞不定,8张卡也跑不起来。PyTorch FSDP(Fully Sharded Data Parallel)是目前最推荐的多卡训练方案。这篇把FSDP的原理、配置、踩坑全讲清楚。为什么不推荐DDPDDP(DistributedDataParallel)是PyTorch最早的多卡方案,原理简单:每张卡保存完整的模型副本,数据分片,各自前向反向后同步梯度。问题在于:每张卡都要装下完整模型。7B模型fp16要14GB,加上梯度和优化器状态,单卡要56GB。A100 80GB才能跑,40GB都不够。DDP每卡显存 = 模型权重 + 梯度 + 优化器状态 + 激活值 ≈ 14GB + 14GB + 28GB + ~10GB ≈ 66GBFSDP的思路:模型参数也分片。每张卡只存1/N的参数,需要的时候从其他卡收集(all-gather),用完就扔掉。FSDP每卡显存 = 模型权重/N + 梯度/N + 优化器状态/N + 激活值/N + 临时通信缓冲 ≈ 14GB/4 + 14GB/4 + 28GB/4 + ~10GB/4 + ~2GB ≈ 16.5GB (4卡FSDP)4张A100 40GB就能跑7B模型全参数训练。FSDP的执行流程FSDP在每个Module级别做分片。前向传播时:1. 当前层需要计算 → all-gather收集所有卡上该层的参数分片 → 拼出完整参数 2. 用完整参数做前向计算 3. 计算完 → 丢掉非本卡的参数分片,释放显存 4. 反向传播时同样:按需gather,用完释放关键点:只有正在计算的层才占完整显存。其他层的参数都是分片状态,只占1/N。这和梯度检查点(gradient checkpointing)的"用时间换空间"不同——FSDP不增加计算量,只是增加了通信开销。FSDP实战代码启动分布式训练importosimporttorchimporttorch.distributedasdistfromtorch.distributed.fsdpimportFullyShardedDataParallelasFSDPfromtorch.distributed.fsdpimportMixedPrecision,ShardingStrategyfromtorch.distributed.fsdp.wrapimporttransformer_auto_wrap_policydefsetup_distributed():"""初始化分布式环境"""dist.init_process_group(backend="nccl")local_rank=int(os.environ["LOCAL_RANK"])torch.cuda.set_device(local_rank)returnlocal_rank,dist.get_rank(),dist.get_world_size()defcleanup_distributed():dist.destroy_process_group()用torchrun启动(不是python直接跑):# 4卡训练torchrun--nproc_per_node=4train.py# 2机8卡(每机4卡)torchrun--nproc_per_node=4--nnodes=2--node_rank=0--master_addr=192.168.1.1--master_port=29500train.pytorchrun会自动设置RANK、WORLD_SIZE、LOCAL_RANK等环境变量。配置FSDPdefcreate_fsdp_model(model:nn.Module,rank:int)-FSDP:"""将模型包装为FSDP"""# 混合精度配置mp_policy=MixedPrecision(param_dtype=torch.bfloat16,
RELATED

相关推荐

MonkeyCode 是什么?

MonkeyCode 是什么?

零安装 免费使用 云端开发环境 多模型支持MonkeyCode 是什么?想用 AI 写代码,以前得先装 Python、配 Node.js,注册各种 API Key,下载编辑器,折腾半天还没写出一行代码。MonkeyCode 把这些步骤省掉了。MonkeyCode 是…

📅 2026/8/24 12:50:49
英雄联盟智能助手:如何用Seraphine提升你的排位赛胜率

英雄联盟智能助手:如何用Seraphine提升你的排位赛胜率

英雄联盟智能助手:如何用Seraphine提升你的排位赛胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否曾经在排位赛BP阶段手忙脚乱,错过了禁用关键英雄的机会?是否希…

📅 2026/8/24 12:50:49
3D图形开发核心:矩阵基础与MVP变换实战指南

3D图形开发核心:矩阵基础与MVP变换实战指南

1. 项目概述:为什么3D图形离不开矩阵? 如果你刚开始接触3D图形编程,无论是Unity、Unreal Engine,还是WebGL、Three.js,很快就会被一个词刷屏:矩阵。无论是物体的移动、旋转、缩放,还是摄像机的视…

📅 2026/8/24 12:50:49
MORE NEWS

更多资讯

📰

AI工程从零到一:技术栈路线、部署实践与避坑指南

很多朋友问我,网上铺天盖地的“AI工程”到底学什么、从哪里动手、是不是非得是科班出身才能碰。我做过几年机器学习平台,也带过几个从零转行的新人,今天就把我脑子里的那张路线图完整摊开讲一遍。这篇内容不卖焦虑、不堆术语,就以…

📰

Python网络舆情分析系统:前后端源码部署与可视化实战

简介:这是一套基于Python开发的网络舆情分析系统完整源码,面向毕业设计、课程设计或舆情监控管理人员,解决多用户言论采集、情感倾向分析与可视化展示等需求。资源共289个文件,压缩包约83.39MB,包含42个Python程序文件…

📰

Ory Kratos与Hydra快速开始:邮箱注册登录与身份认证实践

做了几年后端,最让我头疼的不是业务逻辑,而是“账号体系”这四个字。密码怎么存、会话怎么管、CSRF怎么防、邮件验证怎么发、被恶意注册怎么办……一套东西全堆在自己身上,又累又容易出漏洞。后来我接触了 Ory 这套开源身份生态,才…

📰

MySQL宽表优化:拆表、TEXT存储与字符集精算实战

先说个亲身经历。去年我接手一张 MySQL 订单宽表,整表 48 个字段,里面塞了三个 LONGTEXT 分别存买家备注、卖家留言和一段物流协议原文,字符集还是从 latin1 时代一路迁过来的老 utf8。表里两千多万行,每次拉订单列表,…

📰

ARIMAX多变量时间序列预测:从原理到Python实现与避坑指南

简介:基于ARIMAX的多变量预测模型Python源码与配套数据集,面向有一定时间序列分析基础、希望用Python实现多元外生变量预测的读者,常用于经济指标、销量预测、能源负荷等场景,也是科研与竞赛中常用的预测方案。压缩包内共7个文件&…

📰

3ds Max点线面编辑核心技巧:从布线到硬表面建模全面解析

3ds Max 的点线面编辑,说到底是所有多边形建模绕不开的核心基本功。很多人一开始觉得它枯燥,总觉得直接拖拽、拉伸“看起来差不多就行”,但真到做硬表面、做角色、做游戏资产的时候,你会发现布线就是一切——没有合理的点线面结构…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬