当前位置: 首页 > news >正文

微商客源神器关键词优化

微商客源神器,关键词优化,梅河口市建设局网站,哪建设网站文章目录 1、SPAWN方式2、torchrun 方式 正如标题所写,我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长,所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码,经…

文章目录

  • 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?highlight=torch%20cuda%20amp%20autocast
  • https://pytorch.org/docs/stable/amp.html#gradient-scaling

1、SPAWN方式

在使用这些助手(都是免费的)时,发现对于不同问题,各自的优劣不同,所以可以都试一下。
在PyTorch中,分布式数据并行(Distributed Data Parallel,DDP)可以在多个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 processes"""os.environ['MASTER_ADDR'] = 'localhost'os.environ['MASTER_PORT'] = '12355'# initialize the process groupdist.init_process_group(backend="nccl", rank=rank, world_size=world_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(f"Running basic DDP example on rank {rank}.")gpu=ranksetup(rank=rank,world_size=world_size,)torch.manual_seed(0)model = SimpleModel().cuda(gpu)ddp_model = DDP(model, device_ids=[gpu])# 使用混合精度训练scaler = GradScaler()optimizer = optim.SGD(ddp_model.parameters(), lr=0.01)# 使用学习率周期scheduler1 = ExponentialLR(optimizer, gamma=0.9)scheduler2 = CosineAnnealingLR(optimizer, T_max=50, eta_min=0)# 模拟数据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(f"Rank {rank}, Epoch {epoch}, Loss {loss.item()}")cleanup()
if __name__ == "__main__":world_size = torch.cuda.device_count()  # 获取可用GPU的数量mp.spawn(train, args=(world_size,), nprocs=world_size, join=True)  # 在每个GPU上运行train函数

这个示例代码在每个GPU上并行训练一个简单的线性模型。每个进程(即每个GPU)都有自己的模型副本,并且每个进程都独立计算梯度。然后,所有进程都会聚集他们的梯度并平均,然后用于一次总体参数更新。这个过程会根据学习率周期来调整每个epoch后的学习率

本部分参考官方的:https://pytorch.org/tutorials/beginner/ddp_series_multigpu.html?highlight=torch%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(f"Start 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(), lr=0.01)# 使用学习率周期scheduler1 = ExponentialLR(optimizer, gamma=0.9)scheduler2 = CosineAnnealingLR(optimizer, T_max=50, eta_min=0)# 模拟数据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(f"Rank {rank}, Epoch {epoch}, Loss {loss.item()}")dist.destroy_process_group()
if __name__ == "__main__":train()

单机多卡,执行:

torchrun --nproc_per_node=4 --standalone ddp.py

如果是多机多卡:

torchrun --nnodes=2 --nproc_per_node=8 --rdzv_id=100 --rdzv_backend=c10d --rdzv_endpoint=$MASTER_ADDR:29400 elastic_ddp.py

本部分参考:
https://pytorch.org/tutorials/intermediate/ddp_tutorial.html#save-and-load-checkpoints

http://www.15wanjia.com/news/54234.html

相关文章:

  • 网站算阵地建设百度软件优化排名
  • 手机网站 设计图深圳做网站的公司
  • 公司做b2b网站百度业务推广
  • 网站建设域名国际新闻最新消息今天军事新闻
  • 昆明著名网站建设智能网站推广优化
  • 青海网站设计高端如何提高网站seo排名
  • 购买网站空间后怎么做河南seo关键词排名优化
  • 电子商务网站技术提高搜索引擎检索效果的方法
  • 搜索引擎找不到的网站湖南企业竞价优化
  • 做跨境电商网站有哪些在线搜索资源
  • 网站实现功能有了域名如何建立网站
  • 做网站免费送域名最新的域名网站
  • 北京住房城乡建设厅网站首页恶意点击软件
  • 开网站建设公司怎么样湖北seo整站优化
  • 做室内设计的网站有哪些百度付费推广
  • 什么语言建手机网站建设企业营销型网站
  • 广州网站建设性价比推广平台免费b2b网站大全
  • 南昌网站建设公司哪家好时事政治2023最新热点事件
  • 优秀网站配色淘宝数据查询
  • 凡客建站手机版下载营销推广与策划
  • 贵州三线建设博物馆网站seo优化seo外包
  • 宝安网站建设公司app推广赚钱平台
  • 微信公众号影视网站怎么做网站模板图片
  • 手机网站一键分享到微信杭州搜索引擎推广排名技术
  • 做网站有的浏览器福州短视频seo推荐
  • 网站与新媒体建设测评方案注册域名要钱吗
  • 网站图片引导页怎么做北京营销推广公司
  • 网站如何建设流程图近一周热点新闻
  • 对网站建设的评价语唯尚广告联盟
  • 国外包装设计网站网站建设公司网站