python—当工人数量很大时,如何加快工人的启动速度?

7uhlpewt  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(351)

目前,我使用dask_jobsquee来并行化我的代码,当工作人员数量很大时,我很难快速建立集群。
当我扩大工作人员的数量(比如说超过2000人)时,集群需要15分钟才能准备就绪。考虑到我在这里需要这么多工人,我理解这需要一些时间,但我想知道是否有办法加快速度。
(我还试图释放gil,以便使用线程,但尚未成功。在这里,我想知道是否有一种方法可以在不使用线程的情况下加快安装速度)
我的群集设置看起来像

from dask_jobqueue import SLURMCluster

cluster = SLURMCluster(cores = 256,
                       memory = '252 GB',
                       interface='ib0',
                       processes = 128,
                       death_timeout = '2000', #originally 60 sec. this is too short and workers would die.
                       walltime = '01:00:00', 
                       job_extra = ['--partition=<****>'],                       
                       local_directory = '/tmp', #use compute nodes' local
                       log_directory = '<****>',
                       scheduler_options={"dashboard_address": ":8786"},
                       env_extra = ['module purge',
                                    'module load Compilers/GCC/8.2.0 MPI/EPYC/OpenMPI/4.0.2/GCC/8.2.0 Python/3.7.6 Anaconda/3.7',
                                    'export MKL_NUM_THREADS=1',
                                  ]) 

cluster.job_cls.submit_command = 'ssh <login node> sbatch' # I'm not allowed to throw a job from a compute node

,它生成一个脚本,如


# !/usr/bin/env bash

# SBATCH -J dask-worker

# SBATCH -e <local_log>/dask-worker-%J.err

# SBATCH -o <local_log>/dask-worker-%J.out

# SBATCH -n 1

# SBATCH --cpus-per-task=256

# SBATCH --mem=235G

# SBATCH -t 01:00:00

# SBATCH --partition=<***>

module purge
module load Compilers/GCC/8.2.0 MPI/EPYC/OpenMPI/4.0.2/GCC/8.2.0 Python/3.7.6 Anaconda/3.7
export MKL_NUM_THREADS=1
echo $PATH

<python> -m distributed.cli.dask_worker tcp://***.**.***.**:<port> --nthreads 2 --nprocs 128 --memory-limit 1.83GiB --name dummy-name --nanny --death-timeout 2000 --local-directory /tmp --interface ib0 --protocol tcp://

然后我将集群放大到20个节点,

cluster.scale(128*20)

集群准备就绪需要15分钟以上。
工人数量为128(1个节点),大约需要一分钟。
distributed.yaml具有以下设置。

distributed:

  worker:
    multiprocessing-method: fork #speed up a bit
    use-file-locking: True #did not change the time

  admin:
    tick:
      limit: 30s       # otherwise the I get many warnings in the log files
yizd12fk

yizd12fk1#

这并不理想,但当与如此大量的工人一起工作时,可能更容易从外部请求工人(不使用 dask_jobqueue ). 这里的工作流将是一个bash脚本,用于提交开始于单个工人的作业。
工人们需要知道在哪里连接,让他们知道的一种方法是写下连接的内容 client.scheduler_info() 并告诉工作人员使用该文件获取有关调度程序连接的信息( --scheduler-file my_file.json ).

相关问题