前言
在训练模型中经常不明不白地出现Killed
异常退出,查阅网上的说法,主流的观点是Torch的内存保护机制,当Torch检测到内存达到某一极值时,将自动Kill当前内存占用率最高的一个Torch进程,于是乎正在训练的模型就完蛋了;无论是Windows系统还是Linux系统,为了解决这个问题,都可以将虚拟内存(交换内存)开得更大。
交换内存
一点点个人的理解,交换内存是将磁盘上的一部分存储空间当作内存一样的空间来看待,CPU将内存中放不下的数据暂存在交换内存中,本质上起到内存的缓存作用。
调整交换内存
增加交换内存
有两种方式,一种是新增分区,一种是新增交换内存文件,在linux系统下,两种方式的作用基本一样,而后者的设置更加简单,因此本文只介绍后者的设置方法。
- 新增交换内存文件:在任意位置处,新建一个交换内存文件,使用以下的命令:
1
| sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
|
上述命令的意思是,从/dev/zero
中读取数据,写入到/swapfile
中,每次写入的数据块大小为1M,写入的次数为4096次,即总共写入了4G的数据;可以根据自己的需求,改变写入位置、数据块大小和写入次数。
2. 设置文件格式:需要将交换内存文件以单独的格式存储,才能被操作系统当作交换内存使用,可使用以下命令:
- 设置文件权限:可使用以下的命令:
1
| sudo chmod 600 /swapfile
|
- 启用交换内存:可使用以下的命令:
- 设置开机自启:可使用以下的命令:
1
| echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
|
至此,交换内存的增加就完成了,可以使用以下命令查看当前正在运行的全部交换内存文件(或分区):
也可以使用free -h
查看。
减少交换内存
- 关闭交换内存:可使用以下的命令:
- 删除交换内存文件:可使用以下的命令:
- 在对应的
/etc/fstab
文件中删除对应的行。