5

我正在尝试根据此处的文档为工作人员设置资源,但是在使用 Dask Gateway 的设置上。具体来说,我希望能够遵循这个问题的答案,但使用 Dask Gateway。

我无法在ClusterConfig 选项中找到对工作资源的引用,我尝试了以下方法(根据这个答案),这似乎不起作用:

def set_resources(dask_worker):
    dask_worker.set_resources(task_limit=1)
    return dask_worker.available_resources, dask_worker.total_resources

client.run(set_resources)

# output from a 1 worker cluster
> {'tls://255.0.91.211:39302': ({}, {})}


# checking info known by scheduler
cluster.scheduler_info

> {'type': 'Scheduler',
 'id': 'Scheduler-410438c9-6b3a-494d-974a-52d9e9fss121',
 'address': 'tls://255.0.44.161:8786',
 'services': {'dashboard': 8787, 'gateway': 8788},
 'started': 1632434883.9022279,
 'workers': {'tls://255.0.92.232:39305': {'type': 'Worker',
   'id': 'dask-worker-f95c163cf41647c6a6d85da9efa9919b-wvnf6',
   'host': '255.0.91.211',
   'resources': {}, #### still {} empty dict
   'local_directory': '/home/jovyan/dask-worker-space/worker-ir8tpkz_',
   'name': 'dask-worker-f95c157cf41647c6a6d85da9efa9919b-wvnf6',
   'nthreads': 4,
   'memory_limit': 6952476672,
   'services': {'dashboard': 8787},
   'nanny': 'tls://255.0.92.232:40499'}}}

使用config.yamlDask Gateway 的 helm 图(理想情况下,集群选项中的一个用户可以更改的字段!)创建集群时,或者在工作人员已经启动并运行之后,如何做到这一点?

4

1 回答 1

1

我找到了一种方法来指定这一点,至少在 Kubernetes 上,是通过KubeClusterConfig.worker_extra_container_config. 这是我用于工作配置的 yaml 片段(具体来说,这是在我的 daskhub helm deploy 配置中):

dask-gateway:
  gateway:
    backend:
      worker:
        extraContainerConfig:
          env:
          - name: DASK_DISTRIBUTED__WORKER__RESOURCES__TASKSLOTS
            value: "1"

设置工作器资源的选项未在集群选项中公开,也未在KubeClusterConfig. 环境变量的具体格式在此处描述。资源环境变量需要在dask worker进程启动前设置,我设置的时候发现不行KubeClusterConfig.environment

使用它,我可以np.dot在一个拥有 4 个内核的 dask 工作容器中使用 mkl 运行多线程 numpy ()。我看到 400% 的 CPU 使用率和每个工人只分配了一个任务。

于 2021-10-04T04:02:44.243 回答