2016-10-11 4 views
1

다른 프로세스가 통신 할 필요가없는 slurm에서 일부 병렬 코드를 실행하려고합니다. Naively 나는 파이썬의 slurm 패키지를 사용했습니다. 그러나, 그것은 단지 하나의 노드에서 CPU를 사용하는 것으로 보인다.slurm에서 python의 다중 처리 사용

예를 들어, 5 개의 CPU가있는 노드가 4 개인 경우, 동시에 5 개의 프로세스 만 실행합니다. 다중 노드가 다른 노드에서 실행되도록 어떻게 알 수 있습니까?

파이썬 코드는 문제가 this one 다음과 비슷합니다

import multiprocessing 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

처럼 보이지만 거기에 상세하게 해결되지 않았습니다.

답변

1

현재 코드는 5 개의 프로세서에서 시작하는 단일 노드에서 10 번 실행됩니다. SLURM과는 아무런 관련이 없습니다.

SLURM에 대한 스크립트는 SBATCH입니다.

이 같은 스크립트를 수정 SLURM 5 개 코어에이 스크립트를 실행하려면 : SLURM이고 노드 중 하나에

sbatch my_python_script.py 

와 스크립트를

#!/usr/bin/python3 

#SBATCH --output=wherever_you_want_to_store_the_output.log 
#SBATCH --partition=whatever_the_name_of_your_SLURM_partition_is 
#SBATCH -n 5 # 5 cores 

import sys 
import os 
import multiprocessing 

# Necessary to add cwd to path when script run 
# by SLURM (since it executes a copy) 
sys.path.append(os.getcwd()) 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

을 그리고 실행 설치된

그러나 이것은 단일 노드에도 작업을 할당하므로 속도는 단일 노드에서 실행하는 것과 매우 비슷합니다.

단지 5 개의 프로세스가있을 때 왜 다른 노드에서 실행하려고하는지 알지 못합니다. 하나의 노드에서 실행하는 것이 더 빠를 것입니다. 파이썬 스크립트 시작 부분에 5 개 이상의 코어를 할당하면 SLURM이 더 많은 노드를 할당합니다.

+0

답변 해 주셔서 감사합니다. 사실 저는 약 40 개의 프로세스를 병렬로 실행하려고합니다. 그래서 다른 노드를 사용해야합니다. 오늘 저녁에 코드를 시험해 보겠습니다. – physicsGuy

+0

나는 당신의 접근 방식을 시도했습니다. 그러나 파이썬은 위의 코드가있는 단일 노드 만 사용하고 다른 모든 노드는 사용하지 않습니다. 이 문제를 해결하는 쉬운 방법이 있습니까? – physicsGuy