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

妇联加强网站平台建设正规营销培训

妇联加强网站平台建设,正规营销培训,图做的好的网站,广告设计师工资一般多少钱一个月梯度累加 梯度累加(Gradient Accmulation)是一种增大训练时batch size的技巧。当batch size在一张卡放不下时,可以将很大的batch size分解为一个个小的mini batch,分别计算每一个mini batch的梯度,然后将其累加起来优…

梯度累加

梯度累加(Gradient Accmulation)是一种增大训练时batch size的技巧。当batch size在一张卡放不下时,可以将很大的batch size分解为一个个小的mini batch,分别计算每一个mini batch的梯度,然后将其累加起来优化

正常的pytorch训练流程如下(来自知乎)

for i, (image, label) in enumerate(train_loader):pred = model(image)  # 1loss = criterion(pred, label)  # 2optimizer.zero_grad()  # 3loss.backward()  # 4optimizer.step()  # 5
  1. 神经网络forward过程
  2. 获取loss,通过pred和label计算你损失函数
  3. 清空网络中参数的梯度
  4. 反向传播,计算当前梯度
  5. 根据梯度更新网络参数

使用梯度累加的方法如下

for i,(image, label) in enumerate(train_loader):# 1. input outputpred = model(image)loss = criterion(pred, label)# 2.1 loss regularizationloss = loss / accumulation_steps  # 2.2 back propagationloss.backward()# 3. update parameters of netif (i+1) % accumulation_steps == 0:# optimizer the netoptimizer.step()        # update parameters of netoptimizer.zero_grad()   # reset gradient
  1. 神经网络forward过程,同时计算损失函数
  2. 反向传播计算当前梯度(在backward时,计算的loss要除batch的大小得到均值)
  3. 不断重复1、2步骤,重复获取梯度
  4. 梯度累加到一定次数后,先optimizer.step()更新网络参数,随后zero_grad()清除梯度,为下一次梯度累加做准备

DDP中的梯度累加

问题:在DDP中所有卡的梯度all_reduce阶段发生在loss.bachward()阶段,也就是说执行loss.backward()之后,所有卡的梯度会进行一次汇总,但是如果我们如果使用梯度累加策略,假设梯度累加K=2,就需要all_reduce汇总两次,会带来额外的计算错误和时间开销

解决方案:知乎写的很好,这里参考其解决方案,只需要在前K-1次取消梯度同步即可,DDP提供了一个暂时取消梯度同步的context函数no_sync(),在这个函数下,DDP不会进行梯度同步

model = DDP(model)for 每次梯度累加循环optimizer.zero_grad()# 前accumulation_step-1个step,不进行梯度同步,每张卡分别累积梯度。for _ in range(K-1)::with model.no_sync():prediction = model(data)loss = loss_fn(prediction, label) / Kloss.backward()  # 积累梯度,但是多卡之间不进行同步# 第K个stepprediction = model(data)loss = loss_fn(prediction, label) / Kloss.backward()  # 进行多卡之间的梯度同步optimizer.step()

优雅写法

from contextlib import nullcontext
# 如果你的python版本小于3.7,请注释掉上面一行,使用下面这个:
# from contextlib import suppress as nullcontextif local_rank != -1:model = DDP(model)optimizer.zero_grad()
for i, (data, label) in enumerate(dataloader):# 只在DDP模式下,轮数不是K整数倍的时候使用no_syncmy_context = model.no_sync if local_rank != -1 and i % K != 0 else nullcontextwith my_context():prediction = model(data)loss = loss_fn(prediction, label) / Kloss.backward()  # 积累梯度,不应用梯度改变if i % K == 0:optimizer.step()optimizer.zero_grad()

梯度累加的影响

BN的影响

http://www.tj-hxxt.cn/news/112752.html

相关文章:

  • 新乡免费网站建设软文营销模板
  • wordpress 刷新正安县网站seo优化排名
  • 前几年很火的网站建设公司包头整站优化
  • 中国国企500强名单百度竞价优化软件
  • 手机端做网站软件免费信息推广平台
  • 合肥市城乡城乡建设局网站百度手机关键词排名工具
  • 做网站开发哪里可以接单百度医生
  • 免费做思维导图的网站新业务在线软件下载
  • 网络工程师培训班哪里保定关键词优化软件
  • 建设网站具备的知识营销推广投放平台
  • 在自己的网站做百度搜索框本周国内重大新闻十条
  • 如何注册域名赚钱长沙seo智优营家
  • 国际网站建设工具河南省最新通知
  • 软件开发和网站建设哪个好电商平台怎么推广
  • 便宜做网站公司sem竞价推广公司
  • 中核华兴建设有限公司投标网站百度seo搜索引擎优化厂家
  • 个人做网站 优帮云网络推广专员所需知识
  • 手机网站js电话悬浮世界足球排名最新
  • 男女做暖免费网站 香蕉网站推广排名教程
  • 昆明云南微网站建设新冠病毒最新消息
  • 如何规避电子政务门户网站建设公司网络营销推广软件
  • 网店装修图seo标题优化的方法
  • python的网站开发源码今日热搜新闻头条
  • 网站建设优化今天国际新闻最新消息10条
  • 番禺制作网站系统软文广告发稿
  • 做外贸常用那几个网站最好的小说网站排名
  • 大亚湾住房规划建设局网站广东优化疫情防控措施
  • 昆山 网站建设网络营销的市场背景
  • 网站策划与制作互联网营销师报名入口官网
  • 汕头 网站腾讯广告代理商加盟