中国金融网 加入收藏    设为首页
首页
国内资讯社会财经科技教育时尚娱乐房产家居汽车母婴健康商业区块链生活企业传媒区域经济旅游体育
您现在的位置:首页 > 社会 > 正文
一行代码消除PyTorch的CUDA内存溢出报错,这个GitHub项目刚
2021-12-20 02:42      来源:IT之家      编辑:谷小金      阅读量:6377   

多少人用 PyTorch炼丹时都会被这个 bug 困扰。

一行代码消除PyTorch的CUDA内存溢出报错,这个GitHub项目刚

CUDAerror:outofmemory.

一般情况下,你得找出当下占显存的没用的程序,然后 kill 掉如果不行,还需手动调整 batch size 到合适的大小,有点麻烦

现在,有人写了一个 PyTorch wrapper,用一行代码就能无痛消除这个 bug。

有多厉害。

相关项目在 GitHub 才发布没几天就收获了 600 + 星。

一行代码解决内存溢出错误

软件包名叫 koila,已经上传 PyPI,先安装一下:

pipinstallkoila

现在,假如你面对这样一个 PyTorch 项目:构建一个神经网络来对 FashionMNIST 数据集中的图像进行分类。

先定义 input,label 和 model:

#AbatchofMNISTimageinput=torch.randn#Abatchoflabelslabel=torch.randn)classNeuralNetwork(Module):def__init__(self):super(NeuralNetwork,self).__init__()self.flatten=Flatten()self.linear_relu_stack=Sequential(Linear(28*28,512),ReLU(),Linear(512,512),ReLU(),Linear(512,10),)defforward(self,x):x=self.flatten(x)logits=self.linear_relu_stack(x)returnlogits

然后定义 loss 函数,计算输出和 losses。通过在PyTorchLightning中设置混合精度标志,它将在可能的情况下自动使用半精度,同时在其他地方保留单精度。

loss_fn=CrossEntropyLoss#Calculatelossesout=nn(t)loss=loss_fn(out,label)#Backwardpassnn.zero_gradloss.backward

好了,如何使用 koila 来防止内存溢出。

超级简单!

只需在第一行代码,也就是把输入用 lazy 张量 wrap 起来,并指定 bacth 维度,koila 就能自动帮你计算剩余的 GPU 内存并使用正确的 batch size 了。

在本例中,batch=0,则修改如下:

input=lazy,batch=0)

完事儿!就这样和 PyTorch炼丹时的 OOM 报错说拜拜。。

灵感来自 TensorFlow 的静态 / 懒惰评估

下面就来说说 koila 背后的工作原理。

CUDA error: out of memory这个报错通常发生在前向传递中,因为这时需要保存很多临时变量。

koila 的灵感来自 TensorFlow 的静态 / 懒惰评估。

它通过构建图,并仅在必要时运行访问所有相关信息,来确定模型真正需要多少资源。

而只需计算临时变量的 shape 就能计算各变量的内存使用情况,而知道了在前向传递中使用了多少内存,koila 也就能自动选择最佳 batch size 了。

又是算 shape 又是算内存的,koila 听起来就很慢。

NO。

即使是像 GPT—3 这种具有 96 层的巨大模型,其计算图中也只有几百个节点。

而 Koila 的算法是在线性时间内运行,任何现代计算机都能够立即处理这样的图计算,再加上大部分计算都是单个张量,所以,koila 运行起来一点也不慢。

你又会问了,PyTorch Lightning 的 batch size 搜索功能不是也可以解决这个问题吗。

是的,它也可以。

而 koila 灵活又轻量,只需一行代码就能解决问题,非常大快人心有没有。

不过目前,koila 还不适用于分布式数据的并行训练方法,未来才会支持多 GPU。

以及现在只适用于常见的 nn.Module 类。

项目地址:点此直达

参考链接:点此直达

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。

 
上一篇: 首款电动悍马HummerEVEdition1交付:1000匹马力,约70
下一篇:最后一页
 
     栏目排行
  1. 首款电动悍马HummerEVEditio
  2. Genesis推出Krypton750超
  3. 香港科幻大片《明日战记》宣布2022年上
  4. 中国官方:设置缓冲区可使口岸城市由过去一
  5. 李秋喜卸任董事长山西汾酒改革进入下半场
  6. 新款凯迪拉克XT4上市售价26.17-3
  7. 称霸短池世锦赛200蝶!夺冠后,张雨霏为
  8. 筑牢冬奥与“两节”防疫双重屏障
  9. 李冰洁短池世锦赛800米自由泳夺冠打破赛
  10. 中国华体手超联赛斩获十连胜国字号球队遭遇
     栏目推荐
二手房“带押过户”启动满月 成功尝鲜者寥寥无几二手房“带押过户”启动满月 成功尝鲜者寥寥无几
2022年营收78.61亿,汤臣倍健迎来VDS行业新2022年营收78.61亿,汤臣倍健迎来VDS行业新周期
大兴国际氢能示范区兼顾产业发展和配套服务打造员工理想大兴国际氢能示范区兼顾产业发展和配套服务打造员工理想生活蓝本
迪丽热巴穿军绿色也好美!和吴磊同框丝毫没有年龄迪丽热巴穿军绿色也好美!和吴磊同框丝毫没有年龄
绿色塞罕坝 不朽的奇迹绿色塞罕坝 不朽的奇迹