"A request was made to bind to that would result in binding more processes than cpus on a resource" mpirun 命令(用于 mpi4py)
"A request was made to bind to that would result in binding more processes than cpus on a resource" mpirun command (for mpi4py)
我正在 运行宁 OpenAI 基线,特别是 Hindsight Experience Replay 代码。 (但是,我认为这个问题与代码无关,并且是与 MPI 相关的问题,因此我在 Whosebug 上发帖。)
You can see the README there 但重点是,运行 的命令是:
python -m baselines.her.experiment.train --num_cpu 20
其中 CPU 的数量可以变化并且适用于 MPI。
我在一台机器上成功地运行使用 1-4 个 CPU(即 --num_cpu x
for x=1,2,3,4)使用 HER 训练脚本:
- Ubuntu 16.04
- Python 3.5.2
- 张量流 1.5.0
- 一个 TitanX GPU
CPU 的数量似乎是 8 个,因为我有一个带超线程的四核 i7 Intel 处理器,Python 确认它有 8 个 CPU。
(py3-tensorflow) daniel@titan:~/baselines$ ipython
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import os, multiprocessing
In [2]: os.cpu_count()
Out[2]: 8
In [3]: multiprocessing.cpu_count()
Out[3]: 8
不幸的是,当我 运行 有 5 个或更多 CPU 时,我收到此消息阻止来自 运行ning:
的代码
(py3-tensorflow) daniel@titan:~/baselines$ python -m baselines.her.experiment.train --num_cpu 5
--------------------------------------------------------------------------
A request was made to bind to that would result in binding more
processes than cpus on a resource:
Bind to: CORE
Node: titan
#processes: 2
#cpus: 1
You can override this protection by adding the "overload-allowed"
option to your binding directive.
--------------------------------------------------------------------------
这就是我迷路的地方。没有我需要修复的错误消息或代码行。因此,我不确定我什至在代码中添加 overload-allowed
的位置?
这段代码在高层的工作方式是它接受这个参数并使用 python subprocess
模块来 运行 一个 mpirun
命令。但是,在命令行上检查 mpirun --help
不会将 overload-allowed
显示为有效参数。
谷歌搜索此错误消息会导致 openmpi 存储库中出现问题,例如:
- https://github.com/open-mpi/ompi/issues/626(好像没解决问题就死掉了)
- https://github.com/open-mpi/ompi/issues/2158(不确定这与我的问题有什么关系,没有得到明确的解决方案)
但我不确定它是 OpenMPI 的东西还是 mpi4py 的东西?
如果有帮助,这里是我的虚拟环境中的pip list
:
(py3.5-mpi-practice) daniel@titan:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
decorator (4.2.1)
ipython (6.2.1)
ipython-genutils (0.2.0)
jedi (0.11.1)
line-profiler (2.1.2)
mpi4py (3.0.0)
numpy (1.14.1)
parso (0.1.1)
pexpect (4.4.0)
pickleshare (0.7.4)
pip (9.0.1)
pkg-resources (0.0.0)
pprintpp (0.3.0)
prompt-toolkit (1.0.15)
ptyprocess (0.5.2)
Pygments (2.2.0)
setuptools (20.7.0)
simplegeneric (0.8.1)
six (1.11.0)
traitlets (4.3.2)
wcwidth (0.1.7)
所以,长话短说:
- 如何修复我的代码中的这个错误?
- 如果我添加 "overload-allowed" 东西,会发生什么?安全吗?
谢谢!
overload-allowed
是传递给 mpirun
(source) 的 --bind-to
参数的限定符。我不知道确切的语法,但我会从
开始
mpirun ... --bind-to core overload-allowed
请注意,超线程更多的是营销而不是绩效奖金。
您的 i7 实际上可以有四个硅内核和四个 "logical"。逻辑的基本上尝试使用当前未使用的硅内核的资源。问题是一个好的 HPC 程序将使用 100% 的 CPU 硬件,而超线程将没有资源来成功运行。
因此,"overload" "cores" 是安全的,但它不是性能提升候选 #1。
关于论文作者给出的关于重现结果的建议。在最好的情况下,更少的 cpu 意味着学习缓慢。但是,如果无论如何调整超参数,学习都不会收敛到预期值,那么就有理由仔细研究所提出的算法。
虽然 IEEE754 计算在不同顺序下确实会有所不同,但这种差异不应起决定性作用。
错误消息表明 mpi4py
是在 Open MPI
之上构建的。
默认情况下,插槽是核心,但如果您希望插槽成为超线程,则应该
mpirun --use-hwthread-cpus ...
我正在 运行宁 OpenAI 基线,特别是 Hindsight Experience Replay 代码。 (但是,我认为这个问题与代码无关,并且是与 MPI 相关的问题,因此我在 Whosebug 上发帖。)
You can see the README there 但重点是,运行 的命令是:
python -m baselines.her.experiment.train --num_cpu 20
其中 CPU 的数量可以变化并且适用于 MPI。
我在一台机器上成功地运行使用 1-4 个 CPU(即 --num_cpu x
for x=1,2,3,4)使用 HER 训练脚本:
- Ubuntu 16.04
- Python 3.5.2
- 张量流 1.5.0
- 一个 TitanX GPU
CPU 的数量似乎是 8 个,因为我有一个带超线程的四核 i7 Intel 处理器,Python 确认它有 8 个 CPU。
(py3-tensorflow) daniel@titan:~/baselines$ ipython
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import os, multiprocessing
In [2]: os.cpu_count()
Out[2]: 8
In [3]: multiprocessing.cpu_count()
Out[3]: 8
不幸的是,当我 运行 有 5 个或更多 CPU 时,我收到此消息阻止来自 运行ning:
的代码(py3-tensorflow) daniel@titan:~/baselines$ python -m baselines.her.experiment.train --num_cpu 5
--------------------------------------------------------------------------
A request was made to bind to that would result in binding more
processes than cpus on a resource:
Bind to: CORE
Node: titan
#processes: 2
#cpus: 1
You can override this protection by adding the "overload-allowed"
option to your binding directive.
--------------------------------------------------------------------------
这就是我迷路的地方。没有我需要修复的错误消息或代码行。因此,我不确定我什至在代码中添加 overload-allowed
的位置?
这段代码在高层的工作方式是它接受这个参数并使用 python subprocess
模块来 运行 一个 mpirun
命令。但是,在命令行上检查 mpirun --help
不会将 overload-allowed
显示为有效参数。
谷歌搜索此错误消息会导致 openmpi 存储库中出现问题,例如:
- https://github.com/open-mpi/ompi/issues/626(好像没解决问题就死掉了)
- https://github.com/open-mpi/ompi/issues/2158(不确定这与我的问题有什么关系,没有得到明确的解决方案)
但我不确定它是 OpenMPI 的东西还是 mpi4py 的东西?
如果有帮助,这里是我的虚拟环境中的pip list
:
(py3.5-mpi-practice) daniel@titan:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
decorator (4.2.1)
ipython (6.2.1)
ipython-genutils (0.2.0)
jedi (0.11.1)
line-profiler (2.1.2)
mpi4py (3.0.0)
numpy (1.14.1)
parso (0.1.1)
pexpect (4.4.0)
pickleshare (0.7.4)
pip (9.0.1)
pkg-resources (0.0.0)
pprintpp (0.3.0)
prompt-toolkit (1.0.15)
ptyprocess (0.5.2)
Pygments (2.2.0)
setuptools (20.7.0)
simplegeneric (0.8.1)
six (1.11.0)
traitlets (4.3.2)
wcwidth (0.1.7)
所以,长话短说:
- 如何修复我的代码中的这个错误?
- 如果我添加 "overload-allowed" 东西,会发生什么?安全吗?
谢谢!
overload-allowed
是传递给 mpirun
(source) 的 --bind-to
参数的限定符。我不知道确切的语法,但我会从
mpirun ... --bind-to core overload-allowed
请注意,超线程更多的是营销而不是绩效奖金。
您的 i7 实际上可以有四个硅内核和四个 "logical"。逻辑的基本上尝试使用当前未使用的硅内核的资源。问题是一个好的 HPC 程序将使用 100% 的 CPU 硬件,而超线程将没有资源来成功运行。
因此,"overload" "cores" 是安全的,但它不是性能提升候选 #1。
关于论文作者给出的关于重现结果的建议。在最好的情况下,更少的 cpu 意味着学习缓慢。但是,如果无论如何调整超参数,学习都不会收敛到预期值,那么就有理由仔细研究所提出的算法。
虽然 IEEE754 计算在不同顺序下确实会有所不同,但这种差异不应起决定性作用。
错误消息表明 mpi4py
是在 Open MPI
之上构建的。
默认情况下,插槽是核心,但如果您希望插槽成为超线程,则应该
mpirun --use-hwthread-cpus ...