많은 작업을 독립적으로 수행 할 수있는 하나의 컴퓨터에서 실행되는 파이썬 코드가 있습니다. SGE 그리드에서 더 평행하게 만들 수 있는지 궁금합니다. 예를 들어 그리드의 각 노드는 이러한 독립적 인 작업에 대해 여러 스레드를 실행합니다.다중 처리와 같은 Python 병렬 모듈을 사용하는 방법 Sun SGE 그리드의 풀
은 원래 내가 가진 :
# function def
# some_function(param1, param2, param3, process_index)
func = functools.partial(some_function, file_list, param1, param2, param3)
pool = multiprocessing.Pool(processes=some_integer)
ret_list = pool.map(func, range(processes))
pool.close()
그것은 로컬 컴퓨터에서 잘 작동하는 것 같지만입니다 같은 SGE 그리드에 제출하면, 그것은 참으로 오류 메시지를 뱉어하지 않고 비정상적으로 종료합니다. 제출 명령은 다음과 같이 보일 수 있습니다 :
qsub -V -b yes -cwd -l h_vmem=10G -N jobname -o grid_job.log -j yes "python worker.py"
를 이상적으로, 나는 파이썬 코드의 로컬 버전에 대한 최소한의 변경을 찾고 있어요는 SGE 그리드에서 실행할 수 있도록, 그것은 새로운 도구를 설치하기 어렵다 때문에 그리드를 변경하거나 다른 사용자에게 영향을주지 않고 그리드 구성을 변경하십시오.
최소한 하나의 qsub 명령으로 각 작업 (file_list
의 파일) 처리가 처리되도록 코드를 다시 작성할 수 있음을 이해합니다. 하지만 모범 사례가 무엇인지 궁금하네요.
도움 주신 의견을 보내 주셔서 감사합니다. 네, SGE 직무를 단순하게 유지하는 것이 더 낫다는 것에 동의합니다. 더 많은 병렬 처리가 필요하다면 파일 목록을 더 많은 덩어리로 나누고 더 많은 그리드 노드에 제출할 수 있습니다. 이 방법은 SGE 스케줄러에 더 친숙하다고 생각합니다. – galactica
스케줄러에 더 친숙한 지 모르겠지만, SGE 클러스터의 다른 사용자에게는 더 친숙하지 않습니다. 리소스를 공유하는 작업이 줄어들 기 때문입니다. 또한 여러 SLOTS에게 요청하는 작업이 동일한 노드에서 작업해야하기 때문에 클러스터가 거의 가득 차면 다중 스레드 작업을 제출하는 것보다 몇 가지 간단한 작업을 제출하여 여러 번 슬롯을 여러 번 얻을 수있는 기회가 더 많습니다 (MPI는 또 다른 이야기입니다 ...) . 데이터가 병렬 처리가 가능하기 때문에 문제가 쉽게 병렬화 될 수 있습니다. –