修改容器的 sharememory

今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

docker-修改container的ShmSize(shm)共享内存修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VS Share Memory是一种用于在操作系统进程之间共享内存的机制。在多进程环境中,不同进程之间的数据共享通常是一项复杂而困难的任务。VS Share Memory解决了这个问题,提供了一个简单且高效的方式,使进程可以共享内存段。 VS Share Memory的基本原理是通过创建共享内存段来实现进程之间的数据共享。这个共享内存段可以在多个进程之间共享,并且在不同进程之间的数据访问和同步可以得到很好的管理。 使用VS Share Memory可以实现多个进程之间的高速数据交换,这在一些需要高性能、低延迟的应用中特别有用。比如在高性能计算、实时数据监测和分布式系统等领域,VS Share Memory可以提供一种高效的数据共享机制。 VS Share Memory还提供了一套API和功能,使得进程可以方便地进行对共享内存的操作。进程可以通过使用这些API来创建、读取、写入和删除共享内存段,从而实现数据的共享和同步。 然而,VS Share Memory也存在一些局限性。首先,由于共享内存是被多个进程同时访问的,因此需要确保数据的一致性和同步,否则可能会导致内存冲突和数据错误。其次,使用VS Share Memory需要对内存管理和操作系统有一定的了解和掌握,对开发人员的技术要求较高。 总之,VS Share Memory是一种用于实现进程间共享内存的机制,可以提高数据交换的效率和性能。它在一些需要高性能和低延迟的应用中得到广泛应用,但也需要开发人员对其使用进行充分的理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值