我用 dask 和延迟写了一个程序,现在我想在云中的几台机器上运行它。但是有一件事我不明白 - dask 如何在云中的多台机器上运行代码而没有代码的所有依赖项?
问问题
151 次
1 回答
0
在多台机器上运行时,Dask 工作人员必须有权访问所有必需的依赖项才能运行您的代码。
你已经标记了你的问题,dask-kubernetes
所以我会用它作为例子。默认情况下dask-kubernetes
,使用daskdev/dask
Docker 映像来运行您的工作人员。此映像包含 Python 和运行 Dask 分布式的最小依赖项。
如果您的代码需要外部依赖项,则必须确保将其安装在映像中。Dask docker 镜像支持通过设置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。然后在您的配置中使用它。
kind: Pod
metadata:
labels:
foo: bar
spec:
restartPolicy: Never
containers:
- image: me/mycustomimage:latest
imagePullPolicy: IfNotPresent
args: [dask-worker, --nthreads, '2', --no-dashboard, --memory-limit, 6GB, --death-timeout, '60']
name: dask
resources:
limits:
cpu: "2"
memory: 6G
requests:
cpu: "2"
memory: 6G
于 2020-05-26T10:02:33.080 回答