我正在运行OpenAI基线,特别是Hindsight Experience Replay代码。 (但是,我认为这个问题与代码无关,并且与MPI相关,因此我在StackOverflow上发帖。)
You can see the README there但关键是,要运行的命令是:
python -m baselines.her.experiment.train --num_cpu 20
其中CPU数量可以变化,适用于MPI。
我在一台机器上成功运行了带有1-4个CPU的HER训练脚本(例如,--num_cpu x
用于x = 1,2,3,4):
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时,我收到此消息阻止代码运行:
(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
显示为有效参数。
Google搜索此错误消息会导致openmpi存储库中出现问题,例如:
但是我不确定它是OpenFI还是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:
谢谢!
答案 0 :(得分:0)
overload-allowed
是传递给--bind-to
mpirun
mpirun ... --bind-to core overload-allowed
参数function getNewResources (currentUrl, nextUrl)
{
let resourcesCurrentUrl = getResourceByUrl(currentUrl);
let resourcesNextUrl = getResourceByUrl(nextUrl);
// Diff resources
ACCESS DATA FROM ABOVE VARIABLES HERE!
// Return new resources
}
function getResourceByUrl (url)
{
let xmlhttp = new XMLHttpRequest();
let xmlResponse;
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4) {
// when succesfull
var resources = extractResourcesFromXMLResponse(this.response);
return resources;
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function extractResourcesFromXMLResponse (xmlResponse)
{
let resources = [];
// Add images
imagePaths = extractImages(xmlResponse);
resources.push(imagePaths);
return resources;
}
function extractImages(xmlDoc)
{
let match,
extractedImages = [],
newArr = [],
rex = /<img.*?src="([^">]*\/([^">]*?))".*?>/g;
while ( match = rex.exec( xmlDoc ) ) {
extractedImages.push( match[1] );
}
return extractedImages;
}
}的限定符。确切的语法对我来说是未知的,但我从
resource
请注意,超线程更多的是关于营销而不是绩效奖金。
您的i7实际上可以有四个硅芯和四个&#34;逻辑&#34;那些。逻辑上的基本上尝试使用当前未使用的硅核的资源。问题是一个好的HPC程序将使用100%的CPU硬件,超线程没有资源成功运行。
因此,过载&#34;过载是安全的。 &#34;核心&#34;,但它不是性能提升候选人#1。
关于论文作者关于复制结果的建议。在最好的情况下,较少的cpu只意味着学习缓慢。但是,如果无论如何调整超灵验,学习都不会收敛到预期值,那么就有理由仔细研究所提出的算法。
虽然如果以不同的顺序进行IEEE754计算会有所不同,但这种差异不应起到至关重要的作用。
答案 1 :(得分:0)
错误消息表明mpi4py
建立在Open MPI
之上。
默认情况下,插槽是核心,但如果你想要一个插槽是超线程,那么你应该
mpirun --use-hwthread-cpus ...