Один из способов добиться того, чего вы хотите, - создать скрипт верхнего уровня, mpi_train.py
, используя mpi4py .В задании MPI каждый процесс имеет уникальный ранг и все выполняют один и тот же код, поэтому при выполнении
from mpi4py import MPI
comm = MPI.COMM_WORLD
print("Hello! I'm rank " + str(comm.rank))
с
mpiexec -n 4 python mpi_train.py
будет выдано
Hello! I'm rank 0
Hello! I'm rank 1
Hello! I'm rank 3
Hello! I'm rank 2
Различные ранги могут быть использованы для чтения отдельного файла, который определяет аргументы.Таким образом, у вас будет что-то вроде
#All code in train should be in functions or __name__ == "__main__"
import train
from mpi4py import MPI
def get_command_args_from_rank(rank):
#Some code here to get args from unique rank no.
comm = MPI.COMM_WORLD
args = get_command_args_from_rank(comm.rank)
#Assuming the args can be passed to a run function
out = train.run(args)
Обратите внимание, что вы должны явно указать выходные данные для каждого процесса, например что-то вроде
with open("log.out"+str(comm.rank)) as f:
f.write(out)
, в противном случае все отпечатки отправляются на стандартный вывод и становятсяперемешивание, поскольку порядок различных процессов не гарантируется.