&引用;请求绑定到将导致绑定比资源上的CPU更多的进程”;mpirun命令(用于mpi4py)

&引用;请求绑定到将导致绑定比资源上的CPU更多的进程”;mpirun命令(用于mpi4py),mpi,openmpi,mpi4py,Mpi,Openmpi,Mpi4py,我正在运行OpenAI基线,特别是事后经验回放代码。(然而,我认为这个问题与代码无关,是一个与MPI相关的问题,因此我在StackOverflow上发帖。) 但关键是,要运行的命令是: python -m baselines.her.experiment.train --num_cpu 20 其中,CPU的数量可能会有所不同,并且适用于MPI 我使用1-4个cpu(即x=1,2,3,4的--num_cpu x在一台机器上成功运行HER培训脚本,具有: Ubuntu 16.04 Python

我正在运行OpenAI基线,特别是事后经验回放代码。(然而,我认为这个问题与代码无关,是一个与MPI相关的问题,因此我在StackOverflow上发帖。)

但关键是,要运行的命令是:

python -m baselines.her.experiment.train --num_cpu 20
其中,CPU的数量可能会有所不同,并且适用于MPI

我使用1-4个cpu(即x=1,2,3,4的
--num_cpu x
在一台机器上成功运行HER培训脚本,具有:

  • Ubuntu 16.04
  • Python 3.5.2
  • TensorFlow 1.5.0
  • 一个TitanX GPU
CPU的数量似乎是8个,因为我有一个四核i7英特尔处理器和超线程,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运行时,会收到以下消息阻止代码运行:

(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.
--------------------------------------------------------------------------
这就是我迷路的地方。没有需要修复的错误消息或代码行。因此,我甚至不确定我在代码中添加了
允许的重载

这段代码在高层的工作方式是,它接受这个参数,并使用python
子流程
模块来运行
mpirun
命令。但是,在命令行上检查
mpirun--help
,不会将
允许的重载
显示为有效参数

用谷歌搜索此错误消息会导致openmpi存储库中出现问题,例如:

  • (似乎没有解决问题就消失了)
  • (不确定这与我的问题有什么关系,没有得到明确的解决)
但我不确定这是OpenMPI还是mpi4py

以下是我的虚拟环境中的
pip列表
,如果有帮助:

(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)
因此,TL;博士:

  • 如何修复代码中的此错误
  • 如果我添加“允许过载”的东西,会发生什么?安全吗

谢谢

允许重载
是传递给
--绑定到
mpirun
()的
参数的限定符。确切的语法我不知道,但我先从

mpirun ... --bind-to core overload-allowed
请注意,超阅读更多的是关于营销,而不是关于绩效奖金

i7实际上可以有四个硅核和四个“逻辑”核。逻辑型的基本上是利用当前未使用的硅核资源。问题是一个好的HPC程序将使用100%的CPU硬件,而超线程将没有资源成功运行

因此,“过载”内核是安全的,但它不是一个性能提升候选者#1

关于论文作者关于复制结果的建议。在最好的情况下,更少的CPU只意味着学习速度慢。然而,如果无论如何调整超参数,学习都不能收敛到预期值,那么这就是仔细研究所提出算法的原因


虽然IEEE754计算的顺序不同,但这种差异不应起到关键作用。

错误消息表明
mpi4py
是在
Open MPI
之上构建的

默认情况下,插槽是核心,但如果希望插槽是超线程,则应该

mpirun --use-hwthread-cpus ...

您解决了问题吗?我刚刚认识到,您只有4个物理内核,每个物理内核有2个虚拟进程。将
--num\u cpu
减少到
4
应该可以做到这一点。@Freddi是的,我只会使用4。这应该是
--bind to core:允许重载