pytorch无法把共享内存写入文件
环境:
在容器中跑pytorch模型的训练?
问题表现:
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
Traceback (most recent call last):
? File "/root/anaconda3/lib/python3.8/multiprocessing/queues.py", line 239, in _feed
? ? obj = _ForkingPickler.dumps(obj)
? File "/root/anaconda3/lib/python3.8/multiprocessing/reduction.py", line 51, in dumps
? ? cls(buf, protocol).dump(obj)
? File "/root/anaconda3/lib/python3.8/site-packages/torch/multiprocessing/reductions.py", line 358, in reduce_storage
? ? fd, size = storage._share_fd_cpu_()
RuntimeError: unable to write to file </torch_27822_2114653298_869>: No space left on device (28)
问题原因:
torch.utils.data.dataloader使用了共享内存。容器根目录没有空间,导致共享内存写到文件的时候报错。
解决方案,dataloader不使用共享内存:
from torch.utils.data import dataloader
from torch.multiprocessing import reductions
from multiprocessing.reduction import ForkingPickler
default_collate_func = dataloader.default_collate
def default_collate_override(batch):
dataloader._use_shared_memory = False
return default_collate_func(batch)
setattr(dataloader, 'default_collate', default_collate_override)
for t in torch._storage_classes:
if sys.version_info[0] == 2:
if t in ForkingPickler.dispatch:
del ForkingPickler.dispatch[t]
else:
if t in ForkingPickler._extra_reducers:
del ForkingPickler._extra_reducers[t]
?参考:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!