当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python distributed.SpecCluster用法及代码示例


用法:

class distributed.SpecCluster(workers=None, scheduler=None, worker=None, asynchronous=False, loop=None, security=None, silence_logs=False, name=None, shutdown_on_close=True, scheduler_sync_interval=1)

需要完整规范的工作人员的集群

SpecCluster 类需要使用 Scheduler 和 Workers 的完整规范。它删除了对用户输入的任何处理(如线程与进程、内核数量等)以及对集群资源管理器(如 pod、作业等)的任何处理。相反,它希望此信息在调度程序和工作人员规范中传递。这个类确实处理了围绕异步干净地设置和在正确的时间拆除东西的所有逻辑。希望它可以为其他更多user-centric 类奠定基础。

参数

workers: dict

将名称映射到工作人员类及其规范的字典 请参见下面的示例

scheduler: dict, optional

调度程序的类似映射

worker: dict

单个工人的规范。这用于创建的任何新工作人员。

asynchronous: bool

如果打算直接在带有 async/await 的事件循环中使用它

silence_logs: bool

我们是否应该在设置集群时静默日志记录。

name: str, optional

打印集群时使用的名称,默认为类型名称

例子

要创建 SpecCluster,您需要指定如何设置 Scheduler 和 Workers

>>> from dask.distributed import Scheduler, Worker, Nanny
>>> scheduler = {'cls': Scheduler, 'options': {"dashboard_address": ':8787'}}
>>> workers = {
...     'my-worker': {"cls": Worker, "options": {"nthreads": 1}},
...     'my-nanny': {"cls": Nanny, "options": {"nthreads": 2}},
... }
>>> cluster = SpecCluster(scheduler=scheduler, workers=workers)

工作人员规范存储为 .worker_spec 属性

>>> cluster.worker_spec
{
   'my-worker': {"cls": Worker, "options": {"nthreads": 1}},
   'my-nanny': {"cls": Nanny, "options": {"nthreads": 2}},
}

虽然此规范的实例化存储在 .workers 属性中

>>> cluster.workers
{
    'my-worker': <Worker ...>
    'my-nanny': <Nanny ...>
}

如果规范发生变化,我们可以等待集群或调用._correct_state 方法将实际状态与指定状态对齐。

我们还可以.scale(...) 集群,它添加给定形式的新工作人员。

>>> worker = {'cls': Worker, 'options': {}}
>>> cluster = SpecCluster(scheduler=scheduler, worker=worker)
>>> cluster.worker_spec
{}
>>> cluster.scale(3)
>>> cluster.worker_spec
{
    0: {'cls': Worker, 'options': {}},
    1: {'cls': Worker, 'options': {}},
    2: {'cls': Worker, 'options': {}},
}

请注意,上面我们使用的是标准的 WorkerNanny 类,但实际上可以使用其他类来处理资源管理,例如 KubernetesPodSLURMJob 。该规范不需要符合标准 Dask Worker 类的期望。它只需要使用提供的选项调用,支持__await__close 方法和worker_address 属性。

另请注意,不需要规范的统一性。可以在外部(在子类中)添加其他 API,将不同规格的工人添加到同一个字典中。

如果规范中的单个条目将生成多个 dask 工作人员,那么请向规范提供 “group” 元素,其中包括将添加到每个名称的后缀(这应该由您的工作人员类处理)。

>>> cluster.worker_spec
{
    0: {"cls": MultiWorker, "options": {"processes": 3}, "group": ["-0", "-1", -2"]}
    1: {"cls": MultiWorker, "options": {"processes": 2}, "group": ["-0", "-1"]}
}

这些后缀应与工作人员在部署时使用的名称相对应。

>>> [ws.name for ws in cluster.scheduler.workers.values()]
["0-0", "0-1", "0-2", "1-0", "1-1"]

相关用法


注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 distributed.SpecCluster。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。