我在docker中运行pytorch。安全团队的要求是在只读模式下运行docker。
我需要将主进程与模型进行分叉,这就是为什么我使用函数module.share_memory()
将所有模型移动到共享内存并使用torch.multiprocessing.set_sharing_strategy('file_system')
,因为否则在file_descriptor
模式下,1024个打开的文件描述符对我来说是不够的,而且我不能增加它,因为它在Linux中是硬编码的。
所以当我在只读模式下运行docker时,我会得到一个错误:
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1515, in share_memory
return self._apply(lambda t: t.share_memory_())
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 387, in _apply
module._apply(fn)
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 387, in _apply
module._apply(fn)
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 387, in _apply
module._apply(fn)
[Previous line repeated 2 more times]
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 409, in _apply
param_applied = fn(param)
File "/app/.venv/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1515, in <lambda>
return self._apply(lambda t: t.share_memory_())
File "/app/.venv/lib/python3.9/site-packages/torch/tensor.py", line 385, in share_memory_
self.storage().share_memory_()
File "/app/.venv/lib/python3.9/site-packages/torch/storage.py", line 143, in share_memory_
self._share_filename_()
RuntimeError: std::exception at /pytorch/torch/lib/libshm/core.cpp:99
字符串
我知道我需要给给予一个额外的RW访问一些目录,但我不知道是哪些目录。你能帮助我,我怎么能找到这些目录?当然有一个RW访问/dev/shm,我甚至可以看到,pytorch创建文件,但然后崩溃与上述错误。
我用的是Pytroch1.8.1.
1条答案
按热度按时间yks3o0rb1#
我可以用两种不同的方法来修复它:
ENV TEMP=/var/tmp
(将pytorch的tmp路径从默认的/tmp
更改为/var/tmp
),并通过添加到docker run args:-v /var/tmp:/var/tmp
来提供对/var/tmp
的rw访问-v /tmp:/tmp
(pytorch默认使用/tmp
)