&引用;请求绑定到将导致绑定比资源上的CPU更多的进程”;mpirun命令(用于mpi4py)
我正在运行OpenAI基线,特别是事后经验回放代码。(然而,我认为这个问题与代码无关,是一个与MPI相关的问题,因此我在StackOverflow上发帖。) 但关键是,要运行的命令是:&引用;请求绑定到将导致绑定比资源上的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
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
(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存储库中出现问题,例如:
- (似乎没有解决问题就消失了)
- (不确定这与我的问题有什么关系,没有得到明确的解决)
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:允许重载