机械之心发布 [好文分享:www.ii77.com]
[转载出处:www.ii77.com]
旷视研究院
基于梯度搜检点的亚线性显存优化方式 [1] 因为较高的较量/显存性价比受到存眷。MegEngine 经由工程扩展和优化,成长出一套行之有效的增强版亚线性显存优化手艺,既可在较量存储资源受限的前提下,轻松练习更深的模型,又可使用更大 batch size,进一步提拔模型机能,不乱 batchwise 算子。使用 MegEngine 练习 ResNet18/ResNet50,显存占用离别最高降低 23%/40%;在更大的 Bert 模型上,降幅更是高达 75%,而额外的较量开销几乎不变。
经由合适的梯度界说,让算子的梯度较量不再依靠于前向较量作为输入,从而 in-place 地完成算子的前向较量,好比 Sigmoid、Relu 等;
在生命周期没有重叠的算子之间共享显存;
经由额外的较量削减显存占用,好比行使梯度搜检点从新较量中央究竟的亚线性显存优化方式 [1];
经由额外的数据传输削减显存占用,好比把临时不消的数据从 GPU 交流到 CPU,需要时再从 CPU 交流回来。
拔取神经收集中 k 个搜检点,从而把收集分成 k 个 block,需要注重的是,初始输入也作为一个搜检点;前向较量过程中只留存搜检点处的中央究竟;
反向较量梯度的过程中,首先从响应搜检点出发,从新较量单个 block 需要的中央究竟,然后较量 block 内部各个 block 的梯度;分歧 block 的中央究竟较量共享显存。
显存占用从 O(n) 酿成 O(n/k)+ O(k),O(n/k) 代表较量单个节点需要的显存,O(k) 代表 k 个搜检点需要的显存,取 k=sqrt(n),O(n/k)+ O(k)~O(sqrt(n)),能够看到显存占用从线性酿成了亚线性;
因为在反向梯度的较量过程中需要从搜检点恢复中央究竟,整体需要额外执行一次前向较量。
from megengine.jit import trace, SublinearMemoryConfig
config = SublinearMemoryConfig()
@trace(symbolic=True, sublinear_memory_config=config)
def train_func(data, label, *, net, optimizer):
...
import os
from multiprocessing import Process
def train_resnet_demo(batch_size, enable_sublinear, genetic_nr_iter=0):
import megengine as mge
import megengine.functional as F
import megengine.hub as hub
import megengine.optimizer as optim
from megengine.jit import trace, SublinearMemoryConfig
import numpy as np
print(
"Run with batch_size={}, enable_sublinear={}, genetic_nr_iter={}".format(
batch_size, enable_sublinear, genetic_nr_iter
)
)
# 使用GPU运行这个例子
assert mge.is_cuda_available(), "Please run with GPU"
try:
# 我们从 megengine hub 中加载一个 resnet50 模型。
resnet = hub.load("megengine/models", "resnet50")
optimizer = optim.SGD(resnet.parameters(), lr=0.1,)
config = None
if enable_sublinear:
config = SublinearMemoryConfig(genetic_nr_iter=genetic_nr_iter)
@trace(symbolic=True, sublinear_memory_config=config)
def train_func(data, label, *, net, optimizer):
pred = net(data)
loss = F.cross_entropy_with_softmax(pred, label)
optimizer.backward(loss)
resnet.train()
for i in range(10):
batch_data = np.random.randn(batch_size, 3, 224, 224).astype(np.float32)
batch_label = np.random.randint(1000, size=(batch_size,)).astype(np.int32)
optimizer.zero_grad()
train_func(batch_data, batch_label, net=resnet, optimizer=optimizer)
optimizer.step()
except:
print("Failed")
return
print("Sucess")
# 以下示例究竟在2080Ti GPU运行获得,显存容量为 11 GB
# 不使用亚线性内存优化,许可的batch_size最大为 100 摆布
p = Process(target=train_resnet_demo, args=(100, False))
p.start()
p.join()
# 报错显存不足
p = Process(target=train_resnet_demo, args=(200, False))
p.start()
p.join()
# 使用亚线性内存优化,许可的batch_size最大为 200 摆布
p = Process(target=train_resnet_demo, args=(200, True, 20))
p.start()
p.join()
MegEngine GitHub:https://github.com/MegEngine
MegEngine 官网:https://megengine.org.cn
MegEngine ModelHub:https://megengine.org.cn/model-hub/
近年来,得益于物联网5G、人工智能、移动支出等手艺的成长,聪明泊车已成为了改善泊车情况、知足城市出行需求的“香饽饽”,泊车行业的智能化、信息化、规范化也获得了快速成
点击上方“ 蓝色字体 ”,选择 “ 设为星标 ” 要害讯息,D1时间送达! 作为企业架构师,将负责监视、改善和升级企业办事、软件和硬件。还需要把握最新的趋势和手艺,并亲切存眷
对于VR输入设备来说 更主要的是实现天然交互 文 | Sirius (VRPinea5月7日讯) 日前,索尼研究人员为了给VR掌握器带来更强的手部沉浸把持感,着手打造了一款活动掌握器原型,其展示了
点击蓝字存眷我们 新冠疫情在全球持续残虐,数以万万计的员工遵循居家令长途办公,一度在国内火爆的视频会议应用也在全球遍地开花。 然则自从4月初Zoom平安性问题被全球媒体曝光
近日,国度发改委首次将卫星互联网加入“新基建”领域。在周全加快5G“新基建”的同时,中国联通旗下联通航美在卫星互联网范畴也有新动作。 4月27日-30日,联通航美发布了沃星海
东方汗青谈论除了主力微信公号(ohistory)外,还介入协助几位学者公号运营。五一长假时代,我们精选几篇学者文章与列位分享。也迎接存眷他们的小我公号。 撰文:胡泳 《东方汗青
更多全球收集平安资讯尽在E平安官网 www.easyaq.com E平安5月7日讯,近日据外媒报道,成人实时流媒体网站CAM4遭遇数据泄露,该数据共计跨越7 TB,包含用户的姓名,性取向,付款记录,电
南极熊导读:Stratasys全新发布的办公型全彩3D打印机J55,在亚洲正式首发! 维妙维肖,唾手可得, J55让你永远快人一步。 从快速概念模型到高品质高保真模型,办公室适用的Stratasys
美国商务部将发布新划定,或从新许可美国企业与华为配合介入5G尺度工作 事件:昨晚路透社新闻,美国商务部拟签署一份新划定,许可美国企业和华为合作,配合介入制订5G收集尺度
整顿 | 屠敏 头 图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由标贝科技供应手艺支撑。 「极客头条」—— 手艺人员的新闻圈! CSDN 的读者同伙们早上好哇,「极客头条
本文内容来自网友供稿,如有信息侵犯了您的权益,请联系反馈核实
Copyright 2024.爱妻自媒体,让大家了解更多图文资讯!