问题
在Docker中运行PyTorch程序时,如果报错:1
RuntimeError: DataLoader worker (pid 123456) is killed by signal: Aborted.
最可能的原因是,Docker的共享内存不足,解决办法是,要么改成更小的batchsize,要么退出docker后,重新运行docker并指定更大的共享内存。这个原因可以从docker的说明文档中可以看出:
1 | --oom-kill-disable=false:Whether to disable OOM Killer for the container or not. |
这个命令表示是否要kill超出内存的程序,因此解决上面的问题需要重新调整docker的运行内存。
docker的内存
docker中内存相关的命令
关于docker内存相关的命令:(docker中有很多与内存相关的命令,如kernel-memory,oom等,这里列出常用的几个)
命令 | 说明 | 中文 |
---|---|---|
-m, —memory=”” | Memory limit (format: |
使用内存限制, |
—memory-swap=”” | Total memory limit (memory + swap, format: |
总内存设置:内存+交换内存 |
—shm-size=”” | Size of /dev/shm. The format is |
共享内存 |
几种内存命令的说明
-m="10g"
,docker的运行内存,按照官方文档描述,应该是对应于实际机器的物理内存,因此在设置的时候,肯定是要比本机物理内存小的;单位可以是b/k/m/g
-memory-swap="11g"
,内存+交换内存,即物理内存+交换内存的总大小,要大于等于上面设置的-m
的大小,设置格式同上--shm-size="10g"
,共享内存,关于共享内存shm
和swap
之间的区别颇让人让人费解的问题,查了一些资料(见最后的参考)后,对于这两个内存的理解可以查看这篇文章:swap和shm的区别