显存不够,如何训练大型神经网络

2023-10-27

之前写过一篇PyTorch节省显存的文章,在此基础上进行补充
老博文传送门

本篇参考自夕小瑶的卖萌屋公众号

一、单卡加载大型网络

1.1 梯度累加Gradient Accumulation

单卡加载大型网络,一般受限于大量的网络参数,训练时只能使用很小的batch_size或者很小的Seq_len。这里可以使用梯度累加,进行N次前向反向更新一次参数,相当于扩大了N倍的batch_size。

正常的训练代码是这样的:

for i, (inputs, labels) in enumerate(training_set):
  loss = model(inputs, labels)              # 计算loss
  optimizer.zero_grad()								      # 清空梯度
  loss.backward()                           # 反向计算梯度
  optimizer.step()                          # 更新参数

加入梯度累加后:

for i, (inputs, labels) in enumerate(training_set):
  loss = model(inputs, labels)                    # 计算loss
  loss = loss / accumulation_steps                # Normalize our loss (if averaged)
  loss.backward()                                 # 反向计算梯度,累加到之前梯度上
  if (i+1) % accumulation_steps == 0:
      optimizer.step()                            # 更新参数
      model.zero_grad()                           # 清空梯度

Tricks:
batch变相扩大后,要想保持样本权重相等,学习率也要线性扩大或者适当调整,batchNorm也会受到影响(小batch下的均值和方差肯定不如大batch的精准)。
梯度累加Tricks详情:https://www.zhihu.com/question/303070254/answer/573037166

1.2 梯度检查点Gradient Checkpointing

梯度检查点是一种以时间换空间的方法,通过减少保存的激活值压缩模型占用空间,但是在计算梯度时必须重新计算没有存储的激活值。
详情参考:陈天奇的 Training Deep Nets with Sublinear Memory Cost

1.3 混合精度训练

具体实现可参考我的实验:https://github.com/TianWuYuJiangHenShou/textClassifier
混合精度训练在单卡和多卡情况下都可以使用,通过cuda计算中的half2类型提升运算效率。一个half2类型中会存储两个FP16的浮点数,在进行基本运算时可以同时进行,因此FP16的期望速度是FP32的两倍。
在这里插入图片描述

二、 分布式训练Distribution Training

2.1 数据并行 Data Parallelism

2.2 模型并行 Model Parallelism

具体理论与实验待续,欢迎来GitHub骚扰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显存不够,如何训练大型神经网络 的相关文章

随机推荐

  • Valid Palindrome(有效回文)

    Given a string determine if it is a palindrome considering only alphanumeric characters and ignoring cases For example A
  • 解决Host key verification failed.(亲测有效)

    哈喽哇 今天在访问远程服务器的时候 出现了一个小问题 一 发现问题 问题如下图代码 ssh root 108 61 163 242 WARNING REMOTE HOST IDENTIFICATION HAS CHANGED IT IS P
  • Android NoHttp源码阅读指导

    http blog csdn net yanzhenjie1003 article details 52413226 Android NoHttp源码阅读指导 版权声明 转载必须注明本文转自严振杰的博客 http blog csdn net
  • jsPlumb 学习笔记

    介绍 使用svg完成画图 四个概念 anchor endpoint在的位置 可通过name访问 endpoint connection的一端节点 通过addPoint makeSource connect创建 connector 连接线 o
  • STM32自学笔记--4.利用通用定时器输出PWM(附示例驱动直流电机)

    导语 上一节讲述了时钟树和基本定时器的配置方法 本节先介绍通用定时器和基本定时器的差异 然后粗略讲述PWM波原理 然后讲述如何配置通用定时器 最后进行PWM波驱动电机的示例 PWM 基本定时器计数方式只能向上 即1 2 3 4 5 而通用定
  • 国产替代:GD32F4xx替换STM32F4xx系统说明

    工程可以直接使用STM32F4xx的工程进行开发 芯片的库不需要换成GD的芯片库 Device引脚也可以直接选择STM32F4xx 仿真功能正常 串口IAP可以直接使用STM官方的IAP工具进行操作 外设差异 STM外部资源的编号是从0开始
  • java 请求httpclient_HttpClient-使用Java通过HttpClient发送HTTP请求的方法

    使用Java通过HttpClient发送HTTP请求 前言 在目前的一个项目中 我们的项目的数据来源内部的一个完善的移动端系统 想要集成他们系统的数据就得使用Java发送http模拟前端请求他们的接口 由此在项目中使用HttpClient来
  • CSMA/CD协议(一目了然,看过都说好)

    本文参考 计算机网络微课堂 1 CSMA CD协议介绍 当多个主机同时发送数据时 如何解决碰撞冲突问题呢 早期的共享式以太网采用 载波监听多址接入 碰撞检测 即CSMA CD协议 来解决碰撞冲突问题 多址接入MA 多个站连接在一条总线上 竞
  • 【统计学】一篇文章读懂stata相关性系数矩阵输出 加星号 (*)显著水平 学术论文

    学术论文里面常用到的相关分析结果通常需要针对不同显著性水平进行标记 例如下图 有如下数据 需要得到下图 其中 p lt 0 01 p lt 0 05 p lt 0 1 一 函数的准备 连玉君老师的提供的分支下载 仅仅需要注册即可下载 pwc
  • nas计算机服务器被encrypted勒索病毒攻击怎么办?服务器中了勒索病毒如何解密?

    在计算机安全领域 encrypted勒索病毒是一种危险的恶意软件 它会加密受害者的文件 并要求支付赎金来解密这些文件 这种病毒经常对企业 机构和个人产生影响 对经济和社会稳定产生威胁 当我们受到encrypted勒索病毒的攻击时 我们需要了
  • 大数据常用度量单位

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • selenium处理滑块验证码(最简单的滑块)

    解决上面的滑块验证 这种只要用鼠标点击并移动指定距离就可以完成验证 x轴 实现 Time 2023 4 20 15 59 Author Wenny File start py import json import time from sel
  • Tomcat结合Nginx一起使用

    1 背景 tomcat既是一个servlet和jsp容器 也是一个轻量级的web服务器 它既可以处理动态内容 也可以处理静态内容 为什么还需要结合nginx一起使用 原因 1 tomcat处理html的能力不如nginx 处理静态内容的速度
  • LVS四层网络的高性能多种模式(NAT/DR/TUN)负载均衡

    文章目录 网络 负载均衡 网络 1 应用层 2 传输控制层 提供端到端的服务 TCP UDP TCP 面向连接的可靠传输方式 三次握手 建立连接 四次分手 双方相互通知断开并确认 断开连接 netstat natp 三次握手 gt 数据传输
  • 深度学习入门(一):神经网络基础

    一 深度学习概念 1 定义 通过训练多层网络结构对位置数据进行分类或回归 深度学习解决特征工程问题 2 深度学习应用 图像处理 语言识别 自然语言处理 在移动端不太好 计算量太大了 速度可能会慢 eg 医学应用 自动上色 3 例子 使用k最
  • React项目使用husky lint-staged 进行代码提交前的检查

    当项目配置了eslint stylelint这些代码风格规范的校验时 会让所有开发者写出来的代码风格基本一致 但是如果有开发者他没有去配置IDE里的一些自动修复代码风格的选项 那么提交到代码仓库的代码还是五花八门的 所有我们要在提交仓库前做
  • 最新去水印小程序源码,支持图集,功能齐全

    搭建条件 服务器一个 备案域名一个 环境配置 NGINX php7 3 mysql5 6 可自定义更换接口 支持任意接口 带流量主 微擎后端 无需授权 搭建直接使用详细教程 后台可任意开关流量主id 无需前端 1 激励视频 插屏广告 视频广
  • 取字典的第一个值

    proxy http http 180 107 243 177 4257 https http 180 107 243 177 4257 print list proxy values 0 输出 http 180 107 243 177 4
  • P2P协议简介

    最近因为有些需要业务大文件分发 传统文件分发策略都是中心化 要么是推送 要么是拉取 中心节点很容易成为瓶颈 而P2P的点对点 去中心化能很好的解决这个问题 P2P协议 P2P是英文Peer to Peer的简称 大家对它并不陌生 找种子下电
  • 显存不够,如何训练大型神经网络

    之前写过一篇PyTorch节省显存的文章 在此基础上进行补充 老博文传送门 本篇参考自夕小瑶的卖萌屋公众号 一 单卡加载大型网络 1 1 梯度累加Gradient Accumulation 单卡加载大型网络 一般受限于大量的网络参数 训练时