Dask Gateway,设置worker资源

bil*_*l_e 5 dask dask-kubernetes dask-gateway

我正在尝试按照此处的文档为工作人员设置资源,但设置使用 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'}}}
Run Code Online (Sandbox Code Playgroud)

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

bil*_*l_e 1

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

dask-gateway:
  gateway:
    backend:
      worker:
        extraContainerConfig:
          env:
          - name: DASK_DISTRIBUTED__WORKER__RESOURCES__TASKSLOTS
            value: "1"
Run Code Online (Sandbox Code Playgroud)

设置工作线程资源的选项不会在cluster options中公开,也不会在KubeClusterConfig. 环境变量的具体格式见这里。dask工作进程启动前需要设置资源环境变量,我发现设置后不起作用KubeClusterConfig.environment

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