다음 이전 차례

3. Beowulf Cluster - GALAXY

위에서는 Beowulf cluster에 대한 일반적인 특징과 구성방식에 대해서 설명을 하였다. 여기서는 필자가 직접 구성해본 Beowulf cluster의 구성방법과 특징에 대해서 간단히 소개를 하겠다. 대부 분의 software적인 셋팅관련은 LINUX HOW-TO 문서에 잘 나와 있으므로 참조하기 바란다.

97년 봄 필자의 연구실에서는 SUN Sparc 20와 HP C180 시스템을 사용하고 있었지만, 실원들 의 수치계산량을 수용하기에는 역부족이어서 그 당시 새로운 시스템을 찾는 중 앞서 말한 바와 같이 펜티엄 프로에 리눅스를 설치하여 사용하는 것이 가격대 성능비가 최적이라는 판단 아래에 펜티엄 프로(200MHz)를 구입하여 리눅스를 설치하고, 전공관련 코드 패키지를 설치하여 적극 활 용하기 시작한 것이 리눅스를 처음으로 테크니컬 컴퓨팅에 이용한 것이었다. 물론 그 전에야 남 들 다 하는 것처럼 리눅스로 부팅했다가 NT로 부팅했다가 하면서 이것 저것 장난 쳐보는 단계였 지, 직접 연구에 활용하기는 처음이었다. 그 이후 97년 겨울 듀얼 펜티엄II 300MHz로 업그레이 드하였으며, 병렬처리를 염두에 두고 98년 봄 싱글 펜티엄II 300MHz를 두대를 더 구입하여 1GB SCSI하드에 OS만 설치하고 NFS를 이용해서 사용자 디렉토리를 시스템간 서로 공유하여 사용 하였다. 이때 전공분야중 Monte Carlo시물레이션을 하는 코드가 PVM library를 이용한 병렬처리 를 지원하였기 때문에, g77과 PVM library를 이용하여 컴파일하여 사용하게 되었다. Monte Carlo 시물레이션 특성상 프로그램 시작과 끝에만 각 node들간의 데이타 전송이 필요하기 때문 에, shared 10Mbps환경에서도 무난하게 프로세스 갯수만큼, 4배정도의 속도증가를 가져왔으며 상 당히 만족하게 사용하였다. 그러나 shared 10Mbps환경에서 4개의 프로세서를 사용하여 number crunching 작업을 하기에는 너무 열악한 환경이어서 생각지도 못하였으나, 7월에 KAIST Backbone network이 기존의 FDDI에서 ATM으로 이전하면서 enduser에게 dedicated 10MBPS를 제공함에 따라, 연구실내에서 Baynetwork에서 나온 24포트 10/100M Switch인 BayStack 350T-HD를 구입하게 되었다.

기존의 시스템으로 새롭게 workstation cluster가 아닌, Beowulf-class의 시스템으로 구축하기 위 해, 일단 master node에만 하드 디스크를 장착하고 slave node는 diskless로 하여 기존에 있던 OS용 1GB SCSI하드를 제거하고 slave node는 M/B, 1 CPU, 10/100M NIC, 64MB RAM, ISA VGA, keyboard로만 구성 하였다. 실제 VGA는 필요없었지만, 시스템 부팅을 하기위해, 어쩔수 없이 굴러다니는 ISA 비디오 카드를 꽂게 되었고 mini beowulf 시스템이라 키보드 공유기를 구 입하여 master node에서 전체를 관리하는 것은 일단 생각지 않았다. 이와 반면에 master node에 서는 M/B, 2 CPU, 2 10/100M NIC, 512MB RAM, 22GB SCSI HDD, PCI VGA로 구성하였다. 일단 BayStack 350T-HD의 VLAN 기능을 이용하여 24포트중 Beowulf cluster가 사용하는 3포 트를 VLAN2 로 하고, 나머지 포트는 VLAN1에 속하도록 설정하였고, Master node에는 2개의 NIC를 설치하였는데 eth0는 VLAN1 에 연결하여 외부 네트웍에서 접근가능하게 하고 eth1은 VLAN2에 연결하여 node들간에 private network를 구성하였다.

사용한 리눅스 배포판은 RedHat 5.1로서, RedHat사에서 NASA의 CESDIS와 함께 Extreme Linux라는 RedHat 5.0에 기초하여 인텔 X86을 위한 Beowulf cluster용 배포판을 판매하고 있 으며 현재 anonymous ftp server로 부터 다운로드 받을수 있다. 필자가 설치할 시기에는 anonymous ftp server로부터 다운로드 받을 수 있는 상황이지만, 그 당시에는 Extreme Linux를 구할수 없었고, 5.0에 기준하고 있어 별다른 메리트가 없어 보여 RedHat 5.1을 설치하고 관련 소 프트웨어를 직접 설치하였다. 그러나, Intel X86환경에서 NIC를 각 노드에 2장씩 사용하여 channel bonding하여 node간의 network 대역폭을 2배로 증가시키거나 소프트웨어 설치의 수고를 덜기 원한다면, Extreme Linux를 사용하는 것이 바람직할 것 같다.

Master node는 diskless slave node를 위해 NFS-ROOT server가 되게 하였고, NIS서버는 설치 하지 않고 각 node들을 위한 /tftpboot 디렉토리의 passwd, group 파일을 master node의 파일과 하드링크 시켜놓았다. slave들이 bootp를 통해 ip address를 설정할수 있게 하였으며, DNS 서 버를 설치하여 private network내에서 node들간의 네트웍 환경에 문제가 없게 하였다. 설치한 공학 관련 소프트웨어는 앞부분에서 말한 ASCI Red 수퍼컴퓨터에서 사용중인 펜티엄 프 로전용 BLAS, FFT math library를 설치하였고, message passing library로, MPICH, LAM MPI, PVM을 설치하여 각 노드간 message passing을 통해 병렬처리를 가능하게 하였으며, 기타 병렬 처리용 math library를 설치하였다. Beowulf cluster 사용자들은 master node로만 네트웍으로 접 근 가능하기 때문에, master node에 job이 집중될 것을 우려하여 비록 소규모 시스템이지만, DQS를 사용하여 사용자들의 batch job을 관리하게 하여 사용자들의 job이 프로세스마다 균등하 게 배분할수 있게 하였고, 최종적으로 이렇게 설치된 Beowulf System에 대해서 NAS Parallel Benchmarks (NPB)을 이용하여 테스트 해보았으며 필자의 전공관련 문제를 PETSc라는 툴킷을 이용해서 프로그래밍하여 테스트 해보았다. 테스트해보면서 몇가지 문제점이 나타났는데, 일단 CPU가 4개인 반면에 NIC는 3개여서 데이타 병목현상이 발견되었으며 약간의 성능 저하가 나타 남을 발견하였다. 정확한 parallel benchmark 결과를 싣지는 않지만, 거의 85% 이상 parallel efficiency를 보여주었으며, NIC를 하나더 추가하고 channel bonding을 한다면 더욱 더 효과적인 시스템이 될것이라 생각된다.


다음 이전 차례