在Jupyter笔记本或串行Python进程中扩展数百个计算节点上的串行和MPI并行Python函数。
项目描述
executorlib
挑战
在高性能计算(HPC)中,Python编程语言通常用作高级语言来编排科学应用的耦合。然而,高效使用高度并行的HPC集群仍然具有挑战性,主要体现在以下三个方面
- 通信: 在数百个计算节点上分发Python函数调用并在共享文件系统上收集结果在技术上可行,但效率低下。基于套接字的通信方法更可取。
- 资源管理:将Python函数分配到GPU或使用消息传递接口(MPI)在多个CPU上执行,需要对Python工作流程进行重大修改。
- 集成:现有的工作流程库在Python级别上实现二级作业管理,而不是利用HPC作业调度程序提供的基础设施。
executorlib是...
在给定的HPC分配中,executorlib
库通过扩展标准Python库的Executor接口来支持HPC环境中的资源分配来应对这些挑战。计算资源可以按函数调用分配,也可以按Executor分配。在HPC环境中,executorlib
库建立在flux-framework之上,以实现细粒度的资源分配。此外,支持作为替代队列系统Simple Linux Utility for Resource Management (SLURM),对于工作站安装,executorlib
可以在没有作业调度程序的情况下安装。
executorlib不是...
executorlib
库不是设计用来从HPC作业调度程序请求分配。而是在作业调度程序给定的分配中,可以使用executorlib
库来分配一系列Python函数调用到可用的计算资源上,以实现计算资源利用的最大化。
示例
以下示例说明了如何使用executorlib
在队列系统分配中分配一系列MPI并行函数调用。example.py
import flux.job
from executorlib import Executor
def calc(i):
from mpi4py import MPI
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
return i, size, rank
with flux.job.FluxExecutor() as flux_exe:
with Executor(max_cores=2, cores_per_worker=2, executor=flux_exe) as exe:
fs = exe.submit(calc, 3)
print(fs.result())
此示例可以执行为
python example.py
返回结果为
>>> [(0, 2, 0), (0, 2, 1)], [(1, 2, 0), (1, 2, 1)]
在此示例中,重要的是mpi4py仅在calc()
函数中使用,不在Python脚本中,因此不需要使用mpiexec
调用脚本,而是使用常规Python解释器即可。这突出了executorlib
允许用户一次并行化一个函数,而不必将整个工作流程转换为使用mpi4py。相同的代码也可以直接在jupyter notebook中执行,从而实现交互式开发过程。
通过添加选项cores_per_worker=2
到标准concurrent.futures.Executor接口来扩展,可以将多个MPI等级分配给每个函数调用。为了创建两个工作者,最大核心数可以增加到max_cores=4
。在这种情况下,每个工作者将获得两个核心,总共利用四个CPU核心。
在将函数calc()
及其相应的参数提交给执行器exe.submit(calc, 0)
后,返回一个Python concurrent.futures.Future
。因此,可以使用executorlib.Executor
作为concurrent.futures.Executor
的替代品,允许用户一次添加一个函数的并行性到他们的工作流程中。
免责声明
虽然我们试图开发一个稳定可靠的软件库,但开发仍然是一个不受任何保证的BSD 3-Clause License的开源项目:
BSD 3-Clause License
Copyright (c) 2022, Jan Janssen
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
文档
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
executorlib-0.0.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9cd753bbb4d9f9db1464b225289a9b019fe97f94d6a44682da3a62d70fc58b84 |
|
MD5 | f5fceafbdd87a9264d0502d275625c0d |
|
BLAKE2b-256 | ba1d00b64a5ff53759a4fee06115ed3cf09476a140f33e5712dbf6ba61a7d3ba |
executorlib-0.0.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a80a2dfbbe42ea5c29e08b5c7a9bb688dfebbf8a4c3b61a00438c40d64bcbcda |
|
MD5 | 4e10cdfb570f24aa2afdd123569fa616 |
|
BLAKE2b-256 | 4879c4ec8be8215fc2fb2d3e7667f021253be481361546c3d3184d6e48d32d99 |