背景
我有一个非常小的网络,我想用不同的随机种子进行测试。该网络几乎不使用我的 GPU 的 1% 计算能力,因此理论上我可以一次运行 50 个进程来一次尝试许多不同的种子。
问题
不幸的是,我什至无法在多个进程中导入 pytorch。当 nr of processes 超过 4 时,我会收到关于页面文件太小的 Traceback。
最少的可重现代码§ - dispatcher.py
from subprocess import Popen
import sys
procs = []
for seed in range(50):
procs.append(Popen([sys.executable, "ml_model.py", str(seed)]))
for proc in procs:
proc.wait()
§我增加了种子的数量,所以拥有更好机器的人也可以复制它。
最少的可重现代码 - ml_model.py
import torch
import time
time.sleep(10)
Traceback (most recent call last):
File "ml_model.py", line 1, in <module>
import torch
File "C:UsersuserAppDataLocalProgramsPythonPython38libsite-packagestorch__init__.py", line 117, in <module>
import torch
File "C:UsersuserAppDataLocalProgramsPythonPython38libsite-packagestorch__init__.py", line 117, in <module>
raise err
OSError: [WinError 1455] The paging file is too small for this operation to complete. Error loading "C:UsersuserAppDataLocalProgramsPythonPython38libsite-packagestorchlibcudnn_cnn_infer64_8.dll" or one of its dependencies.
raise err
进一步的调查
我注意到每个进程都会将大量 dll 加载到 RAM 中。当我关闭所有其他使用大量 RAM 的程序时,我最多可以获得 10 个进程而不是 4 个。所以这似乎是一个资源限制。
问题
有解决方法吗?
在单个 gpu 上使用 pytorch 训练许多小型网络的推荐方法是什么?
我应该编写自己的 CUDA 内核,还是使用不同的框架来实现这一点?
我的目标是一次运行大约 50 个进程(在 16GB RAM 机器上,8GB GPU RAM 上)
好吧,我设法解决了这个问题。打开“高级系统设置”。转到高级选项卡,然后单击与性能相关的设置。再次单击高级选项卡--> 更改--> 取消选择“自动......”。对于所有驱动器,设置“系统管理大小”。重启你的电脑。