我编写了一个程序,但很快又延迟了,现在我想在云中的多台计算机上运行它。但是有一件我不理解的事-在没有代码所有依赖的情况下,dask如何在云中的多台计算机上运行代码?
在多台计算机上运行时,Dask工作人员必须有权访问所有必需的依赖关系才能运行您的代码。
您已经用dask-kubernetes
标记了您的问题,所以我将以它为例。默认情况下,dask-kubernetes
使用daskdev/dask
Docker image运行您的工作程序。该图像包含Python和运行Dask分布的最小依赖关系。
如果您的代码需要外部依赖,则必须确保已将其安装在映像中。 Dask docker映像支持通过设置daskdev/dask
,EXTRA_APT_PACKAGES
或EXTRA_CONDA_PACKAGES
环境变量来在运行时安装额外的软件包。
EXTRA_PIP_PACKAGES
# worker-spec.yml kind: Pod metadata: labels: foo: bar spec: restartPolicy: Never containers: - image: daskdev/dask:latest imagePullPolicy: IfNotPresent args: [dask-worker, --nthreads, '2', --no-dashboard, --memory-limit, 6GB, --death-timeout, '60'] name: dask env: - name: EXTRA_APT_PACKAGES value: packagename # Some package to install with `apt install` - name: EXTRA_PIP_PACKAGES value: packagename # Some package to install with `pip install` - name: EXTRA_CONDA_PACKAGES value: packagename # Some package to install with `conda install` resources: limits: cpu: "2" memory: 6G requests: cpu: "2" memory: 6G
缺点是每次启动工作程序时都必须安装软件包,这会使
from dask_kubernetes import KubeCluster cluster = KubeCluster.from_yaml('worker-spec.yml')
变慢。因此,您也可以创建已经安装了所有依赖项的自己的Docker映像,并将其发布到Docker Hub。然后在您的配置中使用它。
adaptive scaling