mpi
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
mpi [2018/03/16 04:12] – [Windows] rex8312 | mpi [2024/03/23 02:38] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
====== MPI ====== | ====== MPI ====== | ||
- | ===== Windows | + | ===== Docker에서 MPI 실행 ===== |
+ | |||
+ | * https:// | ||
+ | |||
+ | ===== MS-MPI | ||
* https:// | * https:// | ||
+ | |||
+ | * worker | ||
+ | < | ||
+ | activate <env> | ||
+ | smpd -d | ||
+ | </ | ||
+ | |||
+ | * master | ||
+ | < | ||
+ | mpiexec -host <ip> -dir <working dir> -n <n processes> | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | mpiexec -machinefile hosts.txt -dir <working dir> -n <n processes> | ||
+ | </ | ||
+ | |||
+ | * hosts.txt | ||
+ | < | ||
+ | 127.0.0.1 1 | ||
+ | 192.168.0.1 2 | ||
+ | </ | ||
+ | |||
+ | ====== mpi4py ====== | ||
+ | |||
+ | mpi4py는 C MPI 라이브러리를 python에서 사용할 수 있도록 모듈로 만든 라이브러리 중의 하나입니다. 여기서는 라이브러리를 윈도우즈, | ||
+ | |||
+ | ===== 설치 ===== | ||
+ | |||
+ | ==== Window에서 설치 방법 ==== | ||
+ | |||
+ | 윈도우즈에서 mpi4py를 설치하게 위해서는 Visual Studio와 MPI라이브러리가 설치되어 있어야 합니다. 윈도우즈에서 사용가능한 MPI 라이브러리는 OpenMPI와 MPICH2가 있고, 마이크로 소프트에서 제공하는 MPICH2인 Microsoft HPC SDK 2008이 있습니다. 몇 가지 경우를 테스트해본 결과 Visual Studio 2008과 [[http:// | ||
+ | 물론 python 모듈이므로 python 2.6은 필수적으로 설치되어 있어야 합니다. | ||
+ | |||
+ | - Visual Studio 2008 설치 | ||
+ | - HPC SDK 2008 설치 | ||
+ | - [[http:// | ||
+ | - 압축 해제된 폴더로 이동하여 다음 명령 입력 (모듈 빌드 및 설치) | ||
+ | - < | ||
+ | - 여기서 msmpi는 HPC SDK 2008을 사용한 다는 뜻이며, 다른 라이브러리를 사용할 때는 다른 지시어를 사용합니다. | ||
+ | - mpi.cfg는 ini파일 형식으로 구성되어 있으며, 이곳의 [msmpi] 부분에 빌드를 위한 설정이 있습니다. | ||
+ | - :!:만약 HPC SDK 2008을 기본 설치 폴더가 아닌 다른 곳에 설치 했다면 여기서 수정해주어야 합니다. | ||
+ | - 마지막에 error 메시지 없이 종료 된다면 설치 완료! | ||
+ | |||
+ | |||
+ | ==== mpich2를 사용할 때는 ==== | ||
+ | |||
+ | - visual studio 2008 설치 | ||
+ | - 2010이 설치되어 있다고 해도 필요하다! | ||
+ | - mpich2 다운로드 및 설치 | ||
+ | - http:// | ||
+ | - mpi4py 설치 | ||
+ | - mpi.cfg 파일 수정한다. | ||
+ | - setup.py build --mpi=mpich2-win install | ||
+ | - 사용자 등록 | ||
+ | - mpiexec -register | ||
+ | |||
+ | python을 32비트 버전으로 설치해서인지, | ||
+ | |||
+ | |||
+ | === 실행 === | ||
+ | |||
+ | hosts 파일 설정, " | ||
+ | |||
+ | cilab00:6 | ||
+ | cilab01:2 | ||
+ | cilab02:2 | ||
+ | cilab03:2 | ||
+ | | ||
+ | 실행 명령 및 결과 | ||
+ | |||
+ | mpiexec -machinefile e:\hosts -n 20 python.exe c: | ||
+ | mpiexec -hosts 2 192.168.123.100 | ||
+ | E: | ||
+ | | ||
+ | M: | ||
+ | Hello, World! I am process 19 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 0 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 16 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 8 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 18 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 11 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 1 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 10 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 2 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 17 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 9 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 3 of 20 on rex8312-PC. | ||
+ | Hello, World! I am process 4 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 13 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 15 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 6 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 12 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 5 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 14 of 20 on rex8312-test. | ||
+ | Hello, World! I am process 7 of 20 on rex8312-test. | ||
+ | | ||
+ | === 설정이 제대로 되었는지 확일 하려면 === | ||
+ | |||
+ | smpd -status | ||
+ | mpiexec -validate | ||
+ | | ||
+ | === passphrase 인증을 요구할 때 === | ||
+ | |||
+ | 다시 mpich2를 설치하거나, | ||
+ | |||
+ | smpd -install | ||
+ | smpd -install -phrase MYMPICH2PASSPHRASE | ||
+ | | ||
+ | === 사용자 등록 하는 방법 === | ||
+ | |||
+ | mpiexec -remove | ||
+ | mpiexec -register | ||
+ | |||
+ | ==== Linux (Ubuntu 8.x 이상) 에서 설치 방법 ===== | ||
+ | |||
+ | 우분투에서는 다음 명령을 차례대로 입력하면 간단히 설치 가능합니다. | ||
+ | | ||
+ | >sudo su | ||
+ | #apt-get install openmpi-bin // openmpi 설치 | ||
+ | #apt-get install python2.6-dev | ||
+ | # | ||
+ | |||
+ | |||
+ | 또는 | ||
+ | |||
+ | #apt-get install mpich-bin libmpich1.0gf libmpich1.0-dev | ||
+ | #pip install mpi4py | ||
+ | ==== 예제 실행 ==== | ||
+ | |||
+ | mpi로 작성된 프로그램을 실행하기 위해서는 OpenMPI에서는 mpirun을, MPICH2에서는 mpiexec를 사용합니다. | ||
+ | 사용한 예제는 mpiexec를 기준으로 할 것입니다. mpi4py가 모듈이 설치된 폴더에 demo라는 폴더에 예제 프로그램이 있으니 그것을 실행 시켜 보죠. 모듈의 소스가 있는 폴더에도 같은 내용으 demo 폴더가 있습니다. | ||
+ | |||
+ | mpiexec -np 4 python demo/ | ||
+ | | ||
+ | 위 명령은 demo폴더의 helloworld.py를 실행하는 명령입니다. 파일이나 경로를 찾지 못하면 | ||
+ | 성공적으로 실행되면 다음과 같은 결과를 얻을 수 있습니다. | ||
+ | |||
+ | {{mpi4py-capture-20110518180048-430-0.gif|}} | ||
+ | |||
+ | 총 4개의 프로세스를 실행하여 각각의 프로세스가 Hello, World!를 출력했습니다. | ||
+ | |||
+ | 몇 가지 예제가 더 있으며, demo 폴더의 compute-pi는 $\pi$값을 구하는 3가지 예제가 있습니다. | ||
+ | |||
+ | |||
+ | ====== Ubuntu에 MPI 설치하기 ====== | ||
+ | |||
+ | 4개의 노드(ub0, ub1, ub2, ub3)를 사용 | ||
+ | |||
+ | ===== /etc/hosts 에 노드를 정의 ===== | ||
+ | |||
+ | 127.0.0.1 | ||
+ | 192.168.0.200 | ||
+ | 192.168.0.201 | ||
+ | 192.168.0.202 | ||
+ | 192.168.0.203 | ||
+ | 192.168.0.204 | ||
+ | 192.168.0.205 | ||
+ | 192.168.0.206 | ||
+ | 192.168.0.207 | ||
+ | 192.168.0.208 | ||
+ | 192.168.0.209 | ||
+ | |||
+ | |||
+ | 아래와 같이 절대로 하지 말 것 | ||
+ | |||
+ | 127.0.0.1 | ||
+ | 127.0.1.1 | ||
+ | 192.168.133.100 cilab00 | ||
+ | 192.168.133.101 cilab01 | ||
+ | 192.168.133.102 cilab02 | ||
+ | 192.168.133.103 cilab03 | ||
+ | |||
+ | 또는, | ||
+ | |||
+ | 127.0.0.1 | ||
+ | 127.0.1.1 | ||
+ | 192.168.133.101 cilab01 | ||
+ | 192.168.133.102 cilab02 | ||
+ | 192.168.133.103 cilab03 | ||
+ | |||
+ | ===== NFS 서버 설치(마스터) ===== | ||
+ | |||
+ | $ sudo apt-get install nfs-kernel-server | ||
+ | $ sudo / | ||
+ | ===== 마스터 노드 공유 ===== | ||
+ | |||
+ | 모든 노드에 mirror 디렉토리 생성, user는 사용자 이름 | ||
+ | |||
+ | $ sudo mkdir -p / | ||
+ | | ||
+ | 마스터에 있는 home 디렉토리를 모든 노드가 공유하도록 한다. | ||
+ | |||
+ | $ sudo echo / | ||
+ | $ ln -s / | ||
+ | | ||
+ | | ||
+ | ===== 마스터의 /home을 모든 노드에 마운트 한다. ===== | ||
+ | |||
+ | 수작업으로 마운드 할때는 | ||
+ | |||
+ | sudo apt-get install nfs-common | ||
+ | |||
+ | omid@ub1: | ||
+ | omid@ub2: | ||
+ | omid@ub3: | ||
+ | |||
+ | 부팅할 때마다 자동으로 마운트하도록 모든 노드의 / | ||
+ | 사용자의 uid:gid가 같아야 쓰기/ | ||
+ | |||
+ | # cilab00:/ | ||
+ | cilab00:/ | ||
+ | | ||
+ | |||
+ | | ||
+ | ===== ssh-server 설치 (서버)===== | ||
+ | |||
+ | 서버에 ssh 서버 설치 | ||
+ | |||
+ | $ sudo apt-get install openssh-server | ||
+ | | ||
+ | ===== SSH 사용자 설정 (서버) ===== | ||
+ | |||
+ | 암호입력 없이 ssh 로그인 가능하도록 설정 | ||
+ | |||
+ | $ su - user #user 로 로그인 | ||
+ | | ||
+ | $ ssh-keygen -t dsa | ||
+ | | ||
+ | $ cd .ssh | ||
+ | | ||
+ | user@cilab00: | ||
+ | | ||
+ | # $ ssh-copy-id -i $HOME/ | ||
+ | | ||
+ | 로그인 확인, 암호없이 로그인이 가능해야 함 | ||
+ | |||
+ | $ ssh user@cilab00 | ||
+ | ===== GCC 설치 ===== | ||
+ | |||
+ | mpiu@ub0:~$ sudo apt-get install build-essential | ||
+ | | ||
+ | ===== 다른 컴파일러 설치 ===== | ||
+ | |||
+ | MPICH를 설치하기 전에 미리 설치 | ||
+ | |||
+ | |||
+ | sudo apt-get install gfortran | ||
+ | ===== MPICH2 설치 ===== | ||
+ | |||
+ | sudo apt-get install mpich2 | ||
+ | | ||
+ | |||
+ | ===== 테스트 ===== | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | int main(int argc, char** argv) | ||
+ | { | ||
+ | int myrank, nprocs; | ||
+ | |||
+ | MPI_Init(& | ||
+ | MPI_Comm_size(MPI_COMM_WORLD, | ||
+ | MPI_Comm_rank(MPI_COMM_WORLD, | ||
+ | |||
+ | printf(" | ||
+ | |||
+ | MPI_Finalize(); | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | mpicc test.c -o test | ||
+ | mpiexec -n 10 ./test | ||
+ | | ||
+ | 만약 -lcr을 못찾을 때는 | ||
+ | |||
+ | sudo apt-get install libcr-dev | ||
+ | |||
+ | mpiu@ub0:~$ mpiexec -n 4 cpi | ||
+ | | ||
+ | flops 코드 링크 | ||
+ | * http:// | ||
+ | | ||
+ | 포트란 컴파일 | ||
+ | |||
+ | mpif90 flops.f -o flops | ||
+ | | ||
+ | | ||
+ | 실행 | ||
+ | |||
+ | mpirun -hosts rex831200, | ||
+ | | ||
+ | mpiexec -f ./hosts -n 10 ./flops | ||
+ | | ||
+ | | ||
+ | hosts 파일 설정, " | ||
+ | |||
+ | cilab00:6 | ||
+ | cilab01:2 | ||
+ | cilab02:2 | ||
+ | cilab03:2 | ||
+ | | ||
+ | ===== 모니터링 도구 ====== | ||
+ | |||
+ | ==== htop ==== | ||
+ | |||
+ | sudo apt-get install htop | ||
+ | | ||
+ | 어짜피 몇대 안되니까 htop 여러개 실행해놓고 실행 확인하자.. | ||
+ | |||
+ | ====== Cluster에 mpi4py 설치 ====== | ||
+ | |||
+ | numpy, scipy 설치하기 | ||
+ | |||
+ | sudo apt-get install python-numpy python-scipy | ||
+ | | ||
+ | python mpi4py 설치 | ||
+ | sudo apt-get install python-mpi4py | ||
+ | |||
+ | 또는, | ||
+ | |||
+ | apt-get install python-pip python-dev | ||
+ | | ||
+ | nfs로 마운트된 home에 로그쓰기를 못해서 에러가 발생할 수 있으므로 .. | ||
+ | |||
+ | sudo su | ||
+ | pip install mpi4py | ||
+ | |||
+ | ===== Link ===== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | ===== Hydra Process Manager ===== | ||
+ | |||
+ | * https:// |
mpi.1521173554.txt.gz · 마지막으로 수정됨: (바깥 편집)