當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。