前言

在训练模型中经常不明不白地出现Killed异常退出,查阅网上的说法,主流的观点是Torch的内存保护机制,当Torch检测到内存达到某一极值时,将自动Kill当前内存占用率最高的一个Torch进程,于是乎正在训练的模型就完蛋了;无论是Windows系统还是Linux系统,为了解决这个问题,都可以将虚拟内存(交换内存)开得更大。

交换内存

一点点个人的理解,交换内存是将磁盘上的一部分存储空间当作内存一样的空间来看待,CPU将内存中放不下的数据暂存在交换内存中,本质上起到内存的缓存作用。

调整交换内存

增加交换内存

有两种方式,一种是新增分区,一种是新增交换内存文件,在linux系统下,两种方式的作用基本一样,而后者的设置更加简单,因此本文只介绍后者的设置方法。

  1. 新增交换内存文件:在任意位置处,新建一个交换内存文件,使用以下的命令:
1
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

上述命令的意思是,从/dev/zero中读取数据,写入到/swapfile中,每次写入的数据块大小为1M,写入的次数为4096次,即总共写入了4G的数据;可以根据自己的需求,改变写入位置、数据块大小和写入次数。
2. 设置文件格式:需要将交换内存文件以单独的格式存储,才能被操作系统当作交换内存使用,可使用以下命令:

1
sudo mkswap /swapfile
  1. 设置文件权限:可使用以下的命令:
1
sudo chmod 600 /swapfile
  1. 启用交换内存:可使用以下的命令:
1
sudo swapon /swapfile
  1. 设置开机自启:可使用以下的命令:
1
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

至此,交换内存的增加就完成了,可以使用以下命令查看当前正在运行的全部交换内存文件(或分区):

1
swapon --show

也可以使用free -h查看。

减少交换内存

  1. 关闭交换内存:可使用以下的命令:
1
sudo swapoff /swapfile
  1. 删除交换内存文件:可使用以下的命令:
1
sudo rm -f /swapfile
  1. 在对应的/etc/fstab文件中删除对应的行。