본문 바로가기
IT 유용한 TIP

리눅스 클러스터링-Clustering 구축기 02 - 삽질기

by 이혁진 2018. 3. 26.

돈도 없고, 시간도 없음으로.....당연업습체로...

구축기를 남겨봅니당...



나의 구축 환경은...아래와 같슴......


1. 범용적인 리눅스 배포판  - ubuntu 17.10 - 뭐가 달라 졌는지도 볼겸...

2. python이 돌아야 한다...... 

3. H/W는 8G SSD에 1G RAM, 인텔 아톰 D2550 1.86GHz  .

4. 클러스터링은 MPICH를 통해 구현 


삽질 1. Ubuntu 17.10 

썩을...

/etc/network/interfaces  파일 수정을 통해.....

IP변경이 안된다......(모지????)

Ubuntu 17.10 를 한 4번이나 다시 깔아 봤당.....(쿨럭..;;;;;;)


나는야 포기가 빠른 사나이로........

Ubuntu 16.04.4 LTS 32bit Server 버전으로......변경

삽질 2. MPICH & mpi4py 컴파일 

리눅스 클러스터링이, 라즈베리파이 등의 오픈 H/W로 인해, 

웹에서 그 구현을 쉽게 찾아 볼수 있었다.....


뭐 이런데..... 

https://www.southampton.ac.uk/~sjc/raspberrypi/pi_supercomputer_southampton.htm

http://datamining.dongguk.ac.kr/wiki/index.php/Openmpi

(PDF 파일이라 링크 걸기가 애매한데, 구글에서 'Software Carpentry_ $100 달러 오픈 슈퍼 컴퓨터.pdf'로 검색하면 좋은 문서가 하나 나온다.) 


대부분 소스를 다운 받아서 머신에서 직접 컴파일하는 예제 들이다..... 


wget http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz

=> MPICH 소스 

wget https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-3.0.0.tar.gz

=> MPICH & Python 연동하는 소스 


그러나, 

직접 컴파일 해본 결과 

MPICH 소스 부분에서 Warring 메시지가 뜨면서 컴파일이 되는게 조금 불안불안......

컴파일결과인 실행 파일은 작동은 되는데...... 조금 불안불안...... 


어떻게 할까하다가.......

aptitude를 찾아보니......


썩을....이미 패키지화 되어 있다.....

(아......가뜩이나..안좋은 CPU 가지고 컴파일 하느냐 고생한 내 시간......;;;;; )


관련 라이브러리가 알아서 설치되고....용량도 얼마 안된다....


삽질 2-1. aptitude를 통한 mpi4py 설치 

위에 처럼..

mpich 먼저 설치하시고....

python3-mpi4py 를 설치하면....끝......날줄 았았으나......

python3-mpi4py 가 정상적으로 돌지 않는 듯 하다......


즉, "from mpi4py import MPI"처럼 라이브러리를 호출 하려고 하면.....에러...;;;


< 왜 있는데......돌질 않니...;;;; > 


구글링 결과....

파이선 pip로 별도 mpi4py 라이브러를 설치하는게 ....... 맞음....


mpich 먼저 설치하시고....

파이선 pip로 별도 mpi4py 라이브러를 설치.....

각 머신 Hostname & IP 변경 세팅 하고......



전체적은 개념은....

MASTER 머신에서.....각 Slave 머신에게 일을 시키는 구조......


잔 세팅 한두개 하고.....

마스터 - 슬레이브 간 SSH 키 설정만 해주면 끝.....


자세한 방법은 생략......하려다....

내가 까먹을 것 같아서.....(쿨럭 ;;;;;)

다음 POST에....... 

삽질 3. TEST용 프로그램 제작 

병렬/분산처리가 되도록 프로그램은 새로 짜야 된다. 

아래와 같은 일반 프로그램....을 돌리면.....(파이썬 코드임당...)


import time


print (time.ctime())

a = 0 


for i in range(1,1000000000):

a = a + i


print (a)

print (time.ctime())


time.ctime()


병렬로.........수행 된다......

(분산처리가 그냥 안되네......그냥 4번 수행 된다....) 



(생각해보니.......그냥 분산처리가 될줄 알았던 내가 바보임....;;;;;)


분산처리를 위해서......

C언어는 mpi.h  / python은 from mpi4py import MPI 를 참조하여 

분산처리를 위한 프로그램을 짜야 한다능......


mpich-3.1.tar.gz 파일에...예제가 있는데...


뭐......


    MPI_Init(&argc,&argv);

    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

    MPI_Comm_rank(MPI_COMM_WORLD,&myid);

    MPI_Get_processor_name(processor_name,&namelen);


MPI_ 으로 시작하는 라이브러를 공부해서....짜야 한다능........(털썩....;;;;) 


C는 개발해본지가 수십년 전이라......

python이라도 분산처리 할수 있는 예제에 대해서 조금 보고....

나중에 포스팅 하겠습니다.........;;;;



이상입니다.