[Pytorch]基于DDP的单机多卡训练

分布式训练 - 单机多卡(DP和DDP) 起初为调用大规模的模型训练,单卡GPU是不够使用的,需要借用服务器的多GPU使用。就会涉及到单机多卡,多机多卡的使用。在这里记录一下使用的方式和踩过的一些坑。文中若有不足,请多多指正。 由于分布式的内容较多,笔者准备分几篇来讲一次下深度学习的分布式训练,深度学习的框架使用的是Pytorch框架。 ----1.分布式训练的理论基础 ----2.GPU训练 ----3.单机多卡的使用 ----4.多机多卡的使用 在GPU训练文章中我们已经了解到了多GPU的训练,最简单的是单机多卡操作torch.nn.DataP 阅读详情
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 单机多卡快速上手 本文旨在帮助新人快速上手最有效的 PyTorch 单机多卡训练,对于 PyTorch 分布式训练的理论介绍、多方案对比,本文不做详细介绍,有兴趣的读者可参考: [分布式训练] 单机多卡的正确打开方式:理论基础 当代研究生应当掌握的并行训练方法(单机多卡) DP与DDP 我们知道 PyTorch 本身对于单机多卡提供了两种实现方式 DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。 Distribute 阅读详情

相关推荐

PyTorch DDP单机多卡实战:从零到高效训练的完整指南

本文是PyTorch DDP单机多卡训练的完整实战指南,详细解析了DDP相较于DataParallel的负载均衡优势及其核心概念。通过从零开始的代码改造步骤、两种主流启动方式详解以及常见避坑指南,帮助开发者高效利用多GPU资源,实现接近线性的训练加速,并涵盖混合精度训练等进阶优化技巧。

weixin_29092579的博客 314

PyTorch单机多卡分布式训练(源代码讲解)

PyTorch单机多卡分布式训练

三年就是一辈子 6603

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

weixin_42357472的博客 916

ResNet实战:单机多卡DDP方式、混合精度训练

文章目录摘要apexDP和DDPParameter Server架构(PS模式)ring-all-reduce模式DDP的基本用法 (代码编写流程)Mixup项目结构计算mean和std生成数据集训练导入项目使用的库设置全局参数设置distributed图像预处理与增强读取数据设置模型定义训练和验证函数测试 摘要 本例提取了植物幼苗数据集中的部分数据做数据集,数据集共有12种类别,模型使用最经典的resnet50,演示如何实现混合精度训练以及如何使用DDP的方式实现多卡并行训练。 通过本文你和学到: 1、如

AI浩 3029

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 909

视频编解码——视频编解码器工作原理

目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间

路人coder 1万+

单机多卡训练-DDP

DDP通过Ring-Reduce(梯度合并)的数据交换方法提高了通讯效率,并通过启动多个进程的方式减轻Python GIL的限制,从而提高训练速度。,建议在保存模型时,去除模型参数字典里面的module,如何去除呢,每一个epoch里面真正的打乱数据。增大batch size提高并行度。

vivi_cin的博客 1226

SOLIDWORKS转CAD字体终极选择:TrueType vs SHX,哪个才是你图纸协作的“安全牌”?

本文深入探讨SOLIDWORKS转CAD工程图中的字体选择问题,对比TrueType与SHX字体在DWG文件协作中的表现。通过真实案例揭示字体映射的兼容性陷阱,提供企业级字体管理方案,帮助工程师规避版本差异、系统依赖和法律风险,确保图纸协作的稳定性。

weixin_34233974的博客 264

「分布式训练」使用 DDP 实现程序单机多卡并行指南

「大模型微调」使用 DDP 实现程序单机多卡并行指南

Meiling_up 4651

【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 4万+

华为OD机试 - 去除多余空格(Python/JS/C/C++ 2024 E卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束:输入为两行字符串:第一行:待去除多余空格的文本,用例保证如果有单引号,则单引号成对出现,且单引号可能有多对。 第二

学Java,找哪吒 1216

PyTorch DDP模式单机多卡训练

PyTorch DDP模式单机多卡训练

weixin_37958272的博客 734

点云数据生成DEM,并导出三维模型

点云数据生成DEM,并导出三维模型

qq_42540466的博客 2万+

pytorch单机多卡DistributedDataParallel (DDP)分布式训练

利用pytorch的DistributedDataParallel进行单机多卡分布式训练。

xwyljt的博客 3319

Arcgis中的模型构建器技术之按属性批量建库并对应输出

好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。

weixin_44671081的博客 518

ROS局部路径规划器插件teb_local_planner流程梳理(上)

在我之前的文章《ROS导航包Navigation中的 Movebase节点路径规划相关流程梳理》中已经介绍过Move_base节点调用局部路径规划器插件的接口函数是computeVelocityCommands,接下来,我们就从这个函数入手梳理一下teb_local_planner功能包的工作流程。

慕羽★的博客 5165

PyTorch分布式训练入门:单机多卡基于CUDA的DDP实现

通过PyTorch的DDP与CUDA容器化部署,实现单机多卡高效并行训练。文章详解了DDP的工作机制、关键代码实践与常见陷阱,并强调使用容器统一环境的重要性。配合分布式采样、AllReduce通信和合理资源配置,可显著提升GPU利用率与训练速度,为后续多机扩展打下基础。

weixin_36277197的博客 740

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.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.

u013250861的博客 2184

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配置、模型包装及多进程启动等核心步骤,帮助开发者实现高效的分布式训练。

read5的博客 441

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Pytorch 单机多卡训练DDP

多卡训练方式 1.DP——torch.nn.DataParallel 2.DDP——torch.nn.parallel.DistributedDataParallel 方法比较 方法1简单,但是这种方式训练有不足之处。方法2要改动的地方比较多,但是速度更快。而且当模型很大的时候使用DataParallel我遇到了一个问题,报错说模型参数不在一个device上,这很有可能是单张卡放不下这些参数,但是具体的原因我也不清楚 ...

weixin_44823313的博客 4560

别再只用DataParallel了!PyTorch单机多卡训练保姆级教程:从DP到DDP的完整迁移指南

本文详细介绍了PyTorch单机多卡训练从DataParallel(DP)到DistributedDataParallel(DDP)的完整迁移指南。通过分析DP的局限性,如GPU利用率不均衡和通信效率低下,展示了DDP在多进程架构和高效通信方面的优势。提供从代码实现到高级优化技巧的实战教程,帮助开发者显著提升训练速度和稳定性。

weixin_30268921的博客 402

PyTorch单机多卡训练(DDP-DistributedDataParallel的使用)备忘记录

PyTorch使用DDP进行单机多卡训练备忘记录

Curya的博客 7274

PyTorch 单机多卡DDP进行分布式训练

"nccl"指各GPU间的通信方式world_size参数指当前节点上有多少张卡rank指当前进程是在哪一张GPU卡上,其argument由torch.multiprocessing.spawn传入。

weixin_50609465的博客 1541

Pytorch单机多卡分布式训练

Pytorch单机多卡分布式训练

no1xiaoqianqian的博客 952

PyTorch训练(二):DP(DataParallel)【“单机多卡”训练模式】【简单方便、速度慢、GPU 负载不均衡】【不推荐使用DP,推荐使用DDP】[

一、概述 我们知道 PyTorch 本身对于单机多卡提供了两种实现方式 DataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。 DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。 DataParallel(DP)是基于Parameter server的算法,实现比较简单,只需在原单机单卡代码的基础上增加一行: model = nn.DataParallel(m

u013250861的博客 1302
上一篇: [Golang]开启本地代理下Golang进行Http请求
COMEO
博客等级 码龄11年 0粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值