frontpage制作个人网页教程,浙江网站建设自助建站优化,河北邢台有几个区县,装修公司加盟哪个好文章目录 1、SPAWN方式2、torchrun 方式 正如标题所写#xff0c;我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长#xff0c;所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码#xff0c;经… 文章目录 1、SPAWN方式2、torchrun 方式 正如标题所写我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码经过官网查阅验证的。原始代码由百度文心一言提供。 问题pytorch 分布式数据并行与学习率周期和混合精度训练的示例代码 该问题分别问了当前2023年10月16日百度文心一言google bard,科大讯飞星火chatgpt4,bing。目前看来只有文心给出最接近正确答案。当前版本 pythorch 2.0.1。关于混精 torch.cuda.amp.autocast(args...) is equivalent to torch.autocast(cuda, args...),混精可以参考
https://pytorch.org/tutorials/recipes/recipes/amp_recipe.html?highlighttorch%20cuda%20amp%20autocasthttps://pytorch.org/docs/stable/amp.html#gradient-scaling
1、SPAWN方式
在使用这些助手都是免费的时发现对于不同问题各自的优劣不同所以可以都试一下。 在PyTorch中分布式数据并行Distributed Data ParallelDDP可以在多个GPU上并行训练模型提高训练速度。学习率周期Learning Rate Schedules用于调整训练过程中学习率的变化而混合精度训练则可以提高训练速度并减少内存使用。 以下是一个使用PyTorch的分布式数据并行、学习率周期和混合精度训练的示例代码
import os
import torch
import torch.nn as nn
import torch.optim as optim
import torch.distributed as dist
import torch.multiprocessing as mp
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.optim.lr_scheduler import ExponentialLR, CosineAnnealingLR
from torch.cuda.amp import GradScaler, autocastdef setup(rank, world_size):Args:rank: Unique identifier of each processworld_size: Total number of processesos.environ[MASTER_ADDR] localhostos.environ[MASTER_PORT] 12355# initialize the process groupdist.init_process_group(backendnccl, rankrank, world_sizeworld_size)torch.cuda.set_device(rank)def cleanup():dist.destroy_process_group()
# 定义模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc nn.Linear(10, 10)def forward(self, x):return self.fc(x)# 训练函数
def train(rank, world_size):print(fRunning basic DDP example on rank {rank}.)gpuranksetup(rankrank,world_sizeworld_size,)torch.manual_seed(0)model SimpleModel().cuda(gpu)ddp_model DDP(model, device_ids[gpu])# 使用混合精度训练scaler GradScaler()optimizer optim.SGD(ddp_model.parameters(), lr0.01)# 使用学习率周期scheduler1 ExponentialLR(optimizer, gamma0.9)scheduler2 CosineAnnealingLR(optimizer, T_max50, eta_min0)# 模拟数据data torch.randn(32, 10).to(gpu)target torch.randn(32, 10).to(gpu)for epoch in range(100):optimizer.zero_grad()with autocast(): # 启用混合精度训练output ddp_model(data)loss nn.MSELoss()(output, target)scaler.scale(loss).backward() # 使用scaler进行梯度缩放scaler.step(optimizer) # 更新参数scaler.update() # 更新GradScaler状态scheduler1.step() # 使用ExponentialLR调整学习率scheduler2.step() # 使用CosineAnnealingLR调整学习率print(fRank {rank}, Epoch {epoch}, Loss {loss.item()})cleanup()
if __name__ __main__:world_size torch.cuda.device_count() # 获取可用GPU的数量mp.spawn(train, args(world_size,), nprocsworld_size, joinTrue) # 在每个GPU上运行train函数
这个示例代码在每个GPU上并行训练一个简单的线性模型。每个进程即每个GPU都有自己的模型副本并且每个进程都独立计算梯度。然后所有进程都会聚集他们的梯度并平均然后用于一次总体参数更新。这个过程会根据学习率周期来调整每个epoch后的学习率
本部分参考官方的https://pytorch.org/tutorials/beginner/ddp_series_multigpu.html?highlighttorch%20multiprocessing 是写单GPU和多GPU的区别。
2、torchrun 方式
首先是写一个ddp.py,内容如下
import os
import torch
import torch.nn as nn
import torch.optim as optim
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.optim.lr_scheduler import ExponentialLR, CosineAnnealingLR
from torch.cuda.amp import GradScaler, autocast# 定义模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc nn.Linear(10, 10)def forward(self, x):return self.fc(x)# 训练函数
def train():dist.init_process_group(nccl)rank dist.get_rank()print(fStart running basic DDP example on rank {rank}.)gpu rank % torch.cuda.device_count()torch.manual_seed(0)model SimpleModel().to(gpu)ddp_model DDP(model, device_ids[gpu])# 使用混合精度训练scaler GradScaler()optimizer optim.SGD(ddp_model.parameters(), lr0.01)# 使用学习率周期scheduler1 ExponentialLR(optimizer, gamma0.9)scheduler2 CosineAnnealingLR(optimizer, T_max50, eta_min0)# 模拟数据data torch.randn(32, 10).to(gpu)target torch.randn(32, 10).to(gpu)for epoch in range(100):optimizer.zero_grad()with autocast(): # 启用混合精度训练output ddp_model(data)loss nn.MSELoss()(output, target)scaler.scale(loss).backward() # 使用scaler进行梯度缩放scaler.step(optimizer) # 更新参数scaler.update() # 更新GradScaler状态scheduler1.step() # 使用ExponentialLR调整学习率scheduler2.step() # 使用CosineAnnealingLR调整学习率print(fRank {rank}, Epoch {epoch}, Loss {loss.item()})dist.destroy_process_group()
if __name__ __main__:train()单机多卡执行
torchrun --nproc_per_node4 --standalone ddp.py如果是多机多卡
torchrun --nnodes2 --nproc_per_node8 --rdzv_id100 --rdzv_backendc10d --rdzv_endpoint$MASTER_ADDR:29400 elastic_ddp.py本部分参考 https://pytorch.org/tutorials/intermediate/ddp_tutorial.html#save-and-load-checkpoints 文章转载自: http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn http://www.morning.jkftn.cn.gov.cn.jkftn.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.gcszn.cn.gov.cn.gcszn.cn http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.lbbrw.cn.gov.cn.lbbrw.cn http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn http://www.morning.kstlm.cn.gov.cn.kstlm.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.gwmjy.cn.gov.cn.gwmjy.cn http://www.morning.ncwgt.cn.gov.cn.ncwgt.cn http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn http://www.morning.ampingdu.com.gov.cn.ampingdu.com http://www.morning.ghqyr.cn.gov.cn.ghqyr.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.rhsg.cn.gov.cn.rhsg.cn http://www.morning.zdmrf.cn.gov.cn.zdmrf.cn http://www.morning.nlbw.cn.gov.cn.nlbw.cn http://www.morning.hkswt.cn.gov.cn.hkswt.cn http://www.morning.drrt.cn.gov.cn.drrt.cn http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn http://www.morning.wfyqn.cn.gov.cn.wfyqn.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.bssjp.cn.gov.cn.bssjp.cn http://www.morning.sloxdub.cn.gov.cn.sloxdub.cn http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.lnckq.cn.gov.cn.lnckq.cn http://www.morning.dxxnq.cn.gov.cn.dxxnq.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn http://www.morning.bpmdr.cn.gov.cn.bpmdr.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.rlbc.cn.gov.cn.rlbc.cn http://www.morning.qszyd.cn.gov.cn.qszyd.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn http://www.morning.jntdf.cn.gov.cn.jntdf.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.chzqy.cn.gov.cn.chzqy.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.ltqtp.cn.gov.cn.ltqtp.cn http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.wqgr.cn.gov.cn.wqgr.cn http://www.morning.mcjyair.com.gov.cn.mcjyair.com http://www.morning.mkygc.cn.gov.cn.mkygc.cn http://www.morning.sxtdh.com.gov.cn.sxtdh.com http://www.morning.tpnx.cn.gov.cn.tpnx.cn http://www.morning.nlcw.cn.gov.cn.nlcw.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.lztrt.cn.gov.cn.lztrt.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.xqqcq.cn.gov.cn.xqqcq.cn http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn