部署示例
目录
部署示例¶
在不同的集群上部署 dask-jobqueue 需要进行一些定制。下面,我们提供了一些来自实际部署的例子
欢迎提供其他集群的更多示例,请访问此处。
PBS 部署¶
from dask_jobqueue import PBSCluster
cluster = PBSCluster(queue='regular',
account='DaskOnPBS',
local_directory='$TMPDIR',
cores=24,
processes=6,
memory='16GB',
resource_spec='select=1:ncpus=24:mem=100GB')
cluster = PBSCluster(cores=24,
processes=6,
shebang='#!/usr/bin/env zsh',
memory="6GB",
account='P48500028',
queue='premium',
resource_spec='select=1:ncpus=36:mem=109G',
walltime='02:00:00',
interface='ib0')
Moab 部署¶
在使用 Moab Workload Manager 的系统上,可以使用 PBSCluster
的子类 MoabCluster
import os
from dask_jobqueue import MoabCluster
cluster = MoabCluster(
cores=6,
processes=6,
account="gfdl_m",
memory="16G",
resource_spec="pmem=96G",
job_extra_directives=["-d /home/First.Last", "-M none"],
local_directory=os.getenv("TMPDIR", "/tmp"),
)
SGE 部署¶
在使用 SGE 作为调度器的系统上,可以使用 SGECluster
。请注意,Grid Engine 有一段稍显复杂的历史,因此存在多种 Grid Engine 衍生版本。SGECluster
可用于 Grid Engine 的任何衍生版本,例如:SGE (Son of Grid Engine)、Oracle Grid Engine、Univa Grid Engine。
由于 Grid Engine 衍生版本和配置部署的多样性,无法使用 memory
关键字参数自动指定请求的 RAM 量。相反,您需要根据系统的配置方式,使用 resource_spec
关键字参数指定所需的资源,此外还需要使用 memory
关键字参数(Dask 内部用于内存管理,更多详细信息请参阅此处)。
在下面的示例中,我们的系统管理员使用了 m_mem_free
关键字参数来让我们请求 RAM。其他已知关键字可能包括 mem_req
和 mem_free
。我们需要查阅集群文档和/或咨询系统管理员以获取此信息。同时,我们还必须正确指定 memory
关键字参数,以便 Dask 的内存管理能够正常工作。
from dask_jobqueue import SGECluster
cluster = SGECluster(queue='default.q',
walltime="1500000",
processes=10, # we request 10 processes per worker
memory='20GB', # for memory requests, this must be specified
resource_spec='m_mem_free=20G', # for memory requests, this also needs to be specified
)
LSF 部署¶
from dask_jobqueue import LSFCluster
cluster = LSFCluster(queue='general',
project='cpp',
walltime='00:30',
cores=15,
memory='25GB')
SLURM 部署¶
from dask_jobqueue import SLURMCluster
cluster = SLURMCluster(cores=8,
processes=4,
memory="16GB",
account="woodshole",
walltime="01:00:00",
queue="normal")
SLURM 部署:低优先级节点使用¶
from dask_jobqueue import SLURMCluster
cluster = SLURMCluster(
cores=24,
processes=6,
memory="16GB",
account="co_laika",
queue="savio2_bigmem",
job_script_prologue=[
'export LANG="en_US.utf8"',
'export LANGUAGE="en_US.utf8"',
'export LC_ALL="en_US.utf8"',
],
job_extra_directives=['--qos="savio_lowprio"'],
)
SLURM 部署:为 dask-worker 提供额外的参数¶
关键字参数可以传递给 dask-worker。一个这样的参数是用于指定抽象资源,此处对此进行了描述。这可用于指定调度器不知道的特殊硬件可用性,例如 GPU。下面指定了任意资源“ssdGB”和“GPU”。请注意,使用 worker_extra_args
关键字将参数传递给 dask-worker。
注意:参数 worker_extra_args
在版本 0.7.4 之前被命名为 extra
。 extra
仍然可以使用,但已被视为弃用,并将在未来版本中移除。
from dask_jobqueue import SLURMCluster
from distributed import Client
from dask import delayed
cluster = SLURMCluster(
memory="8g", processes=1, cores=2, worker_extra_args=["--resources ssdGB=200,GPU=2"]
)
cluster.scale(2)
client = Client(cluster)
然后客户端可以正常使用。此外,可以在处理的某些步骤中指定所需的资源。例如
def step_1_w_single_GPU(data):
return "Step 1 done for: %s" % data
def step_2_w_local_IO(data):
return "Step 2 done for: %s" % data
stage_1 = [delayed(step_1_w_single_GPU)(i) for i in range(10)]
stage_2 = [delayed(step_2_w_local_IO)(s2) for s2 in stage_1]
result_stage_2 = client.compute(stage_2,
resources={tuple(stage_1): {'GPU': 1},
tuple(stage_2): {'ssdGB': 100}})