首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“请求绑定到它将导致比cpus在资源上绑定更多的进程”mpirun命令(用于mpi4py)。

“请求绑定到它将导致比cpus在资源上绑定更多的进程”mpirun命令(用于mpi4py)。
EN

Stack Overflow用户
提问于 2018-03-12 16:06:13
回答 2查看 3.5K关注 0票数 2

我正在运行OpenAI基线,特别是事后体验回放代码。(然而,我认为这个问题独立于代码,是一个与MPI相关的问题,因此我在StackOverflow上发表文章的原因。)

你可以看到那里的自述 --但关键是,要运行的命令是:

代码语言:javascript
复制
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
  • TensorFlow 1.5.0
  • 一台TitanX GPU

CPU的数量似乎是8个,因为我有一个带有超线程的四核i7英特尔处理器,并且Python确认它看到了8个CPU。

代码语言:javascript
复制
(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运行时,会收到这样的消息,阻止代码运行:

代码语言:javascript
复制
(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存储库中的问题,例如:

但我不确定是OpenMPI还是mpi4py?

这是我的虚拟环境中的pip list,如果它有帮助的话:

代码语言:javascript
复制
(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;DR:

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-12 16:40:40

overload-allowed是传递给mpirun (来源)的--bind-to参数的限定符。确切的语法对我来说是未知的,但我首先从

代码语言:javascript
复制
mpirun ... --bind-to core overload-allowed

请注意,超线程更多的是营销而不是绩效奖金。

您的i7实际上可以有四个硅核和四个“逻辑”核。逻辑部分基本上尝试使用目前未使用的硅核的资源。问题是,一个好的HPC程序将使用100%的CPU硬件,而超线程将没有资源来成功地操作。

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

关于作者对复制结果提出的建议。在最好的情况下,较少的cpus只意味着学习缓慢。然而,如果学习不收敛到一个期望值,不管超参数如何调整,那么就有理由仔细研究所提出的算法。

虽然如果按不同的顺序进行IEEE754计算确实不同,但这种差异不应发挥关键作用。

票数 3
EN

Stack Overflow用户

发布于 2018-03-13 00:38:32

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

默认情况下,插槽是一个核心,但是如果您希望一个槽是一个超级线程,那么您应该

代码语言:javascript
复制
mpirun --use-hwthread-cpus ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49239681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档