我正在运行OpenAI基线,特别是事后体验回放代码。(然而,我认为这个问题独立于代码,是一个与MPI相关的问题,因此我在StackOverflow上发表文章的原因。)
你可以看到那里的自述 --但关键是,要运行的命令是:
python -m baselines.her.experiment.train --num_cpu 20其中CPU的数量可以变化,并适用于MPI。
我正在使用1-4个CPU(即--num_cpu x for x=1,2,3,4)在一台机器上成功地运行HER培训脚本,其中:
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.
--------------------------------------------------------------------------这就是我迷路的地方。没有我需要修复的错误消息或代码行。因此,我不确定在代码中添加overload-allowed的位置?
这段代码在较高级别上的工作方式是,它接受这个参数,并使用python subprocess模块运行mpirun命令。但是,在命令行上检查mpirun --help并不会显示overload-allowed是一个有效的参数。
搜索此错误消息将导致openmpi存储库中的问题,例如:
但我不确定是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)因此,TL;DR:
谢谢!
发布于 2018-03-12 16:40:40
overload-allowed是传递给mpirun (来源)的--bind-to参数的限定符。确切的语法对我来说是未知的,但我首先从
mpirun ... --bind-to core overload-allowed请注意,超线程更多的是营销而不是绩效奖金。
您的i7实际上可以有四个硅核和四个“逻辑”核。逻辑部分基本上尝试使用目前未使用的硅核的资源。问题是,一个好的HPC程序将使用100%的CPU硬件,而超线程将没有资源来成功地操作。
因此,“过载”“内核”是安全的,但它并不是性能提升的候选#1。
关于作者对复制结果提出的建议。在最好的情况下,较少的cpus只意味着学习缓慢。然而,如果学习不收敛到一个期望值,不管超参数如何调整,那么就有理由仔细研究所提出的算法。
虽然如果按不同的顺序进行IEEE754计算确实不同,但这种差异不应发挥关键作用。
发布于 2018-03-13 00:38:32
错误消息表明mpi4py构建在Open MPI之上。
默认情况下,插槽是一个核心,但是如果您希望一个槽是一个超级线程,那么您应该
mpirun --use-hwthread-cpus ...https://stackoverflow.com/questions/49239681
复制相似问题