使用 mpirun 指定哪些进程实现 RQ worker
Specifying which processes implement RQ worker using mpirun
我正在使用 RQ 在集群上实现作业队列,其中管理作业,运行 和 Python。 RQ worker 通过 mpirun
启动,然后是一个 Python 程序,该程序将作业添加到队列中。
我注意到当我只有一个进程时,所以唯一的 RQ worker 与程序在同一个进程上,会有明显的延迟。这可能是因为我在他们共享访问权限的 redis-server
上有大量数据。
在具有单个作业的测试用例中,使用 2 个进程总体上会加快速度。因此,我认为最好为程序(主程序)设置一个进程,它只是将工作放在工人的队列中。
目前我有
mpirun -np $NUM_WORKERS -machinefile $confile rq worker $WORKER_ID -u $REDIS_URL
python3 master_program.py
我的主要问题是:如何修改 mpirun
命令以在第 2-N 个进程上启动 RQ worker,确保 master_program
仅使用第一个进程?
第二个问题:为什么RQ worker和master程序共享进程会慢很多?在等待 RQ worker 的结果时,master 没有做任何其他事情。
要回答您的主要问题,您可以使用 MPI 启动器启动多个可执行文件作为同一作业的一部分。确切的语法将取决于您的作业调度程序和 MPI 软件。
来自 OpenMPI mpirun 联机帮助页https://www.open-mpi.org/doc/v4.0/man1/mpirun.1.php - 使用冒号分隔各种可执行文件:
Multiple Instruction Multiple Data (MIMD) Model:
mpirun [ global_options ] [ local_options1 ]
<program1> [ <args1> ] : [ local_options2 ]
<program2> [ <args2> ] : ... :
[ local_optionsN ]
<programN> [ <argsN> ]
Torque 和 OpenMPI 的示例作业脚本可能如下所示
#!/bin/bash
#PBS -l nodes=2:ppn=16,walltime=00:10:00
module load openmpi
OMPI_DEBUGGING_OPTS="--display-map --tag-output"
# Reserve one task for the master_program
NUM_WORKERS=$(($PBS_NP - 1))
# Application specific setup
REDIS_URL=<whatever>
WORKER_ID=<whatever>
# Change to submission dir
cd ${PBS_O_WORKDIR}
# Serial and parallel job
mpirun ${OMPI_DEBUGGING_OPTS} \
-np 1 \
python3 master_program.py \
: \
-np ${NUM_WORKERS} \
rq worker ${WORKER_ID} -u ${REDIS_URL}
我正在使用 RQ 在集群上实现作业队列,其中管理作业,运行 和 Python。 RQ worker 通过 mpirun
启动,然后是一个 Python 程序,该程序将作业添加到队列中。
我注意到当我只有一个进程时,所以唯一的 RQ worker 与程序在同一个进程上,会有明显的延迟。这可能是因为我在他们共享访问权限的 redis-server
上有大量数据。
在具有单个作业的测试用例中,使用 2 个进程总体上会加快速度。因此,我认为最好为程序(主程序)设置一个进程,它只是将工作放在工人的队列中。
目前我有
mpirun -np $NUM_WORKERS -machinefile $confile rq worker $WORKER_ID -u $REDIS_URL
python3 master_program.py
我的主要问题是:如何修改 mpirun
命令以在第 2-N 个进程上启动 RQ worker,确保 master_program
仅使用第一个进程?
第二个问题:为什么RQ worker和master程序共享进程会慢很多?在等待 RQ worker 的结果时,master 没有做任何其他事情。
要回答您的主要问题,您可以使用 MPI 启动器启动多个可执行文件作为同一作业的一部分。确切的语法将取决于您的作业调度程序和 MPI 软件。
来自 OpenMPI mpirun 联机帮助页https://www.open-mpi.org/doc/v4.0/man1/mpirun.1.php - 使用冒号分隔各种可执行文件:
Multiple Instruction Multiple Data (MIMD) Model:
mpirun [ global_options ] [ local_options1 ] <program1> [ <args1> ] : [ local_options2 ] <program2> [ <args2> ] : ... : [ local_optionsN ] <programN> [ <argsN> ]
Torque 和 OpenMPI 的示例作业脚本可能如下所示
#!/bin/bash
#PBS -l nodes=2:ppn=16,walltime=00:10:00
module load openmpi
OMPI_DEBUGGING_OPTS="--display-map --tag-output"
# Reserve one task for the master_program
NUM_WORKERS=$(($PBS_NP - 1))
# Application specific setup
REDIS_URL=<whatever>
WORKER_ID=<whatever>
# Change to submission dir
cd ${PBS_O_WORKDIR}
# Serial and parallel job
mpirun ${OMPI_DEBUGGING_OPTS} \
-np 1 \
python3 master_program.py \
: \
-np ${NUM_WORKERS} \
rq worker ${WORKER_ID} -u ${REDIS_URL}