带 HTCondor 调度器的 Dask
Dask with HTCondor scheduler
背景
我有一个包含并行步骤的图像分析管道。管道在 python
中,并行化由 dask.distributed
控制。最小处理设置有 1 个调度程序 + 3 个工作程序,每个工作程序有 15 个进程。在分析的第一个短步骤中,我使用 1 process/worker 但节点的所有 RAM 然后在所有其他分析步骤中使用所有节点和进程。
问题
管理员将安装 HTCondor
作为集群的调度程序。
想法
为了在新设置上使用我的代码 运行 我计划使用 dask manual for SGE 中显示的方法,因为集群具有共享网络文件系统。
# job1
# Start a dask-scheduler somewhere and write connection information to file
qsub -b y /path/to/dask-scheduler --scheduler-file /path/to/scheduler.json
# Job2
# Start 100 dask-worker processes in an array job pointing to the same file
qsub -b y -t 1-100 /path/to/dask-worker --scheduler-file /path/to/scheduler.json
# Job3
# Start a process with the python code where the client is started this way
client = Client(scheduler_file='/path/to/scheduler.json')
问题与建议
如果我对这种方法的理解正确,我将启动调度程序、工作程序和分析作为独立的作业(不同的 HTCondor 提交文件)。我怎样才能确保执行顺序是正确的?有没有一种方法可以使用我之前使用的相同处理方法,或者可以更有效地转换代码以更好地与 HTCondor 一起工作?
感谢您的帮助!
HTCondor JobQueue 支持已合并 (https://github.com/dask/dask-jobqueue/pull/245),现在应该可用于 Dask JobQueue (HTCondorCluster(cores=1, memory='100MB', disk='100MB')
)
背景
我有一个包含并行步骤的图像分析管道。管道在 python
中,并行化由 dask.distributed
控制。最小处理设置有 1 个调度程序 + 3 个工作程序,每个工作程序有 15 个进程。在分析的第一个短步骤中,我使用 1 process/worker 但节点的所有 RAM 然后在所有其他分析步骤中使用所有节点和进程。
问题
管理员将安装 HTCondor
作为集群的调度程序。
想法
为了在新设置上使用我的代码 运行 我计划使用 dask manual for SGE 中显示的方法,因为集群具有共享网络文件系统。
# job1
# Start a dask-scheduler somewhere and write connection information to file
qsub -b y /path/to/dask-scheduler --scheduler-file /path/to/scheduler.json
# Job2
# Start 100 dask-worker processes in an array job pointing to the same file
qsub -b y -t 1-100 /path/to/dask-worker --scheduler-file /path/to/scheduler.json
# Job3
# Start a process with the python code where the client is started this way
client = Client(scheduler_file='/path/to/scheduler.json')
问题与建议
如果我对这种方法的理解正确,我将启动调度程序、工作程序和分析作为独立的作业(不同的 HTCondor 提交文件)。我怎样才能确保执行顺序是正确的?有没有一种方法可以使用我之前使用的相同处理方法,或者可以更有效地转换代码以更好地与 HTCondor 一起工作? 感谢您的帮助!
HTCondor JobQueue 支持已合并 (https://github.com/dask/dask-jobqueue/pull/245),现在应该可用于 Dask JobQueue (HTCondorCluster(cores=1, memory='100MB', disk='100MB')
)