Dask 如何在云中的多个虚拟机上执行代码
How does Dask execute code on multiple vm's in the cloud
我用 dask 和 delayed 编写了一个程序,现在我想 运行 在云端的多台机器上运行它。但是有一件事我不明白——dask 运行 云中多台机器上的代码没有代码的所有依赖项是如何实现的?
当 运行在多台机器上运行时,Dask 工作人员必须能够访问所有必需的依赖项才能 运行 您的代码。
您用 dask-kubernetes
标记了您的问题,所以我将以此为例。默认情况下 dask-kubernetes
使用 daskdev/dask
Docker image 到 运行 你的工人。此图像包含 Python 和对 运行 Dask 分布式的最小依赖性。
如果您的代码需要外部依赖项,您必须确保它已安装在映像中。通过设置 EXTRA_APT_PACKAGES
、EXTRA_CONDA_PACKAGES
或 EXTRA_PIP_PACKAGES
环境变量,Dask docker 映像支持在 运行 时安装额外的包。
# 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')
这样做的缺点是每次启动 worker 时都必须安装软件包,这会使 adaptive scaling 变慢。因此,您也可以创建自己的 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
我用 dask 和 delayed 编写了一个程序,现在我想 运行 在云端的多台机器上运行它。但是有一件事我不明白——dask 运行 云中多台机器上的代码没有代码的所有依赖项是如何实现的?
当 运行在多台机器上运行时,Dask 工作人员必须能够访问所有必需的依赖项才能 运行 您的代码。
您用 dask-kubernetes
标记了您的问题,所以我将以此为例。默认情况下 dask-kubernetes
使用 daskdev/dask
Docker image 到 运行 你的工人。此图像包含 Python 和对 运行 Dask 分布式的最小依赖性。
如果您的代码需要外部依赖项,您必须确保它已安装在映像中。通过设置 EXTRA_APT_PACKAGES
、EXTRA_CONDA_PACKAGES
或 EXTRA_PIP_PACKAGES
环境变量,Dask docker 映像支持在 运行 时安装额外的包。
# 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')
这样做的缺点是每次启动 worker 时都必须安装软件包,这会使 adaptive scaling 变慢。因此,您也可以创建自己的 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