Pytorch使用教程(12)-如何进行并行训练?

PyTorch 并行训练极简 Demo 我来分享一份非常简单的PyTorch并行训练代码,希望没有学过的读者能够在接触尽可能少的新知识的前提下学会写并行训练。 阅读详情

在使用GPU训练大模型时,往往会面临单卡显存不足的情况。这时,通过多卡并行的形式来扩大显存是一个有效的解决方案。PyTorch主要提供了两个类来实现多卡并行:数据并行torch.nn.DataParallel(DP)和模型并行torch.nn.DistributedDataParallel(DDP)。本文将详细介绍这两种方法。

一、数据并行(torch.nn.DataParallel)

  1. 基本原理
    数据并行是一种简单的多GPU并行训练方式。它通过多线程的方式,将输入数据分割成多个部分,每个部分在不同的GPU上并行处理,最后将所有GPU的输出结果汇总,计算损失和梯度,更新模型参数。
    在这里插入图片描述

  2. 使用方法
    使用torch.nn.DataParallel非常简单,只需要一行代码就可以实现。以下是一个示例:

import torch
import torch.nn as nn

# 检查是否有多个GPU可用
if torch.cuda.device_count() > 1:
    print("Let's use", torch.cuda.device_count(), "GPUs!")
    # 将模型转换为DataParallel对象
    model = nn.DataParallel(model, device_ids=range(torch.cuda.device_count()))
  1. 优缺点
    ‌优点‌:代码简单,易于使用,对小白比较友好。
    ‌缺点‌:GPU会出现负载不均衡的问题,一个GPU可能占用了大部分负载,而其他GPU却负载较轻,导致显存使用不平衡。

二、模型并行(torch.nn.DistributedDataParallel)

  1. 基本原理
    torch.nn.DistributedDataParallel(DDP)是一种真正的多进程并行训练方式。每个进程对应一个独立的训练过程,且只对梯度等少量数据进行信息交换。每个进程包含独立的解释器和GIL(全局解释器锁),因此可以充分利用多GPU的优势,实现更高效的并行训练。
    在这里插入图片描述

  2. 使用方法

    使用torch.nn.DistributedDataParallel需要进行一些额外的配置,包括初始化GPU通信方式、设置随机种子点、使用DistributedSampler分配数据等。以下是一个详细的示例:

初始化环境

import torch
import torch.distributed as dist
import argparse

def parse():
    parser = argparse.ArgumentParser()
    parser.add_argument('--local_rank', type=int, default=0)
    args = parser.parse_args()
    return args

def main():
    args = parse()
    torch.cuda.set_device(args.local_rank)
    dist.init_process_group(
        'nccl', init_method='env://'
    )
    device = torch.device(f'cuda:{args.local_rank}')

设置随机种子点

import numpy as np

# 固定随机种子点
seed = np.random.randint(1, 10000)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)

使用DistributedSampler分配数据
python
Copy Code
from torch.utils.data.distributed import DistributedSampler

train_dataset = ...  # 你的数据集
train_sampler = DistributedSampler(train_dataset, shuffle=True)
train_loader = torch.utils.data.DataLoader(
    train_dataset, batch_size=opts.batch_size, sampler=train_sampler
)

初始化模型

model = mymodel().to(device)
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.local_rank])

训练循环
python
Copy Code
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
criterion = nn.CrossEntropyLoss()

for ep in range(total_epoch):
    train_sampler.set_epoch(ep)
    for inputs, labels in train_loader:
        inputs, labels = inputs.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
  1. 优缺点
  • 优点‌:每个进程对应一个独立的训练过程,显存使用更均衡,性能更优。
  • 缺点‌:代码相对复杂,需要进行一些额外的配置。

三、对比与选择

  1. 对比
特点torch.nn.DataParalleltorch.nn.DistributedDataParallel
并行方式多线程多进程
显存使用可能不均衡更均衡
性能一般更优
代码复杂度简单复杂
  1. 选择建议
  • 对于初学者或快速实验,可以选择torch.nn.DataParallel,因为它代码简单,易于使用。
  • 对于需要高效并行训练的场景,建议选择torch.nn.DistributedDataParallel,因为它可以充分利用多GPU的优势,实现更高效的训练。

四、小结

通过本文的介绍,相信读者已经对PyTorch的多GPU并行训练有了更深入的了解。在实际应用中,可以根据模型的复杂性和数据的大小选择合适的并行训练方式,并调整batch size和学习率等参数以优化模型的性能。希望这篇文章能帮助你掌握PyTorch的多GPU并行训练技术。

详解PyTorch FSDP数据并行(Fully Sharded Data Parallel) 全切片数据并行(Fully Sharded Data Parallel,简称为FSDP)是数据并行的一种新的方式,FSDP最早是在2021年在中提出的,后来合入了PyTorch 1.11版本中。微软之前Deepspeed框架中提出过三种级别的ZERO算法,FSDP可以看成是ZERO-3的实现。传统的数据并行(DDP)是在每一个GPU卡上保存整个model的参数/梯度/优化器状态, 然后对数据集切分为NNN个shard分片给不同的GPU进行训练,计算完梯度后通过all-reduce通信来做梯度的融合。 阅读详情

相关推荐

(单机多卡)4种Pytorch并行训练方法

当代大学生应当掌握的4种Pytorch并行训练方法

weixin_39490300的博客 3808

Pytorch 多卡并行训练教程 (DDP)

Pytorch 多卡并行训练教程 (DDP),关于使用DDP进行多开并行训练 网上有许多教程,而且很多对原理解析的也比较透彻,但是有时候看起来还是比较懵逼,再啃了许多相关的博客后,博主记录了一些自己对于使用torch.nn.DistributedDataParallel(DDP)进行单机多卡并行训练的一些体会,希望能对入门的小白有一定的帮助,不足之处也希望指出,大家一起交流学习。

fovever_的博客 6879

Pytorch 分布式训练(DP/DDP)

1、分布式训练:模型并行和数据并行 分布式训练根据并行策略的不同,可以分为模型并行和数据并行。 模型并行:是网络太大,一张卡存不了,那么拆分,然后进行模型并行训练。 数据并行:多个显卡同时采用数据训练网络的副本。 模型并行不是这里的讨论重点 1.1、数据并行 数据并行的操作要求我们将数据划分成多份,然后发送给多个 GPU 进行并行的计算。 注意:多卡训练要考虑通信开销的,是个trade off的过程,不见得四块卡一定比两块卡快多少,可能是训练到四块卡的时候通信开销已经占了大头 下面是一个简单的

ytusdc的博客 3万+

Pytorch基础|数据并行(DP)以及其Pytorch实现

这篇文章将深入数据并行(Data Parallel,即常说的DP)的原理,并解析数据并行在Pytorch中的实现。

weixin_49659123的博客 3449

Pytorch分布式训练/多卡训练(一) —— Data Parallel并行(DP)

注意 .to(device)就是把数据从内存放到GPU显存

hxxjxw的博客 1万+

PyTorch单机多卡分布式训练教程及代码示例

导师不是很懂PyTorch的分布式训练流程,我就做了个PyTorch单机多卡的分布式训练介绍,但是他觉得我做的没这篇好PyTorch分布式训练简明教程 - 知乎。这篇讲的确实很好,不过我感觉我做的也还可以,希望大家看完之后能给我一些建议。 目录 1.预备知识 1.1 主机(Host),节点(Node),进程(Process)和工人(Worker)。 1.2 World,Rank,Local Rank 1.2.1 World 1.2.2 Rank 1.2.3 Local Rank 2. PyT

zzxxxaa1的博客 8668

Pytorch中多GPU并行计算教程

如果不想看文字的,可以在我bilibili上看录制的视频教程: Pytorch多GPU使用教程 常见多GPU使用方法 在训练模型中,为了加速训练过程,往往会使用多块GPU设备进行并行训练(甚至多机多卡的情况)。如下图所示,常见的多GPU的使用方法有以下两种(但不局限于以下方法): model parallel,当模型很大,单块GPU的显存不足以放下整个模型时,通常会将模型分成多个部分,每个部分放到不同的GUP设备中(下图左侧),这样就能将原本跑不了的模型利用多块GPU跑起来。但这种情况,一般不能加速模

霹雳吧啦Wz 3万+

如何通过Python优化大语言模型的并行训练

并行计算是指将一个大任务拆解成多个较小的子任务,并通过多个计算资源(如CPU、GPU等)同时处理这些子任务,从而加速计算过程。在深度学习领域,训练神经网络通常涉及大量的矩阵运算,而这些计算任务可以通过并行化来显著提升效率。并行训练的基本目标是减少训练时间,特别是在训练超大规模的模型时,单机单卡训练往往会遇到内存不足和计算瓶颈的问题。通过并行训练,可以在多个计算节点上分配任务,使得每个节点负责部分计算,从而加速整体的训练过程。通过Python中的多种并行训练技术,大语言模型的训练可以显著加速。

二进制的梦想 2324

pytorch 多GPU并行训练代码讲解

pytorch 多GPU并行训练介绍,参考我之前的博客:pytorch中使用多GPU并行训练。本文主要针对代码部分进行讲解。1. 首先判断有没有可用的GPU,如果没有的话,这边会报错提醒,因为我们的脚本对针对多GPU训练的场景的。2. 初始化各进程环境。

@bangbang的博客 1万+

pytorch中使用多GPU并行训练

这里给出了两种,当然不局限于这两种。: 当模型特别大的时候,由于使用的GPU显存不够,无法将一个网络放在一块GPU里面,这个时候我们就可以网络不同的模块放在不同的GPU上,这样的话,我们就可以去训练一个比较大型的网络了,这就是的训练方式。:我们把整个模型放在一块GPU里面,并且将模型复制到每块GPU设备上,然后让它同时进行正向传播以及反向的误差传播。这种常见的训练方法叫做。第二种方法由于我们能够同时并行输入样本进行训练,这就相当于增加了训练的batch size,这样的话我们训练速度就加快了。...

@bangbang的博客 4241

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2631

Pytorch 分布式并行训练 + 半精度/混合精度训练

该博客基于以下项目的开源代码进行分析: Simple Pose: Rethinking and Improving a Bottom-up Approach for Multi-Person Pose Estimation”, accepted by AAAI-2020. Github代码地址:代码 参考: 知乎《一个 Pytorch 训练实践 (分布式训练 + 半精度/混合精度训练)》 《Pytorch + Apex 训练流程记录》 《pytorch apex 混合精度训练和horovod分.

David's Tweet 1万+

OGG故障指南:OGG-01163 Bad column length (xxx) specified for column

OGG-01163 Bad column length (xxx) specified for column AAA in table OWNER.TABLE, maximum allowable length is yyy

qqqyyy0422的博客 718

PyTorch使用多GPU并行训练及其原理和注意事项

PyTorch使用多GPU并行训练及其原理和注意事项

Le0v1n 的博客 7532

《揭秘 BME688人工智能压力湿度温度气体传感器:气体检测的多面能手》:此文为AI自动生成

BME688 是博世推出的一款具有人工智能和集成高线性度高精度压力、湿度、温度传感器的气体传感器,专为移动和联网应用开发,尺寸紧凑且低功耗。BME688 作为一款先进的传感器,在多个领域展现出卓越的性能。它采用了坚固而紧凑的 3.0 x 3.0 x 0.9 mm³ 封装,这种小巧的尺寸使其能够轻松应用于对空间要求严格的移动设备和联网应用中。同时,低功耗的特性也使得它在能源有限的环境下能够长时间稳定运行。

zheng_ruiguo的专栏 1931

ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序

我们在计算机操作系统这门专业课上,学过死锁(Deadlock)的概念:两个或两个以上的进程(或线程)在执行过程中,由于竞争资源而造成的一种阻塞的现象,称为死锁。若无外力干预,这些处于死锁状态的进程将永远处于互相等待的阻塞状态中。 正好我儿子走到我电脑前看到文章标题,好奇地问我什么是死锁。我解释道,“假设你和白妹妹(他的玩伴)手上都有一张奥特曼白金卡,你特别想要白妹妹手上那张白金卡,白妹妹也特别想...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1476

Pytorch 并行训练(DP, DDP)的原理和应用

Pytorch 并行训练(DP, DDP)的原理和应用 1. 前言 并行训练可以分为数据并行和模型并行。 模型并行 模型并行主要应用于模型相比显存来说更大,一块 device 无法加载的场景,通过把模型切割为几个部分,分别加载到不同的 device 上。比如早期的 AlexNet,当时限于显卡,模型就是分别加载在两块显卡上的。 数据并行 这个是日常会应用的比较多的情况。每一个 device 上会加载一份模型,然后把数据分发到每个 device 并行进行计算,加快训练速度。 如果要再细分,又可以分

生命在于折腾! 2万+

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 124

pytorch多GPU训练教程

首先打乱数据顺序,然后用 11/2 =6(向上取整),然后6乘以GPU个数2 = 12,因为只有11个数据,所以再把第一个数据(索引为6的数据)补到末尾,现在就有12个数据可以均匀分到每块GPU。BatchSampler原理: DistributedSmpler将数据分配到两个GPU上,以第一个GPU为例,分到的数据是6,9,10,1,8,7,假设batch_size=2,就按顺序把数据两两一组,在训练时,每次获取一个batch的数据,就从组织好的一个个batch中取到。

Moresweet 猫甜 3492

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

PostgreSQL:Patroni 高可用架构,基于etcd的自动故障转移集群

本文详细介绍了基于Patroni和etcd构建PostgreSQL高可用集群的方案。Patroni作为外部守护进程,通过etcd分布式协调服务实现自动故障转移、主节点选举等关键功能,弥补了PostgreSQL原生缺乏自动故障转移的不足。文章涵盖核心架构(3节点PG+3节点etcd)、环境规划、etcd集群部署(包括配置验证)以及Patroni安装配置的关键步骤,特别强调了Patroni自动初始化PG实例、配置同步复制等生产级特性。该方案通过外部组件协同工作,在不修改PG源码的情况下实现了生产环境所需的高可用

数据知道的博客 2491

【PyTorch教程】07-PyTorch如何使用多块GPU训练神经网络模型

在本篇博文中,你将学习到在PyTorch中如何使用多GPU进行并行训练。

Sihang_Xie的博客 2万+

6、业务影响分析(BIA)的数据收集与关键指标评估

本文全面解析了业务影响分析(BIA)的核心内容,包括数据收集、业务流程分析、信息系统与资产清单、人员与供应商依赖、影响声明、关键指标评估(如MTD、RTO、RPO)、威胁建模与风险分析等。通过详细的介绍和图表展示,帮助组织系统性地制定灾难恢复计划,以应对各种潜在风险,确保关键业务流程在灾难发生后能够快速恢复并持续运营。

moss5的博客 374

Pytorch实现多GPU并行训练(DDP)

Pytorch实现并行训练通常有两个接口:DP(DataParallel)和DDP(DistributedDataParallel)。目前DP(DataParallel)已经被Pytorch官方deprecate掉了,原因有二:1,DP(DataParallel)只支持单机多卡,无法支持多机多卡;2,DP(DataParallel)即便在单机多卡模式下效率也不及DDP(DistributedDataParallel)。

木盏 6902

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PyTorch分布式训练简明教程

文章目录DistributedDataParallel内部机制实例讲解普通单卡训练分布式训练混合精度训练(采用apex)题外话参考 神经网络训练加速的最简单方法是使用GPU,对弈神经网络中常规操作(矩阵乘法和加法)GPU运算速度要倍超于CPU。随着模型或数据集越来越大,一个GPU很快就会变得不足。例如,BERT和GPT-2等大型语言模型是在数百个GPU上训练的。对于多GPU训练,需要一种在不同GP...

小白将 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PyTorch 的多卡并行训练

DataParallel 并行的方式分为了数据并行。 DataParallel 会将module复制到多个卡上,也会将每个batch均分到每张卡上,每张卡独立forward自己那份data,而在backward时,每个卡上的梯度会汇总到原始的module上,以此来实现并行。 但是,这样的方式会造成原始module在的那张卡的显存压力比其他卡要大,也就是这种方式存在负载不均衡的情况。具体情况可以看p...

weixin_34233421的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: PyTorch使用教程(11)-cuda的使用方法
下一篇: PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控
深图智能
博客等级 码龄3年 1036粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值