跳转到主要内容

colmena: 高性能计算中的智能可引导管道

项目描述

Colmena

CI Documentation Status PyPI version Coverage Status

Colmena简化了构建自主应用程序,该程序可引导在超级计算机上运行的大规模模拟活动。

此类“高通量”活动在历史上是由人类确定下一步要运行哪些任务来指导的——这是一个耗时且具有“新数据”与“决策”之间高延迟的过程。

Colmena的创建是为了构建应用,这些应用通过人工智能(AI)增强或取代人类操作。

安装

Colmena可通过PyPI获取:pip install colmena

请参考我们的安装指南以获取更多信息。

使用Colmena

Colmena应用通过两个组件描述计算活动:一个“思考者”选择计算任务,以及一个“执行者”执行这些任务。

“思考者”将如何运行新计算的逻辑编码为“代理”。当将复杂策略分解为简单步骤时,表示变得简单。例如,分布式优化器

from random import random

from colmena.thinker import BaseThinker, result_processor, task_submitter, ResourceCounter
from colmena.queue import PipeQueues
from colmena.models import Result

# Build queues to connect Thinker and Doer
queues = PipeQueues()


class Thinker(BaseThinker):

    def __init__(self, queues, num_workers: int, num_guesses=100):
        super().__init__(queues, ResourceCounter(num_workers))
        self.best_result = None
        self.answer = -10  # A (bad) starting guess
        self.num_guesses = num_guesses

    @task_submitter()
    def submit_task(self):
        """Submit a new guess close to the current best whenever a node is free"""
        self.queues.send_inputs(self.answer - 1 + 2 * random(), method='simulate')

    @result_processor()
    def store_result(self, result: Result):
        """Update best guess whenever a simulation finishes"""
        assert result.success, result.failure_info
        # Update the best result
        if self.best_result is None or result.value > self.best_result:
            self.answer = result.args[0]
            self.best_result = result.value
        self.rec.release()  # Mark that a node is now free

        # Determine if we are done
        self.num_guesses -= 1
        if self.num_guesses <= 0:
            self.done.set()


thinker = Thinker(queues, 8)

“执行者”描述计算类型和可用的计算资源。Colmena提供由多个工作流引擎支持的Task Servers,例如来自ExaWorks项目的引擎。使用Parsl构建时,只需要将您的计算表示为Python函数

from parsl.configs.htex_local import config  # Configuration to run locally
from colmena.task_server.parsl import ParslTaskServer

# Define your function
def simulate(x: float) -> float:
    return - x ** 2 + 4

# Make the Doer
doer = ParslTaskServer([simulate], queues, config)

一旦这些定义完成,启动应用涉及到启动这两个组件

# Launch the Thinker and doer
doer.start()
thinker.start()

# Wait until it finishes
thinker.join()
queues.send_kill_signal()  # Stop the doer

# Done!
print(f'Answer: f({thinker.answer:.2f}) = {thinker.best_result:.2f}')

教程

访问快速入门学习如何构建完整的应用。

更多示例

查看demo_apps以了解使用Colmena的多种方式。

了解更多

我们的Read-the-Docs提供了关于Colmena的最新信息。

您还可以通过我们关于Colmena发表的文章了解更多信息

  • Ward等人。“Colmena:基于机器学习的可扩展集成模拟的高性能计算中的引导”。《2021 IEEE/ACM高性能计算环境中的机器学习研讨会(MLHPC)》[doi] [ArXiv] [幻灯片] [YouTube]

致谢

本项目部分由美国能源部(DOE)的Exascale Computing Project(17-SC-20-SC)和DOE的先进科学研究办公室(ASCR)在合同DE-AC02-06CH11357下支持。

项目详情


下载文件

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

源分发

colmena-0.7.0.tar.gz (61.1 kB 查看散列)

上传时间

构建分发

colmena-0.7.0-py3-none-any.whl (70.9 kB 查看散列)

上传时间 Python 3

由以下支持