问题
在Docker中运行PyTorch程序时,如果报错:
RuntimeError: DataLoader worker (pid 123456) is killed by signal: Aborted.
最可能的原因是,Docker的共享内存不足,解决办法是,要么改成更小的batchsize,要么退出docker后,重新运行docker并指定更大的共享内存。同时这个原因可以从docker的说明文档中可以看出:
--oom-kill-disable=false:Whether to disable OOM Killer for the container or not.
这个命令表示是否要kill超出内存的程序,以免崩溃。因此解决上面的问题需要重新调整docker的运行内存。例如:
docker run -m='16g' -memory-swap="20g"
docker中内存相关的命令
关于docker内存相关的命令:(docker中有很多与内存相关的命令,如kernel-memory,oom等,这里列出常用的几个)
命令 | 说明 |
---|---|
-m, --memory="" | Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M. |
–memory-swap="" | 总内存设置:内存+交换内存;Total memory limit (memory + swap, format: []). Number is a positive integer. Unit can be one of b, k, m, or g. |
–shm-size="" | 共享内存 Size of /dev/shm. The format is . number must be greater than 0. Unit is optional and can be b (bytes), k (kilobytes), m (megabytes), or g (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses 64m. |
关于其中的交换内存(swap)和共享内存(shm)的区别,可以看这篇文章:swap(交换内存)和shm(共享内存)的区别