使用mpirun指定哪些进程实现RQ worker。

问题描述 投票:0回答:1

我使用的是 RQ 来实现集群上的作业队列,其中的作业是用Python来管理和运行的。RQ工作者是通过 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工,确保了在第2-N个工序上的 master_program 有独占鳌头?

一个次要的问题:为什么RQ工与主程序共享进程时,速度会慢很多?在等待RQ worker的结果时,主程序并没有做任何其他事情。

mpi python-rq py-redis
1个回答
1
投票

回答你的主要问题,你可以使用MPI启动器来启动多个可执行文件作为同一作业的一部分。确切的语法将取决于你的作业调度器和MPI软件。

从OpenMPI mpirun手册中可以看出 https:/www.open-mpi.orgdocv4.0man1mpirun.1.php - 用冒号来分隔各种可执行文件。

多指令多数据(MIMD)模型。

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}
© www.soinside.com 2019 - 2024. All rights reserved.