解决Pytorch内存溢出,Ubuntu进程killed的问题
作者:Coding呆呆 发布时间:2023-08-31 22:12:16
pytorch显存越来越多的一个原因
optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss += loss
参考了别人的代码发现那句loss一般是这样写
loss_sum += loss.data[0]
这是因为输出的loss的数据类型是Variable。而PyTorch的动态图机制就是通过Variable来构建图。主要是使用Variable计算的时候,会记录下新产生的Variable的运算符号,在反向传播求导的时候进行使用。如果这里直接将loss加起来,系统会认为这里也是计算图的一部分,也就是说网络会一直延伸变大那么消耗的显存也就越来越大。
用Tensor计算要写成:
train_loss += loss.item()
correct_total += torch.eq(predict, label_batch).sum().item()
train_loss += loss.item()
当需要将模型中变量提取出来参与计算时,需要使用** .item()**
补充:linux下运行pytorch程序显示“killed”或者“已杀死”
这是由pytorch对于内存不足的反应,确切说,是Linux内核对pytorch程序占用太多内存的反应。Linux内核一旦因为内存资源不足而生气的时候,会使用OOM killer将占用内存最多的进程杀掉。
这种情况下,pytorch的python程序根本就来不及显示相关的内存日志,直接在呼喊出killed这一个简短有力的词语后,就game over了。如果不提前掌握这个背景的话,你可真是会手足无措啊。
既然我们确定了是内存不足导致的问题(dmesg也能明确的显示出kernel把占了近10个GB的python进程给kill了),
那我们的解决方案就有2个:
第一个是加大内存,将我的x99平台的内存从16GB增加到64GB;这个方案先放弃了,因为内存条涨价太猛,我买不起了;
第二个是增加swap分区,当然性能会降低,但不需要额外增加成本。所以Gemfield今天的选择就是第二个方案。
1、先禁止掉swap功能
sudo swapoff /swapfile
这个命令执行之后,如果你用free命令查看的话会发现swap分区的大小变为了0。
2、增加 /swapfile的大小
sudo dd if=/dev/zero of=/swapfile bs=1M count=30720 oflag=append conv=notrunc
这个命令会在现有的/swapfile后面追加30GB,加上之前的2GB的swap分区,现在共有32个GB的swap分区了。如果按照固态硬盘128GB有300多块钱来算的话,这个命令花了七八十块钱呢。
3、设置这个文件为swap分区的挂载点:
sudo mkswap /swapfile
4、再次启用swap
sudo swapon /swapfile
来源:https://blog.csdn.net/qq_35899290/article/details/103549280


猜你喜欢
- mysqldump -u user -p db tab1 tab2 &
- sql语句:update item i,resource_library r,resource_review_link l set i.na
- 如何直接调用Excel数据?在ASP中,不用ODBC,如何直接调用Excel数据? 在调用处理处,究竟是使用:xlApp.qui
- 在while和for循环过程中,为了更加灵活地控制循环的次数,python提供了break和continue循环控制语句。1. break
- 本文实例讲述了通过php修改xml文档内容的方法,分享给大家供大家参考。具体实现方法如下:<?php//1、创建一个DOMDocume
- 当使用vue做登录的时候,我们会把拿到的部分用户信息存在vuex+cookie中,我们知道,vuex的数据是会随着浏览器刷新而丢失的,此时我
- 点阵字体是指根据文字的像素点来显示的字体,效果如下:使用Python读取并显示的过程如下:根据中文字符获取GB2312编码通过GB2312编
- 在浏览天极RSS订阅页面时,可以看到天极网为方便用户定制站点内容而设立的各个RSS频道。浏览者通过订阅不同的RSS(可同时订阅多个网站),就
- 动态渲染就是有一个异步的数据,大概长这样:{ "inline": true, "labelPosition&q
- use mysql; u
- 看了cragle的《有没有必要将网站Div+Css重构?》的文章,有一些想法不说不快,我也在文章的评论里提到曾经开除过两个执着使用div技术
- 背景最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File R
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
- Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。random.randomrandom.ra
- 函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。注意其中:map和filter返回一个惰性序列,可
- Keras应该是最简单的一种深度学习框架了,入门非常的简单.简单记录一下keras实现多种分类网络:如AlexNet、Vgg、ResNet采
- 在我遇到 SimPy 包的其中一位创始人 Klaus Miller 时,从他那里知道了这个包。Miller 博士阅读过几篇提出使用 Pyth
- 音频预处理这一讲主要介绍些音频基本处理方式,为接下来的语音识别打基础。三种播放音频的方式使用 python 播放音频有以下几种方式:os.s
- 1、 Python中 sys.argv的用法解释:sys.argv可以让python脚本从程序外部获取参数,sys.argv是一个列表,可用
- 前言:c3p0 是一个开源的数据库连接池,实现了 JDBC 3 规范;本文主要介绍 c3p0 的基本使用,文中使用到的软件版本:Java 1