一行代码消除PyTorch的CUDA内存溢出报错,这个GitHub项目刚发布就揽星600
多少人用 PyTorch"炼丹"时都会被这个 bug 困扰。CUDAerror:outofmemory.
一般情况下,你得找出当下占显存的没用的程序,然后 kill 掉。如果不行,还需手动调整 batch size 到合适的大小,有点麻烦。
现在,有人写了一个 PyTorch wrapper,用一行代码就能"无痛"消除这个 bug 。
有多厉害?
相关项目在 GitHub 才发布没几天就收获了 600 + 星。
一行代码解决内存溢出错误
软件包名叫 koila,已经上传 PyPI,先安装一下:pipinstallkoila
现在,假如你面对这样一个 PyTorch 项目:构建一个神经网络来对 FashionMNIST 数据集中的图像进行分类。
先定义 input、label 和 model:#AbatchofMNISTimage input=torch.randn(8,28,28) #Abatchoflabels label=torch.randn(0,10,[8]) 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。loss_fn=CrossEntropyLoss() #Calculatelosses out=nn(t) loss=loss_fn(out,label) #Backwardpass nn.zero_grad() loss.backward()
好了,如何使用 koila 来防止内存溢出?
超级简单!
只需在第一行代码,也就是把输入用 lazy 张量 wrap 起来,并指定 bacth 维度 ,koila 就能自动帮你计算剩余的 GPU 内存并使用正确的 batch size 了。
在本例中,batch=0,则修改如下:input=lazy(torch.randn(8,28,28),batch=0)
完事儿!就这样和 PyTorch"炼丹"时的 OOM 报错说拜拜。灵感来自 TensorFlow 的静态 / 懒惰评估
下面就来说说 koila 背后的工作原理。
"CUDA error: out of memory"这个报错通常发生在前向传递(forward pass)中,因为这时需要保存很多临时变量。
koila 的灵感来自 TensorFlow 的静态 / 懒惰评估(static / lazy evaluation)。
它通过构建图,并仅在必要时运行访问所有相关信息,来确定模型真正需要多少资源。
而只需计算临时变量的 shape 就能计算各变量的内存使用情况;而知道了在前向传递中使用了多少内存,koila 也就能自动选择最佳 batch size 了。
又是算 shape 又是算内存的,koila 听起来就很慢?
NO。
即使是像 GPT-3 这种具有 96 层的巨大模型,其计算图中也只有几百个节点。
而 Koila 的算法是在线性时间内运行,任何现代计算机都能够立即处理这样的图计算;再加上大部分计算都是单个张量,所以,koila 运行起来一点也不慢。
你又会问了,PyTorch Lightning 的 batch size 搜索功能不是也可以解决这个问题吗?
是的,它也可以。
但作者表示,该功能已深度集成在自己那一套生态系统中,你必须得用它的 DataLoader,从他们的模型中继承子类,才能训练自己的模型,太麻烦了。
而 koila 灵活又轻量,只需一行代码就能解决问题,非常"大快人心"有没有。
不过目前,koila 还不适用于分布式数据的并行训练方法(DDP),未来才会支持多 GPU。
以及现在只适用于常见的 nn.Module 类。
ps:koila 作者是一位叫做 RenChu Wang 的小哥。
项目地址:点此直达
参考链接:点此直达
上海29岁程序员离职当天删库跑路,被判刑10个月IT之家2月11日消息,又一程序员删库跑路被判刑。据红星新闻报道,从上海市杨浦区人民法院获悉,一名29岁的程序员录某未经公司许可,在离职当天,私自将即将上线的京东到家平台系统代码全
删库跑路开发者要求恢复其项目控制权,但几乎没人支持IT之家1月25日消息,此前IT之家报道了知名开源工具Faker。js的作者Marak故意破坏了GitHub上的这个开源库,将项目所有代码清空,并在commit中留下endgame
支持20省份,中国铁路12306App买汽车票全攻略作为国铁集团的官方售票网站,12306的大名几乎无人不晓。不过近日,这款中国最大的铁路购票平台,忽然干起了汽运的买卖。4月22日,12306官微宣布,自即日起12306App全面上
冷空气速冻全国,这一波倒春寒来势汹汹IT之家4月9日消息据中国气象局消息,受冷空气影响,4月9日至11日江淮江南华南大部西南地区东部等地区气温将先后下降48,其中湖南西部等地局地降温可达14以上,黄淮江淮江南东部地区
华北这么快就热了,京津冀气温直逼30!IT之家4月4日消息据中国天气网消息,近几天北方升温脚步不停歇,今天京津冀一带会成为北方最热的地区。北京天津石家庄的最高气温都会达到28,离30只有一步之遥,不仅超过江南,午后的热
支付宝到账XX元!支付宝到账声音背后的故事IT之家11月9日消息据梨视频报道,近日支付宝到账XX元的声优小姐姐讲述了关于支付宝到账声音的录制如何来到阿里等故事。支付宝到账XX元的声优小姐姐介绍称,我本名叫陈牧晴,我的阿里花
华为首家新概念店即将开幕位于北京CBD,设计最特别IT之家12月23日消息,据华为官方消息,华为首家新概念店即将在12月25日开幕,位于北京CBD,官方称这家店设计最特别。IT之家了解到,北京银泰in01华为新概念店已经开启预约活
小米将在印度发布两款全新音频产品IT之家2月11日消息根据小米印度官方推特的消息,小米将在当地时间2月22日举行新品发布会,推出新的音频产品。IT之家了解到,小米印度高管ManuKumarJain在推特上表示,此
60岁以上能开网约车吗ETC卡如何解绑,交通运输部回应IT之家3月7日消息,交通运输部3月4日在其微信公众号上针对网友关注的热点问题作出回应IT之家了解到,有网友提问称,60岁以上能开网约车吗?对此交通运输部回答称您好,出租汽车驾驶员
抖音重点打击借疫情进行网暴的行为IT之家3月18日消息,昨日晚间,抖音发布治理公告称,重点打击借疫情进行网暴的行为。抖音表示,在日常巡检中发现有个别用户存在借疫情发布和进行人身攻击人肉搜索曝光隐私欺辱谩骂等言论和
微博回应被豆瓣起诉索赔1元不存在任何不正当竞争和抄袭行为IT之家3月31日消息,昨日晚间,针对豆瓣对微博提起不正当竞争诉讼一事,微博公司通过对外发言账号微博发言人发布声明称,微博超话所开展的超新星计划并非针对某一平台,属于正常的业务运营