본문 바로가기
Backend MLOps/On-premise setting

[MPI] 파이썬으로 멀티노드 분산컴퓨팅 처리

by SteadyForDeep 2023. 9. 12.
반응형

파이썬으로 분산 컴퓨팅을 해 보자.

 

사실은 쿠버네티스를 썩히고 있어서 내심 좀 그런데

바로 잘 짜여진 컨테이너들의 예제만 다루면 깊은 이해가 없을 것 같아서

일단은 바닐라부터 해보자.

 

1. 싱글노드에서 싱글프로세싱

 

기본적인걸 우선 확인하자.

파이썬은 잘 깔려 있고

pip 가 안깔려있다.

설치해준다.

mpi4py 도 설치해 준다.

이때 mpi에 관한 라이브러리가 깔려있지 않다면 동작하지 않으므로

mpi를 반드시 설치해 주어야 한다.

설치 방법은 아래의 글에 설명되어 있다.

2023.09.03 - [Backend MLOps/On-premise setting] - [MPI] 멀티노드로 병렬연산, 분산컴퓨팅 처리하기

 

[MPI] 멀티노드로 병렬연산, 분산컴퓨팅 처리하기

멀티노드로 병렬연산 처리를 해보자. 우선은 MPI를 위한 라이브러리들을 설치해야한다. MPI는 Message Passing Interface의 약자인데 프로세스와 프로세스간에 데이터 전송의 프로토콜을 말한다. 가장

davi06000.tistory.com

 

설치에 생각보다 시간이 더 걸린다.

 

vim 으로 간단한 스크립트를 작성해 준다.

가장 기본적으로 랭크를 얻어 출력하는 스크립트를 작성해 보았다.

mpirun으로 동작시키면 정상 작동 된다.

 

 

 

 

 

 

2. 싱글 노드에서 멀티 프로세싱

멀티 프로세싱을 생성하는 것은 간단하다.

-np 이후에 몇개의 프로세싱을 돌릴지 적어주기만 하면 끝난다.

로컬호스트의 프로세서 수를 제한하고 싶다면 위와 같이 콜론 뒤에 숫자로 적어줄 수 있다.

 

 

 

 

 

 

3. 멀티노드에서 멀티프로세싱

 

우선 다른 노드에도 pip와 mpi4py를 설치해 줘야 하기 때문에 명령어를 쭉 뿌릴건데

이때 nfs도 함께 맞춰주도록 하자.

 

먼저 nfs서버에 가서 디렉토리를 만들어 준다.

나는 이전 글을 통해 만들어져 있는 디렉토리에서 작업할 것이다.

commands="
    if [[ \$(pwd) == \$(echo \$HOME) ]];
    then
            echo \"True\";
            mkdir -p ./multi-node-MPI/;
    else
            echo \"False\";
    fi;

    sudo mount 192.168.0.10:/home/manager/nfs/shared/mpi/ ./multi-node-MPI/;
    sudo apt install python3-pip;
    pip install mpi4py;
"




eval $commands
ssh pi@192.168.0.12 -t $commands
ssh pi@192.168.0.13 -t $commands
ssh pi@192.168.0.14 -t $commands

저렇게 상위 폴더만 마운트 후 들어가서 작업을 하자.

-y 같은 옵션으로 y를 입력하는 것을 건너뛰면 더 편하다.

 

이전 발행 글에서 만들어두었던 c 언어 헬로월드가 보인다.

여기서 py 라는 디렉토리를 만들어서 아까의 튜토리얼을 저장하자.

 

요렇게 하면 준비가 다 됐다.

위와 같이 참여할 호스트를 적은 호스트 파일을 만들어 주고

이름은 hostfile.txt 같이 아무거나 해준다.

이렇게 실행되는 것을 볼 수 있다.

이게 진짜 여러 노드에서 돌아간건지 확인하기 위해

호스트 이름을 출력해 보자.

호스트 네임이 출력되는 구문을 추가했다.

여러 노드에서 동시다발적으로 프로세스가 생성, 진행되는 것을 알 수 있다.

그라파나에서도 모든 노드의 모든 프로세서에서 사용이 감지된 것을 볼 수 있다.

반응형

댓글