跳转到主要内容

一个Python包,使用户能够在HPC集群上构建自定义singularity镜像

项目描述

使用globus-compute在HPC上构建一个单容器

上下文

  • globus-compute的执行配置之一需要一个已注册的容器,该容器被启动以在HPC上执行用户函数。

  • HPC不运行docker容器(由于安全原因,如此处所述)并且仅支持apptainer/singularity镜像。

  • 在本地构建singularity镜像的apptainer设置安装不是一个简单的过程,尤其是在Windows和mac系统上,如文档中所述。

使用这个Python库,用户可以指定他们的自定义图像规范来构建apptainer/singularity图像,该图像将用于在globus-compute上运行他们的函数。库注册容器并返回容器ID,该ID将被globus-compute执行器用于执行用户函数。

先决条件。

在HPC集群上设置了globus-compute-endpoint

以下步骤可以用于在NCSA Delta集群上创建端点,您可以根据您的用例修改配置:

注意。

为了使以下内容生效,我们必须在设置端点时使用globus-compute-sdk版本2.2.0。建议使用python3.9来设置端点并作为客户端。

  1. 创建一个conda虚拟环境。我们已在delta集群上创建了custom-image-builder conda环境,如下所示:
conda create --name custom-image-builder-py-3.9 python=3.9

conda activate custom-image-builder

pip install globus-compute-endpoint==2.2.0
  1. 创建globus-compute端点
globus-compute-endpoint configure custom-image-builder

~/.globus_compute/custom-image-builder/config.py中更新端点配置

from parsl.addresses import address_by_interface
from parsl.launchers import SrunLauncher
from parsl.providers import SlurmProvider

from globus_compute_endpoint.endpoint.utils.config import Config
from globus_compute_endpoint.executors import HighThroughputExecutor


user_opts = {
    'delta': {
        'worker_init': 'conda activate custom-image-builder-py-3.9',
        'scheduler_options': '#SBATCH --account=bbmi-delta-cpu',
    }
}

config = Config(
    executors=[
        HighThroughputExecutor(
            max_workers_per_node=10,
            address=address_by_interface('hsn0'),
            scheduler_mode='soft',
            worker_mode='singularity_reuse',
            container_type='singularity',
            container_cmd_options="",
            provider=SlurmProvider(
                partition='cpu',
                launcher=SrunLauncher(),

                # string to prepend to #SBATCH blocks in the submit
                # script to the scheduler eg: '#SBATCH --constraint=knl,quad,cache'
                scheduler_options=user_opts['delta']['scheduler_options'],
                worker_init=user_opts['delta']['worker_init'],
                # Command to be run before starting a worker, such as:
                # 'module load Anaconda; source activate parsl_env'.

                # Scale between 0-1 blocks with 2 nodes per block
                nodes_per_block=1,
                init_blocks=0,
                min_blocks=0,
                max_blocks=1,

                # Hold blocks for 30 minutes
                walltime='00:30:00'
            ),
        )
    ],
)
  1. 启动端点并将端点ID存储在以下示例中
globus-compute-endpoint start custom-image-builder

示例

考虑以下用例,其中用户想在HPC上使用globus-compute执行pandas操作。他们需要一个由globus-compute执行器使用的singularity图像。可以使用以下方式利用库:

本地您需要安装以下包,您可以创建虚拟环境如下:

cd example/

python3.9 -m venv venv

source venv/bin/activate

pip install globus-compute-sdk==2.2.0

pip install custom-image-builder
from custom_image_builder import build_and_register_container
from globus_compute_sdk import Client, Executor


def transform():
    import pandas as pd
    data = {'Column1': [1, 2, 3],
            'Column2': [4, 5, 6]}

    df = pd.DataFrame(data)

    return "Successfully created df"


def main():
    image_builder_endpoint = "bc106b18-c8b2-45a3-aaf0-75eebc2bef80"
    gcc_client = Client()

    container_id = build_and_register_container(gcc_client=gcc_client,
                                                endpoint_id=image_builder_endpoint,
                                                image_file_name="my-pandas-image",
                                                base_image_type="docker",
                                                base_image="python:3.8",
                                                pip_packages=["pandas"])

    print("The container id is", container_id)

    with Executor(endpoint_id=image_builder_endpoint,
                  container_id=container_id) as ex:
        fut = ex.submit(transform)

    print(fut.result())

注意。

由于singularity图像需要globus-compute-endpoint作为其包之一以运行作为我们自定义singularity容器的工作者,因此默认情况下我们需要在图像中包含python以便安装globus-compute-endpoint。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

custom_image_builder-1.0.1.tar.gz (6.4 kB 查看哈希)

上传时间

构建分布

custom_image_builder-1.0.1-py3-none-any.whl (6.3 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面