import torch
import torch.nn.functional as F
from torch.utils.data import Dataset, DataLoader
import torch.multiprocessing as mp
from torch.utils.data.distributed import DistributedSampler
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.distributed import init_process_group, destroy_process_group
import os
class MyTrainDataset(Dataset):
def __init__(self, size):
self.size = size
self.data = [(torch.rand(20), torch.rand(1)) for _ in range(size)]
def __len__(self):
return self.size
def __getitem__(self, index):
return self.data[index]
def ddp_setup(rank, world_size):
"""
Args:
rank: Unique identifier of each process
world_size: Total number of processes
"""
os.environ["MASTER_ADDR"] = "localhost"
os.environ["MASTER_PORT"] = "12355"
init_process_group(backend="gloo", rank=rank, world_size=world_size)
torch.cuda.set_device(rank)
class Trainer:
def __init__(
self,
model: torch.nn.Module,
train_data: DataLoader,
optimizer: torch.optim.Optimizer,
gpu_id: int,
save_every: int,
) -> None:
self.gpu_id = gpu_id
self.model = model.to(gpu_id)
self.train_data = train_data
self.optimizer = optimizer
self.save_every = save_every
self.model = DDP(model, device_ids=[gpu_id])
def _run_batch(self, source, targets):
self.optimizer.zero_grad()
output = self.model(source)
loss = F.cross_entropy(output, targets)
loss.backward()
self.optimizer.step()
def _run_epoch(self, epoch):
b_sz = len(next(iter(self.train_data))[0])
print(f"[GPU{self.gpu_id}] Epoch {epoch} | Batchsize: {b_sz} | Steps: {len(self.train_data)}")
self.train_data.sampler.set_epoch(epoch)
for source, targets in self.train_data:
source = source.to(self.gpu_id)
targets = targets.to(self.gpu_id)
self._run_batch(source, targets)
def _save_checkpoint(self, epoch):
ckp = self.model.module.state_dict()
PATH = "checkpoint.pt"
torch.save(ckp, PATH)
print(f"Epoch {epoch} | Training checkpoint saved at {PATH}")
def train(self, max_epochs: int):
for epoch in range(max_epochs):
self._run_epoch(epoch)
if self.gpu_id == 0 and epoch % self.save_every == 0:
self._save_checkpoint(epoch)
def load_train_objs():
train_set = MyTrainDataset(2048) # load your dataset
model = torch.nn.Linear(20, 1) # load your model
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
return train_set, model, optimizer
def prepare_dataloader(dataset: Dataset, batch_size: int):
return DataLoader(
dataset,
batch_size=batch_size,
pin_memory=True,
shuffle=False,
sampler=DistributedSampler(dataset)
)
def main(rank: int, world_size: int, save_every: int, total_epochs: int, batch_size: int):
ddp_setup(rank, world_size)
dataset, model, optimizer = load_train_objs()
train_data = prepare_dataloader(dataset, batch_size)
trainer = Trainer(model, train_data, optimizer, rank, save_every)
trainer.train(total_epochs)
destroy_process_group()
if __name__ == '__main__':
world_size = torch.cuda.device_count()
mp.spawn(main
, args=(world_size
,10
,10
,10)
, nprocs=world_size)
相关推荐
PyTorch DDP单机多卡实战:从零到高效训练的完整指南
本文是PyTorch DDP单机多卡训练的完整实战指南,详细解析了DDP相较于DataParallel的负载均衡优势及其核心概念。通过从零开始的代码改造步骤、两种主流启动方式详解以及常见避坑指南,帮助开发者高效利用多GPU资源,实现接近线性的训练加速,并涵盖混合精度训练等进阶优化技巧。
PyTorch单机多卡分布式训练(源代码讲解)
PyTorch单机多卡分布式训练
pytorch cv自带预训练图像模型再微调;DDP单机多GPU卡训练
参考: https://pytorch.org/docs/0.4.1/torchvision/models.html https://zhuanlan.zhihu.com/p/436574436 https://blog.youkuaiyun.com/u014297502/article/details/125884141
ResNet实战:单机多卡DDP方式、混合精度训练
文章目录摘要apexDP和DDPParameter Server架构(PS模式)ring-all-reduce模式DDP的基本用法 (代码编写流程)Mixup项目结构计算mean和std生成数据集训练导入项目使用的库设置全局参数设置distributed图像预处理与增强读取数据设置模型定义训练和验证函数测试 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,模型使用最经典的resnet50,演示如何实现混合精度训练以及如何使用DDP的方式实现多卡并行训练。 通过本文你和学到: 1、如
Tomcat漏洞——弱口令爆破
靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。
视频编解码——视频编解码器工作原理
目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间
单机多卡训练-DDP
DDP通过Ring-Reduce(梯度合并)的数据交换方法提高了通讯效率,并通过启动多个进程的方式减轻Python GIL的限制,从而提高训练速度。,建议在保存模型时,去除模型参数字典里面的module,如何去除呢,每一个epoch里面真正的打乱数据。增大batch size提高并行度。
SOLIDWORKS转CAD字体终极选择:TrueType vs SHX,哪个才是你图纸协作的“安全牌”?
本文深入探讨SOLIDWORKS转CAD工程图中的字体选择问题,对比TrueType与SHX字体在DWG文件协作中的表现。通过真实案例揭示字体映射的兼容性陷阱,提供企业级字体管理方案,帮助工程师规避版本差异、系统依赖和法律风险,确保图纸协作的稳定性。
「分布式训练」使用 DDP 实现程序单机多卡并行指南
「大模型微调」使用 DDP 实现程序单机多卡并行指南
【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)
本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。
华为OD机试 - 去除多余空格(Python/JS/C/C++ 2024 E卷 100分)
本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束:输入为两行字符串:第一行:待去除多余空格的文本,用例保证如果有单引号,则单引号成对出现,且单引号可能有多对。 第二
PyTorch DDP模式单机多卡训练
PyTorch DDP模式单机多卡训练
点云数据生成DEM,并导出三维模型
点云数据生成DEM,并导出三维模型
pytorch单机多卡DistributedDataParallel (DDP)分布式训练
利用pytorch的DistributedDataParallel进行单机多卡分布式训练。
Arcgis中的模型构建器技术之按属性批量建库并对应输出
好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。
ROS局部路径规划器插件teb_local_planner流程梳理(上)
在我之前的文章《ROS导航包Navigation中的 Movebase节点路径规划相关流程梳理》中已经介绍过Move_base节点调用局部路径规划器插件的接口函数是computeVelocityCommands,接下来,我们就从这个函数入手梳理一下teb_local_planner功能包的工作流程。
PyTorch分布式训练入门:单机多卡基于CUDA的DDP实现
通过PyTorch的DDP与CUDA容器化部署,实现单机多卡高效并行训练。文章详解了DDP的工作机制、关键代码实践与常见陷阱,并强调使用容器统一环境的重要性。配合分布式采样、AllReduce通信和合理资源配置,可显著提升GPU利用率与训练速度,为后续多机扩展打下基础。
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
PyTorch训练(三):DDP(DistributedDataParallel)【“单机多卡”、“多机多卡”分布式训练模式】【支持混合精度(fp16/fp32)】【只将数据并行,模型大于显卡则不行】
一、概述 我们知道 PyTorch 本身对于单机多卡提供了两种实现方式 DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。 DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。 DataParallel(DP)是基于Parameter server的算法,实现比较简单,只需在原单机单卡代码的基础上增加一行: gpu_ids = [0, 2, 3] mode.
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
PyTorch单机多卡训练实战:从DataParallel到DDP的完整代码演进
本文详细对比了PyTorch中DataParallel与DistributedDataParallel两种单机多卡训练方案的性能差异与实现原理。针对DataParallel存在的通信瓶颈问题,文章提供了从DP快速原型到DDP生产级部署的完整代码演进指南,涵盖进程组初始化、DistributedSampler配置、模型包装及多进程启动等核心步骤,帮助开发者实现高效的分布式训练。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
Pytorch 单机多卡训练DDP
多卡训练方式 1.DP——torch.nn.DataParallel 2.DDP——torch.nn.parallel.DistributedDataParallel 方法比较 方法1简单,但是这种方式训练有不足之处。方法2要改动的地方比较多,但是速度更快。而且当模型很大的时候使用DataParallel我遇到了一个问题,报错说模型参数不在一个device上,这很有可能是单张卡放不下这些参数,但是具体的原因我也不清楚 ...
别再只用DataParallel了!PyTorch单机多卡训练保姆级教程:从DP到DDP的完整迁移指南
本文详细介绍了PyTorch单机多卡训练从DataParallel(DP)到DistributedDataParallel(DDP)的完整迁移指南。通过分析DP的局限性,如GPU利用率不均衡和通信效率低下,展示了DDP在多进程架构和高效通信方面的优势。提供从代码实现到高级优化技巧的实战教程,帮助开发者显著提升训练速度和稳定性。
PyTorch单机多卡训练(DDP-DistributedDataParallel的使用)备忘记录
PyTorch使用DDP进行单机多卡训练备忘记录
PyTorch 单机多卡DDP进行分布式训练
"nccl"指各GPU间的通信方式world_size参数指当前节点上有多少张卡rank指当前进程是在哪一张GPU卡上,其argument由torch.multiprocessing.spawn传入。
Pytorch单机多卡分布式训练
Pytorch单机多卡分布式训练
PyTorch训练(二):DP(DataParallel)【“单机多卡”训练模式】【简单方便、速度慢、GPU 负载不均衡】【不推荐使用DP,推荐使用DDP】[
一、概述 我们知道 PyTorch 本身对于单机多卡提供了两种实现方式 DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。 DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。 DataParallel(DP)是基于Parameter server的算法,实现比较简单,只需在原单机单卡代码的基础上增加一行: model = nn.DataParallel(m
314



被折叠的 条评论
为什么被折叠?



