今Docker容器内部运行Pytorch训练脚本时,遇到
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm)的报错。
原因
PyTorch使用共享内存在进程之间共享数据,因此如果使用torch多线程数据加载程序(比如我将DataLoader
里的num_workers
设置为2),容器运行时使用的默认共享内存段大小是不够的.
解决方案
查阅资料后,有两种解决方案。
方法一、重新建立一个容器,建立的时候设置一下 shm的大小。
nvidia-docker run -t -d -v /挂载路径/:/m容器路径/ --shm-size 8G -it 镜像ID bash
然后进入容器,查看 shm的大小,而修改前只有65536k
重新进入容器,运行训练脚本,
方法二、不想建立一个新的容器,那么可以考虑修改已有容器shm的大小
见博客
docker-修改container的ShmSize(shm)共享内存修改
方法三、修改DataLoader中参数num_workers的值
dataloader = torch.utils.data.DataLoader(
dataset,
batch_size=8,
shuffle=True,
num_workers=0,
pin_memory=True,
collate_fn=dataset.collate_fn
)
参考资料:
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memo