컴퓨터 클러스터의 이해
2010.07.06 21:36
공학 문제의 해결 방법
일반적으로 공학 문제의 해(solution)을 구하기 위한 방법으로 아래와 같은 세 가지로 나눌 수 있다.
1. 이론 (theory)
2. 실험(experiments)
3. 수치해석 (numerical analysis)
각 공학 문제의 특성에 따라 독립적으로 작용하여 문제를 해결할 수 도 있지만
세 가지 모두를 고려했을 때 각각의 단점들을 보완할 수 있기 때문에 실제 물리적 현상의 해를 좀 더 정확히 계산할 수 있다.
특히 수치해석은 실험을 하기 위해 소요되는 비용과 시간을 줄이고,
실험의 위험 부담이 없으며, 결과값을 직관적으로 확인할 수 있는 장점이 있으므로 많은 분야에서 활용되고 있다.
수치해석 = 컴퓨터의 연산
사실 수치해석은 전산해석(computational analysis)와 공학 분야에서 같은 의미로 쓰이기는 하지만
꼭 컴퓨터를 이용해서 풀이하는 것만은 아니다.
가장 심플한 수치해석 기법으로서 Newton’s method는 0번 점으로부터 출발하여 n번 점인 해를 구할 수 있다.
사실 수학적 풀이기법을 잘 알지 못하더라도 직선을 그을 수 있는 자와 연필만으로도 문제를 해결할 수 있는 것이다.
하지만 실제의 공학 문제는 위와 같이 간단하지는 않다.
태풍의 이동경로, 차량의 충돌해석, 비행기 날개 주위의 유동장 등의 복잡한 물리 현상을 해석하기 위해서는
여러 요인들이 복잡하게 얽혀 있고, 연필과 종이만으로 이들 사이의 복잡한 수식과 방정식을 풀기에는 너무도 계산의 양이 많다.
따라서 수치해석을 위해서는 반복작업에 적합한 컴퓨터라는 도구를 이용하는 것이다.
Computational Load
일반적으로 수치해석 분야에서 복잡함의 정도는 격자의 수로 표현할 수 있다.
특정 물리 현상의 계(system)를 100개, 1000개, 10000개 등으로 쪼개어 계산한다는 의미인데,
일반적으로 더 잘게 쪼개어 계산할 수록 정밀한 해를 계산할 확률이 높다.
그러나 격자의 수가 증가함에 따라 CPU가 연산하는데 필요한 시간 역시 증가한다.
따라서 적당한 수준에서 격자의 수를 제한하여 해석하거나,
그럴 수 없는 경우라면 더 높은 성능의 컴퓨터를 이용할 수 밖에 없다.
소규모 기업에 종사하거나 수치해석 전공이 아닌 대학원생 정도라면 개인용 컴퓨터를 이용하게 되는데
100만개 정도의 격자수에 비정상상태(unsteady state) 문제를 풀이한다면 때로는 수 주가 지나도 결과를 얻을 수 없다.
다행히도 최근 출시되는 CPU의 성능은 비교적 뛰어나기 때문에 이러한 부분에서 조금은 나아졌다고 생각한다.
CPU 발전의 대세 = 멀티코어
최근에 발매되는 CPU는 거의 대부분 멀티코어이다.
멀티코어 CPU는 하나의 칩에 두 개 이상의 프로세서가 존재하여 각각의 프로세서가 다중 작업을 하게 된다.
병렬화된 명령어의 지원을 받는다면 멀티코어 CPU는 복잡한 문제를
몇 개의 구역(partition)으로 나누어서 각각의 코어가 일을 분담하게 되므로 그 만큼 해석시간에 있어서 이득이라 할 수 있다.
사실 멀티코어 CPU가 나오게 된 배경 역시 흥미로운데,
이는 다중 작업에 유리하기 때문에 개발되어진 것 보다 공정 기술의 한계에 부딪혔기 때문이 아닐까 싶다.
수 년전 CPU제조사와 반도체 업계는 무어의 법칙이 무너지지 않을 것이라는 믿음을 가지고 있었고,
무려 10Ghz의 클럭 스피드를 가지는 인텔 펜티엄 4 프로세서를 기대했으나
반도체 공정 기술은 무한히 발전하지 못했고 결국 고 클럭 CPU는 출현하지 않았다.
또한 90nm 공정으로 접어 들면서부터 CPU에서 발생하는 과도한 발열 및 소비전력의 문제가 심각히 대두되었고,
각 컴퓨터 관련 커뮤니티에서는 펜티엄 4 프레스캇을 프레스핫이라 부를 만큼 뜨거운 CPU가 탄생하기도 하였다.
무한히 고 클럭의 길을 갈 것만 같았던 CPU의 클럭 스피드는 현재 3GHz 정도에서 발걸음을 멈추었으며,
하나의 다이에 여러 프로세서를 집어넣은 멀티코어 CPU가 현재의 트렌드라고 할 수 있다.
컴퓨터 클러스터
수치해석을 위한 컴퓨터 클러스터는 멀티코어 CPU의 역할과 비슷한 점이 매우 많다.
무거운 물건을 들기 위해 여러 사람이 협력하는 것처럼,
멀티코어 CPU 역시 다중 작업에서 각각의 코어가 작업을 나누어 처리하는 것이며,
컴퓨터 클러스터에서는 LAN 상의 여러 대의 컴퓨터가 복잡한 물리 현상을 지배하는 방정식을 나누어 풀게 된다.
위의 사진은 구글링한 것으로 Michigan Technological University의 Beowulf cluster라고 한다.
가운데의 PC는 Host node이며, 나머지 PC들은 Compute node이다.
그리고 검은색 기기는 Network hub로 PC들 사이의 통신을 중계하는 역할이다.
이 구성을 좀 더 간략하게 나타내보면 다음과 같다.
Host node는 인터넷에 직접 접속하며, Compute node들은 그렇지 못하다.
Host node와 Compute node는 Network hub로 묶여 있고 각각의 컴퓨터 간의 정보를 주고 받을 수 있다.
어떻게 클러스터링 할 수 있는가?
본 글에서 말하는 컴퓨터 클러스터는 복잡한 물리 현상을 풀이하기 위해 하나로 묶어 놓은 컴퓨터의 집합체이다.
이러한 컴퓨터의 집합체를 어떻게 만들 수 있을 것인가 하는 문제의 해답에 대해 명확히 제시할 수 없지만,
순수하게
수치해석 툴을 사용하고자 하는 입장에서 위의 그림과 같이 PC4대를 이용하여
최대한 간단하게 컴퓨터 클러스터를 구성 방법에 대해서 말하고자 한다.
또한 나와 같이 linux 운영체제를 다루어 본 경험이 없는 이에게 windows 운영체제를 이용하는 것은 상당히 매력적이다.
다음 글에서는 Windows HPC Server 2008을 이용하여 4대의 PC를 클러스터링 하는 튜토리얼을 작성할 계획이다.
코멘트 12
-
cicatrix
07.06 21:41
-
crash.jack
07.06 21:55
잘봤습니다. 주소 태그가 잘못됐는지 뒷부분 한글은 안걸려있네요^^:;
-
cicatrix
07.06 22:41
수정했습니다 :)
-
카이사르
07.06 23:11
신기하군요. 오래전부터 관심은 있었는데, 어떤식인지는 처음 보네요.
-
미케니컬
07.06 23:11
추천 하악!! 사실 별 관심 분야는 아닌데 글을 매우 흥미유발스럽게 쓰시는군요. 너무 좋아요
잘 보았습니다~ 다음편도 기대!
-
편강
07.07 09:07
고급정보! 추천!!
-
기둥
07.07 17:26
이런 글 쓰시는 분들 존경스럽습니다.
엄청난 열정이 느껴집니다.
추천
-
초보지존
07.10 10:28
대단하십니다.... ^^
-
yohan666
07.10 12:19
잘 보았습니다. 클러스트링이라 하면 세티 엣 홈 이런것도 포함 되는 것인가요?
-
cicatrix
07.10 23:11
클러스터 = 근거리 네트워크 (LAN)에 묶여 있는 컴퓨터의 집합체
클라우드 컴퓨팅 = 인터넷과 같은 광역 네트워크 (WAN)를 통해 연산 작업을 하는 기술
seti@home 과 같은 넓은 의미의 분산 컴퓨팅 기술과 클러스터링의 가장 큰 차이는 연산의 목적과 네트워킹이 아닐까요?
아무래도 수치해석과 같은 연산은 각 컴퓨터의 연산능력이 동일할 때 최적화가 됩니다.
왜냐하면 각 컴퓨터가 연산을 하고, 데이터를 합치게 되는데 어느 한 컴퓨터가 느릴 경우 결국 다른 컴퓨터들이 기다려줘야 되거든요.
큰 맥락에서 "많은 컴퓨터를 활용한 데이터 처리" 에서는 비슷한 부분은 있는 것 같습니다 ^^
-
midday
07.23 01:08
멀티쓰레딩, 클러스터링, 클라우딩... 전부 다 광역적인 의미에서 분산컴퓨팅 시스템에 해당이 될텐데요. 물론 요즘은 멀티쓰레딩을 분산컴퓨팅이라고 하진 않지만, 사실 출발점과 지향점은 다르지 않습니다. 동시에 여러개의 시스템에서 여러개의 계산을 하는건데요.
여기에서 중요한 점이, "각 연산결과가 서로에게 미치는 영향이 얼마나 큰가?"입니다. 이는 결국 "연산에서 서로 주고 받는 데이터가 얼마나 많은가?"라는 점과도 일치하는데요. 만일 각각의 연산에서 나오는 결과가 서로에게 미치는 영향이 커서 데이터를 주고받는 일이 많다면, 클라우딩 시스템같은걸 도입했을때는 득보다 실이 더 크게 되겠죠. 이걸 따져봐서 어느정도의 규모로 연산을 분산시키는가 하는것도 중요한 이슈가 됩니다.
또한, 아예 분산 자체가 불가능한 경우도 있습니다. 하나의 연산을 위해 기존의 연산결과가 필요한 경우가 그러한데요. 이럴 경우에는 무작정 CPU 하나로 죽어라고 계산하는 방법밖에 없습니다. 과거에는 계산시스템 하나로 계속 반복해나가는 형태가 일반적이었기 때문에, 수식 연구도 이런 점에 초점을 두어 최적화를 하는 방향을 우선시했습니다만, 요즘은 용산에 가서 CPU만 사도 코어가 두개니 네개니 하는 시대이다보니, 시스템 하나로는 느릴지언정 두개 이상으로 하면 더 빨라질수 있는 해석방법을 연구하는 것이 보편적이 되었죠.
-
성야무인
07.11 09:51
글잘읽었습니다. 분야는 다르지만 의생물학실험 과정도 공학문제와 다를바가 없습니다. 어차피 이공계라는 족속들은 두뇌구조가 엇비슷해서 문제 도출하는 방식도 비슷한가 봅니다. 아주 쉽게 이야기 하자면 큰 프로잭트를 하나를 하는데 똑같은 실험이라도 몇명이 나눠서 실험을 연계하고 그 실험한 절대값의 횟수가 많으면 많을수록 결과도 정확해집니다.
블로그에 작성한 2번 글을 복사해서 붙여넣기 했더니 그림 간격이 맞지 않는군요.
아래 링크에 2번 글이 있으니 참고하시기 바랍니다.
http://microc.tistory.com/entry/22-클러스터-구축-튜토리얼