最近在docker环境中训练YOLO模型时,只要把图片尺寸设置为320就报共享内存不足,设为128就正常:
RuntimeError: DataLoader worker (pid 179) is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit.
在docker环境中运行命令df -h /dev/shm
查看,发现共享内存只有64M,这应该就是docker默认分配的额度,太小了:
~ df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
shm 64M 32K 64M 1% /dev/shm
于是解决办法有两种:
- 启动容器(
docker run
)的时候使用--shm-size=2g
参数docker run --shm-size=8g ...
- 修改docker容器默认的共享内存大小,编辑下面的文件,修改
ShmSize
的值,单位是Bytes,1GB为1073741824vim /var/lib/docker/containers/{容器ID}/hostconfig.json
在修改以上参数之前,需要先看看宿主机的共享内存上限有多少,在宿主机还是使用命令
df -h /dev/shm
查看,大小一般是物理内存的一半