리눅스박스 클러스터링

liberta의 이미지

저는 모대학 모학과에서 플라즈마 & 비선형 동역학을 전공하는 석사 새내기(?!)입니다. 연구의 특성상 논문을 뒤적거리는 시간만큼이나 X만한 입자나 유체조각 따위를 공간에 뿌리고 그 녀석들 사이의 상호작용을 모델링하는데 보내는 시간이 무척 많은데요.

지금 쓰고 있는 P4(1.5Ghz+750M) 기계를 (교수님을 졸라서~) 몇 대 정도 더 장만해서 좀 자유롭게 이것저것 구현해 볼 수 있는 리눅스 클러스터를 구축하려는데 무엇보다 저와 비슷한 여건에서 이쪽에 대한 경험이 있거나 지금 활용중인 분들의 조언을 듣고 싶습니다.

Beowulf cluster 등에 대한 많은 문서가 있는데 그들 중 추천할 만한 것이 무엇인지, 그리고 규모에 따른 가격대 성능비의 문제, 또 여러분들이 겪었던 애로사항 등등... 할까 말까 망설이는 사람들에게 참고가 될 만한 어떤 정보라도 환영입니다. 잘 알려진 사례보다는 주위에서 실제로 적용되고 있는 '현실성 있는' 이야기를 특히 기대합니다.

댓글

익명 사용자의 이미지

대체로 클러스터링에 대해서는 잘 모르겠습니다만,
분산 시스템처럼 작동하는것만은 분명하군요.

클러스터링을 구성했을때, fault-tolerant는 어떻게
지원되는지 궁금합니다.

예를들어, 하루 이상 돌아가야 되는 거대한 단일작업인 경우
일단 돌아가고 있는 노드들이 fail되면 어떠한 조치를
취하십니까.

단순히 restart 시키십니까. 아니면 어떤 error recovery
가 지원됩니까. 노드가 다시 재시작되면, 프로그램이 이전
에 실패되었던 부분부터 시작되는지의 여부를 묻고 싶네요.

분산 시스템에서의 에러복구를 구현하는중에
함 물어봤습니다.

익명 사용자의 이미지

16노드를 넘어가지 않는 소규모 클러스터라면 걱정하지 말고 beowulf 관련 document를 따라서 하시면 됩니다. 손쉽게 클러스터를 자동으로 구성해 주는 소프트웨어나 리눅스 배포판도 있으니, 그런것을 활용하셔도 좋구요.
시스템 구성 자체는 풀고자 하시는 문제에 따라 꽤 많은 차이를 보입니다.
혹시 문제가 NAS 문제중에허 CG나 FT문제와 같은 계산 패턴을 가진 문제라면 클러스터 구성에서 scalability가 좋지 않을 수도 있습니다. 그리고, 저가의 네트워크 장비를 가지고 원하시는 만큼 기기들이 가진 최고의 성능을 짜 낼 수 없을지도 모릅니다. 이 경우에 여유가 있으시다면 SCI나 Myrinet과 같은 장비를 고려해 보시는 것도 가능합니다.단 이경우 단위 노드당 250만원 가까이 네트웍장비에 돈을 부어 넣어야 합니다. 하지만 그만큼 중요한 일이시라면 그런 고려도 가능하겠지요.
fast-ethernet을 고려하신다면 스위치에 따라 보통 81usec 정도의 latency를 보이고 scalability가 썩 좋지 않으므로 24노드정도를 넘지 않도록 하십시요. 그런데, 이 숫자는 사용하시는 메시지 패싱라이브러리의 프리미티브..즉 사용하시는 병렬 알고리즘에 따라 좀 차이가 납니다. ---- 궁극적으로는 병렬 알고리즘이 제일 중요합니다.

여러분들이 이미 잘 알고 계시겠지만
클러스터 장비는 "맞춤옷" 과 같은 존재입니다. 풀고자 하는 문제에 맞추어 하드웨어 선택부터 조정이 가능하니, 제일 먼저 풀고자하는 문제 성격 부터 파악을 하시는 것이 옳을 듯 합니다.

2 Way이상의 SMP도 사용이 가능하고, 다양한 네트워크 선택이 가능합니다. 프로세서는 현재는 P4계열을 추천합니다. 이것에는 여러가지 이유들이 존재합니다. 벌써 여러분들이 지적하신 이유들을 종합해 놓으면 될 듯 싶습니다. P4를 사용하신다면 컴파일러는 intel의 icc를 사용하십시요. version6.0을 가져다 쓰시고, sse2 옵션을 꼭 사용하십시요.
고민하시는 문제가 100% P4에서 좋은 결과를 얻으시리라는 보장은 없습니다만, 문제 특성이 비교적 독특하지 않는 한은 그 조합이 가장 뛰어납니다. 단 이경우, 사용하고자 하시는 라이브러리들을 모두 icc를 사용하셔서 직접 컴파일하여 쓰셔야 합니다.

AMD니 alpha니 P4니 하는 것들의 벤치 마킹 자료를 올려 드릴 수도 있겠는데,
요즘 좀 많이 일에 치여서...힘이 빠져서... 양해를 구합니다.

그럼 happy clustering하십시요.

--- 병렬처리/클러스터 관련 일만 한10년 해온 사람이...

익명 사용자의 이미지

당연히 계산쪽에는 알파프로세서 입니다,...
현재 모든 씨피유와 해봐도 미니멈 5배 속도가 아노고여 얼마전 테스트에 sgi 와 15배 차이나났습니당....
알파씨피유를 쓰세여 ,,,대기 기계쪽두 마니슨담니당...

logout_의 이미지

제 의견으로도 알파 프로세서를 그렇게 쉽게 신뢰할 수 없다고 봅니다.

우선, 푸는 문제에 따라서 실제 씨피유가 보여주는 성능은 차이가 큽니다. 특히, 메모리를 많이 사용하는 과학기술 계산 어플리케이션을 돌리는 경우는 시피유의 캐쉬와 메모리 대역폭이 계산 시간에 많은 영향을 미칩니다. 특히, 캐쉬의 크기는 결정적인 요소가 되는 경우도 많습니다.

그 다음으로, 컴파일 시의 최적화 문제입니다. 일반 사용자는 다들 모르고 사용하겠지만, i386쪽 컴파일 옵션은 보통 이미 최적화가 되어 나옵니다. 한번 리눅스 커널을 컴파일할때 athlon을 선택한 경우와 pIII를 선택한 경우를 비교해 보면 gcc에 들어가는 옵션이 틀립니다. 실제, athlon 시피유의 경우는 컴파일 옵션을 잘 조절하면 컴파일 된 바이너리가 10%정도의 성능 향상을 보입니다. 한번 이 컴파일 옵션을 리눅스 커널에 넣어 컴파일 해 보려고 했더니 이미 makefile에 들어가 있더군요. :)

그래도 i386쪽의 완벽한 호환성을 보이는 애슬론도 이렇게 최적화용 컴파일 옵션이 따로 나오는 상황인데 사용자가 많지 않은 알파는 어떻겠습니까... 그냥 gcc로 대강 컴파일을 하면 그 바이너리 성능이 동급 클럭의 인텔이나 amd 시피유에 비해서도 떨어지는 경우가 실제 발생합니다.

이런 경우 가장 쉬운 해결책은 컴팩 (예전에는 디지털)의 Tru64 Unix를 돈주고 사고 여기에 따라오는 씨 컴파일러를 쓰는 방법이 제일 쉽습니다. 그런데 이 방법은 대신 돈이 많이 들죠.

실제 과거의 알파 프로세서 (EV6 버스를 쓰는 1기가 제품군까지)는 이런 최적화 문제가 심각했습니다. 대강 gcc로 컴파일 하면 실망스러운 결과가 자주 나왔습니다. 게다가 메모리 버스가 66Mhz였는데 여기서 병목이 생기면 동급의 펜3에 많이 뒤지는 결과가 나오곤 했습니다. 특히, 삼각함수를 많이 쓰는 어플은 성능 저하가 심각했는데 이 때문인지 누군가가 아예 알파 어셈블리로 math.h의 sin(), cos(), tan()와 같은 삼각함수들을 새로 만들어서 배포한 적도 있습니다.

그런까닭으로, 단순히 시피유 성능 벤치마크만 보고 과학기술계산용 프로세서를 결정하는 것은 상당한 무리가 있습니다. 한마디로, 돌려보기 전에는 모릅니다. 실제, 제 경험상으로도 예전에 어떤 실험실 선배 중의 하나는 실험실 내부의 울트라스팍, SGI, 알파 모두 놔두고 맨날 리눅스가 깔린 펜티엄 프로 200메가헤르쯔 컴퓨터에 들어가서 코드를 돌리곤 했습니다. 이유는요? 펜프로 피씨에서 결과가 평균 두배 빨리 나왔습니다. 그 선배만 그랬죠.

다만, 과학기술 계산용 프로세서를 생각할 때 다음과 같은 구매 원칙이 있기는 합니다. 글이 길어지지만 몇자 더 보태 보겠습니다.

1. 캐쉬 성능이 중요하다.

시피유 캐쉬는 가능한한 큰 것이 좋습니다. 그리고 같은 사이즈의 시피유라면 특별한 캐쉬 접근 기술을 채용한 시피유가 성능이 좋습니다. 1기가헤르쯔 씨피유가 맨날 133메가헤르쯔 메모리만 억세스 하고 있으면 그 시피유는 놀다 보니 133Mhz 클럭의 시피유가 되고 맙니다.

2. 최적화된 컴파일러가 있는가.

특히 널리 퍼져 있지 않은 시피유를 구입할때는 반드시 체크해야 할 사항입니다. 달리 말하면, gcc만 써도 시피유 성능이 제대로 나오는가를 체크해야 한다는 것입니다. 이걸 알아보기 위해서는 뉴스그룹을 뒤져가며 전세계 어딘가에서 이미 이 시피유로 과학기술계산 프로그래밍을 해 본 사람의 경험을 찾아보는 수 밖에 없습니다...

3. 유지 보수 비용은 어떤가

유지보수로 따지만 정말 x86솔루션만한 것이 없습니다. 막말로 조립해서 리눅스 깔고 돌리면 끝입니다. 뻑나면 부품별로 통째 갈아버리면 끝입니다.

그런데 막상 x86 세상을 벗어나면 당장 리눅스를 까는 것조차 문제를 일으키는 플랫폼이 많습니다. 알파의 경우, 삼성에서 만든 그 무엇이냐... rufian 계열 보드들은 리눅스를 설치하는데도 상당한 어려움이 있었습니다. 깔고 나서도 몇몇 프로그램이 오동작을 하기 시작하면 정말 막막할때가 많습니다.

이런 까닭으로 특히 대학원 실험실 내부의 현실을 고려한다면 특별한 이유가 있지 않은 한 그냥 최신의 x86 솔루션이 대학원 실험실에서는 최상의 과학기술 계산용 플랫폼이 될 수 밖에 없는 상황입니다. 그래도 잡일 많은 우리네 대학원생들 이런데까지 신경 다 쓰고 나면 제때 졸업 안됩니다. :)

참고로 예전에 알파머신을 정말로 괜찮게 사용하신 분의 얘기를 하나 적어볼까 합니다. 이분 전공은 정확히 기억이 안나는데... 아마 열쪽이나 유체쪽일겁니다. 그 당시 실험실에 데모용으로 알파 머신이 하나 두달간 임대되어 왔는데 여기에는 윈도우즈 NT와 비주얼 포트란이 깔려 있었습니다. 어느날 옆 실험실 박사과정에 계시는 이 분이 윈도우즈 NT용 텔넷 대몬을 하나 깔아달라고 그러더군요. 그 다음부터 이 알파 머신이 하루종일 뭔가 작업을 하기 시작했는데 한달 지나고 나니까 이 분이 박사 논문 발표를 하더군요. 나중에 물어보니 알파에서 자기 프로그램이 몇배로 빨리 돌아갔다나요?

그러나 비슷한 경우가 구조역학을 전공하는 제 실험실 구성원 중에서는 발생하지 않았습니다. 알파 별로 안빠르네가 중론이었죠. :)

참고로 하십시오.

익명 사용자의 이미지

아무래도 체계적으로 다시 해봐야 할 거 같은데요.
일단 5배 속도가 나온다는 것에 대해서는 어떤 시피유랑 비교했는지가 있어야하고
어떤 프로그램인지도 있어야합니다. 물론 동일한 하드웨어에서 컴파일 옵션만 갖고서도
적어도 5배~10배 성능차를 낼수 있읍니다.

현재 가장 빠른 Alpha프로세서는 1GHz이고 가장 빠른 펜티엄4는 2.4GHz입니다.
LINPACK 테스트의 경우 알파 1GHz는 약 800MFlops정도 나오고 P4는 2500MFlops정도
나옵니다. 물론 P4가 빠릅니다. 물론 SPECfp를 보면 알파시피유가 약 800정도 나오니까
P4랑 비슷합니다.

님이 테스트했다는 것을 납득할 수 없는 이유가 알파가 모든시피유에 대해서 5배빨리
나온다면 캐쉬의 영향이 큰 작은 사이즈의 문제를 돌린다고 볼 수 있겠군요. 알파의
경우 2MB 부터 8MB까지 캐쉬가 있으므로 데이타 사이즈가 cash 사이즈보다 작은것을
많이 쓰는 경우에 차이가 크게 납니다. 그리고 사용한 메모리, OS, Swapping이 발생하는지 안하는지, 님이 풀고 있는 문제의 메모리 억세스 패턴 등을 모두 다 봐야합니다.

그리고 SGI와 Alpha를 비교할때는 각각의 컴파일러에서 옵션은 어떻게 줬는지를 말해야하고 이에 따라서 튜닝할 수 있는 다양한 방법이 있지요.

저도 Benchmark를 많이 하는 편이지만 유저들이 벤치마크에서 위의 글처럼 알파가 5배 빠르더군요. 모든 시피유에 비해서... 라는 식의 언급은 다음과 같은 내용입니다. \'역시 자동차는 세상에서 F1 레이싱카가 제일빠르더군요. 모든 승용차와 비교해서... 특히 티코보다는 5배는 빠르던데...\' 라는 문구랑 차이가 없지요.

그리고 대기쪽에서는 알파를 많이 쓰는 이유가 통상 2~3년전에는 알파시피유가 가장 빠른 시피유였고 거기에 맞춰서 나와있기 때문이지요. 그리고 대기쪽의 문제는 MM5 계열을 제외하고서는 대부분 SMP에 절대적으로 유리한 환경으로 구성되어 있으므로 메모리가 많은 기계를 사용하는 것이 좋습니다. 그러므로 대기쪽에서 알파를 많이 쓴다... 라고 일반화할 수는 없읍니다. 정말로 한국에서는 대기쪽으로는 NEC-SX5와 Cray를 가장많이 씁니다. 알파는 랩수준에서 연구용으로 사용하는 곳이 많지요.

이런말 하면 뭐하지만... 너무 일반화의 오류를 범하는것 같군요. 저도 알파시피유 좋아하지만 실제로 돌려보면 문제에 따라서 어떻게 돌리느냐... 하는 것이 엄청 결과를 좌우합니다.

익명 사용자의 이미지

안녕하세요.
전 터보리눅스 시스템즈의 이정철이라 합니다.
병렬처리에 어려움을 가지고 계시고 그것을 해결하시기 위해서
많은 노력들을 하시고 계시는 군요.
또한 상기의 어떤 분이 EnFuzion 제품에 대해서도
언급하여 주셔서 감사드립니다.

결과적으로 말씀 드리면 EnFuzion은 Parallel Computing용이 아니라 Parametric Study가 될 수도 아닐 수도 있다고 말씀 드리고 싶습니다.

분산처리(혹은 슈퍼컴)의 종류를 여러가지로 나눌 수 있습니다.
최근에 IBM에서 본격으로 투자를 한다고 말한 그리드 컴퓨팅도 병렬처리중에 하나라고 말할 수 있습니다.

더불어 저희의 상용 제품은 EnFuzion의 경우는 MPI등과 같은 환경을 요구하지 않습니다.
물론 사용하시고자 하는 프로그램이 이미 병렬처리용으로 만드셨다면 할 수 없지만, 연구 과제의 마감을 코 앞에 두시고 새롭게 병렬처리용으로 프로그래밍을 하신다면 상기의 어떤 분이 말씀 하신것 처럼 몇개월이 시간이 소용되실 것입니다.
하지만 저희 제품은 그 부분을 상당히 줄여 드립니다.
다음의 프로젝트 예를 들어서 말을 마치도록 하겠습니다.

1. 2002년 4월 7일 : 항공대 최적화 설계용 포트란 + Ansys(역학 시뮬레이션 툴) + VisualDOC (변수 발생기) + POSDATA 슈퍼컴 센터 (32노드) + EnFuzion = 구성 및 테스트 시간 : 5시간

2. 2002년 4월 22일 : EnFuzion + DIVX 엔코딩 = 엔코딩 시간 80% 단축 (1시간 영화 엔코딩 시간 5분)

약간의 홍보성 내용이라 생각 되지만, 시간대 효율을 말씀드리고 싶었습니다.

감사합니다.

김인수의 이미지

밑에 썼던 글에 추가할게 있는데....

어쩄든 클러스터를 만들어 놓고 나면 거기서 나오는 열과 소음이 장난이 아니라는 겁니다...

제 실험실에 16BOX*2CPU랑 4box*2cpu 이렇게 클러스터가 두개로 되어 있는데 그게 여름에는 에어컨을 켜도 더울정도로 열이나고 소음은....근처에 갈 수가 없을 정도입니다...

그리고 이건 좀그렇긴 한데....전자파 문제...
대형 전기기구를 사용하다보니...전자파 문제가 심각할 지도 모릅니다...
전자파의 영향이 어느정도인지는 잘 모르지만서도
우리실험실 선배들이 아들을 못낳는 이유가 클러스터의 전자파때문이라는 이야기가....

익명 사용자의 이미지

소음이라면야 저희 장비도 한소음 하죠.

랙마운트형 1U 서버 7대가 들어있고 GB switch, 10/100 switch,
raid, UPS ... 대충 이렇게 구성되어 있습니다.

첨 들어왔을 때는
"음, 멋지군. 이렇게 좁은 공간에 구성할 수 있다니"

하지만 좋은 건 잠시 더군요.

이놈이 뿜어내는 열기와 소음이란
벤더 직원에게 물어보니 방출되는 열과 소음에 대한 자료는 없다고
말합디다. 그냥 좀 열이 많이나고 시끄러울 거라고만... X-(

제가 대충 세어보니 안에 들어있는 팬만 50개가 넘더군요.

가동을 하고 며칠이 지나니 자연히 수냉식 개조 pc들이 눈에 들어오더라구요.

저걸 개조해버려?

거의 7000만원 주고 구입한 거라 손댈 생각은 별로 없구요. ^^;;

말이 옆길로 샛지만 아무튼 참고하세요

익명 사용자의 이미지

벤더 직원이 잘 모르고 한 모양이군요.
통상 Major 벤더라고 부르는 컴팩등은 Spec Sheet에 보면
발열량과 소음에 대해서 서버별로 나와있읍니다.
실제로 클러스터나 대형 서버들이 들어갈때는 그 spec sheet를
바탕으로 에어컨과 같은 공조기 및 그에 따른 전원 설계를
같이하게 됩니다.

익명 사용자의 이미지

광주리동에 한번가보시죠.
전에 beowulf cluster에 대한 프로젝트가 상당히 활성화 되어 있었습니다. 관련자료와 함께..
도움을 주실 분이 계실 겁니다.

liberta의 이미지

참고글들 감사드립니다. 쩝, 개인적으로 결국은 "더욱 갈등이 되는군요~!" ^^;

MPI에 대해선 예전에 잠깐 API정도 들여다 봤는데, 간단히 몇 대의 시스템으로
그다지 어렵잖게 환경을 갖추고 기본적인 계산루틴에 적용까지 할 수 있을 것
같군요. 그런데 링크를 따라 몇가지 문서를 참고해 봤는데, 클러스터 시스템의
성능이랄까, 아무튼 기대한 효과라는 것이 막연히 선형적으로 (또는 지수적으로?!)
증가하는 것은 아니네요.. 값싸게 메모리나 씨퓨 업그레이드 하는 것과는 달리
상당한 자금을 퍼부어야 하는 일이니만큼 정말 신중하게 규모를 결정해야 할 듯..

그리고 어떤 분의 지적대로 좁은 연구실에 들여다 놓고 게다가 환경을 구축하는
넘 = 관리하는 넘 = 사용하는 넘.. 이런 상황에서 무작정 "클러스터 사용기"만
믿고 함부로 시작할 일도 아니고... 아, 물론 다루는 시스템(물리적인~)이
여러가지 변수들이 몽땅 얽혀있는 구조이기 때문에 병렬처리가 언제나 유리하기만
하진 않다는 것도 이해합니다. 당연히 모델링 과정에서 이 점을 고려해야겠죠.

음 - 이럴땐 차라리 지리적으로 가까운, 관련 분야 연구하는 쪽들을 선동해서(?)
판을 키우는 것이 나을까요? ;-) 시기가 좀 늦춰지더라도, 일단은 무어의
법칙에 포함되는 '주기'가 짧아지는 경향을 믿고 버티다가... 하하~ 갈등^2 -.-
--
내가 원하는 나라요? 노동절이 공휴일인 나라죠... :-)

logout_의 이미지

저도 공대 출신이지만 플라즈마 쪽은 아예 모르겠구요. 동역학 쪽 솔루션들은 전체적으로 병렬화가 어렵다고 알고 있습니다. 가능한 알고리즘들이 많기는 하지만요. 혹 Genetic Programming으로 문제 해결이 가능하다면 클러스터 사용을 추천합니다. 이게 딴게 아니고 씨 많이 뿌려서 제일 잘나가는 놈들만 수확하겠다는 것이기 때문에 뿌릴 수 있는 '밭의 수'가 많으면 많을 수록 좋죠. 병렬화에 무척 요긴합니다.

MPI를 좀 보셨다면.. 우선은 localhost에서 MPI프로세스를 여러개 띄워서 컴퓨터 한대에서 병렬 프로그램을 돌려 보십시오. 병렬 프로그래밍이라는게 컴퓨터 여러대가 꼭 필요한 것은 아닙니다. 한대로도 병렬 프로세스를 수십개 돌릴 수 있죠. 다만, 이렇게 되면 속도 향상은 하나도 없습니다만 그래도 일주일 꼬박 새어서 클러스터 구축한 다음 MPI 셋업 다잡고 어플 돌려봤더니 도저히 안되겠더라.... 이것보다는 훨씬 낫습니다.

일단 어플리케이션이 잘 돌고... MPI 프로그래밍으로 가능성이 좀 보이면 컴퓨터 숫자를 두대로 늘여 보십시오. 두대에서 MPI 셋업이 잘 잡히고 어플이 잘 돌면 넉대, 여덟대, 이렇게 숫자를 늘여나가도 상관없습니다.

간단히 손쉽게 병렬 프로그래밍의 이점을 볼 수 있는 하드웨어 구성은 듀얼 프로세서 시스템입니다. 여기도 마찬가지로 프로세서가 두개가 된다고 컴퓨터 성능이 두배로 빨라지는 것은 아닙니다. 그런데 만약 MPI 프로그램을 만들었고 이 MPI 프로그램이 두개의 프로세스를 돌린다고 가정합시다. 이 프로그램을 듀얼 프로세서 시스템에서 돌리면 어떤 일이 벌어질까요?

이렇게 되면 프로세스 하나는 CPU 1번에서, 프로세스 두번째는 cpu 2번에서 돌아가게 됩니다. 프로세스간의 통신은 자동적으로 씨피유 사이의 버스를 이용하니까 사용자가 신경을 써 줄 필요도 없구요. 간단한 병렬화는 이런 듀얼 프로세서 시스템이 합리적인 선택이 될 수도 있습니다. 즉, 2 노드 클러스터를 구축하는 것 보다는 그냥 돈들여 듀얼 프로세서 시스템을 하나 사는 것이 비용면에서나 셋업을 잡는데 훨씬 유리할 수가 있는 겁니다.

그런데 여기도 문제가 없는 것은 아닙니다. 현재 펜4는 버스 구조가 어떻게 바뀌었는지 모르겠는데... 펜3까지는 듀얼 시피유가 달릴 경우 이 시피유들은 각각 동등하게 메모리와 시피유 사이의 버스 대역폭을 나누어 씁니다. 예를들어 시피유 하나가 달렸을때 시피유와 메모리 사이의 대역폭이 2 기가바이트/초 였다면 시피유 두개가 달리면 시피유 하나와 메모리 사이의 대역폭은 1 기가바이트/초로 줄어드는 것이죠. 만약, 프로세스간의 통신량이 엄청나게 많은 경우는 이 대역폭이 bottleneck으로 성능 저하를 가져올 수 있습니다.

AMD의 Athlon MP는 이런 면에서 우수합니다. 위의 예의 경우, AMD 칩셋을 쓴 듀얼 프로세서 마더보드의 경우 각각의 시피유마다 동일한 2 기가바이트/초의 대역폭을 줍니다. 그런데 전반적으로 AMD의 솔루션은 실제 메모리 성능 벤치마크를 해 보면 인텔에 비해 상당히 떨어지는 수치가 나오는 경우가 많습니다. 인텔이 2기가/초 결과가 나왔다면 amd는 1.5기가/초가 나오는 식이죠.

일단 제가보기에는 님의 경우는 2 노드 클러스터로 갈 것인지 아니면 4노드나 좀더 많은 숫자의 노드 클러스터로 갈 것인지를 결정을 해야 할 것 같습니다. 노드 숫자가 많아지니까 계산 결과도 빨리 튀어 나오더라... 그러면 예산 범위내에서 어드민 노가다 수준을 예상하고 클러스터를 구축하면 됩니다. 다만, 2 노드 클러스터로도 충분하겠다 싶으면 그냥 듀얼 프로세서 시스템을 하나 더 구입하는 것이 최선의 방법입니다.

어떻게 보면, 공대 대학원 실험실에는 듀얼 프로세서 시스템은 하나 정도는 있어야 합니다. 한두명이 계산 프로그램을 돌리는 게 아닌데 이미 한 사람이 컴퓨터에 들어가서 하루종일 도는 프로그램을 돌리고 있으면 막상 거기에 다른 사람이 들어가서 프로그램 하나를 더 돌려놓고 오기가 뭣하거든요... (보통 이때는 짬밥에 따라 컴퓨터 이용 우선순위가 결정되죠.) 그런데 빵빵한 듀얼 프로세서 시스템이 하나 있으면 급한 사람 두명은 한번에 처리가 가능하다는 장점이 생깁니다.

얘기가 길어지는데요. 현실적으로 오후 5시가 넘어가면 에어컨을 칼같이 끄는 우리나라의 실정에서 실험실에 1U나 2U 노드로 클러스터를 꾸미면 그 클러스터 여름에는 열과 소음 때문에 사람고생 컴퓨터고생입니다. 반드시 컴퓨터는 그래도 열 덜받는 데스크탑으로 꾸미세요. 안그러면 관리안됩니다. :) 그리고 가능하다면 클러스터는 어디 환기 잘되는 참고 같은데 쳐박아 놓는게 좋습니다. 제일 좋은 장소는 학교 전산실 같은데 자리를 좀 얻는 것이죠.

전체적으로 리눅스 클러스터의 딜레마는 이렇습니다. 리눅스 클러스터링은 '슈퍼컴퓨터가 반드시 필요한 사람'에게는 이만한 솔루션이 없습니다. 비싼 IBM나 SGI 기계 사는 몇분지 일의 가격으로 (셋업 노동비 포함) 슈퍼컴을 하나 만들 수 있습니다. 다만, 막연히 '수퍼컴퓨터가 필요하다고 느끼는' 사람에게는 끝없는 노가다 세팅의 고역을 안겨줄 수도 있습니다. 우선 풀려고 하는 알고리즘의 병렬화 가능성을 반드시 직접 프로그래밍을 해서 체크해 보시고 그 다음에 구축할 노드 숫자를 결정해 보시기 바랍니다. 2노드 클러스터를 구축할 요량이면 그냥 듀얼 프로세서 시스템을 구입하는 것이 유리합니다.

그럼.

익명 사용자의 이미지

PVM이나 MPI로 쉽게 포팅할 수 있거나 MPI나 PVM으로 된
코드가 있다면 한번 해보시지만 그게 아니라면 부담이
너무 커서 논문쓰시는데는 시간을 많이 잡아먹을듯 싶습니다.
유체쪽에선 많이 되어있는것 같던데요. 동역학에선 전혀
모르겠네요..

logout_의 이미지

베오울프 클러스터를 꾸미는 것 자체는 어렵지 않습니다. 문제는 클러스터위에서 돌아갈 어플리케이션인데요.

잘 아시겠지만 병렬 프로그래밍 기법으로 효율적으로 해결할 수 있는 문제가 있고 그렇지 않은 문제가 있습니다. 예를들어, 수십테라 바이트의 파일 더미 속에서 특정 패턴을 찾아내는 것과 같은 작업은 병렬화가 가능하지요. 파일을 쪼개서 컴퓨터마다 나누어 던져주고 나중에 결과를 모으면 끝입니다. 컴퓨터에서 병렬화는 병렬이라는 말 보다 '분산작업'이라는 말이 더 적절한 경우가 많습니다.

그런데 어떤 문제들은 아예 병렬화 자체가 불가능한 경우가 있습니다. 혹은 병렬화가 가능하다고 그래도 컴퓨터 노드간에 주고받는 데이터 량이 많아서 통신하다가 볼일 다 보게 되는 경우도 있습니다.

우선은 어떤 병렬화 라이브러리나 솔루션을 쓸 것인지부터 생각해 보십시오. 만만한게 MPI나 PVM인데 만약 이쪽 프로그래밍 경험이 없으시다면 클러스터를 구입해도 당장 쓸 일은 별로 없을 겁니다. :) 특히 과학 기술 계산용 프로그램들은 시피유 파워가 중요한데 올해 3/4분기가 되면 2.6기가 대의 시피유도 구경할 수 있다는 사실을 염두에 두시구요. 예산만 확보할 수 있다면 병렬 프로그래밍을 먼저 배우고 클러스터를 나중에 구입하는 것도 괜찮은 방법이 됩니다.

클러스터 구축에는 특별한 테크닉은 필요없습니다. 다만, MPI나 PVM의 경우 둘다 모든 클러스터에 똑같은 내용이 하드 디스크에 저장되어 있을 것을 요구합니다. 따라서 이런 경우에 노드간 통신 로드가 크지 않다면 노드중의 하나를 NFS서버로 놓는 것도 괜찮은 방법입니다. 그리고 NFS용 네트웍 카드와 노드간 MPI통신용 네트웍 카드를 따로 분리시키는 것도 좋은 방법입니다. 요즘은 기가대 ethernet도 솔루션이 쓸만하다고 알고 있는데 통신량이 많거나 파일 서버에 입출력이 빈번하다면 고려해 볼만합니다. 돈값 합니다. :)

리눅스 어드민 스킬에 자신이 있으시다면 아예 주요 노드 하나에만 하드를 달아버리고 나머지 노드는 diskless node로 돌리는 방법도 고려해볼만합니다. 컴퓨터 한대당 하드값 20만원씩이 빠집니다. 네트웍 카드에 부트롬을 잘 짜집기해서 네트웍카드에서 부팅이 가능하게 할 수도 있지만 세팅이 만만하지는 않으니 적어도 씨디롬 드라이브는 노드마다 구축하는 것이 좋습니다. 요즘 씨디롬 드라이브는 무척 싸니까요. :)

네트웍 카드는 돈 들여서 조금 좋은 것을 사십시오. 인텔 제품이 가장 만만할겁니다. 대만제 카드들은 리눅스 상에서 드라이버지원이 좀 미흡한 경우가 간혹 있습니다.

그리고 같은 클럭에서 부동소수점 계산 성능은 AMD가 인텔에 비해 월등한 성능을 보여줍니다. 잘 찾아보면 gcc의 컴파일 옵션 중에 AMD optimized 옵션도 있습니다. 최근들어 인텔 시피유도 SSE를 잘 써서 컴파일 하면 놀라운 성능을 낸다는 얘기는 들었는데 여하간 전통적으로 scientific쪽으로 FPU성능은 AMD가 월등합니다.

그리고 노드 숫자는 가능하면 4노드나 8노드로 쓰시기 바랍니다. 정 노드 숫자가 많은 것이 중요하다면 16노드까지가 한계입니다. 그 이상은 노드 관리하는데에도 특별한 툴이 필요해집니다. 32, 64노드가 되면 갑자기 다운된 노드가 생겨도 찾는데만 시간이 한참 걸리죠. :)

전체적으로 클러스터를 구축할때의 요령 중의 하나는 이 클러스터가 마치 하나의 머신처럼 보이게 만드는 것입니다. 그래야 사용자가 쓰기 편하거든요. 잘 쓰이는 요령중의 하나는 마스터 노드 하나는 인터넷에 연결시켜 아이피와 도메인 네임을 주고 나머지 병렬 노드들은 사설 아이피 주소를 줘버리는 겁니다. 192.168.1.1, 2, 3, 4와 같이요. 그리고 모든 노드간 통신은 이 사설 네트워크 안에서만 이루어지게 세팅을 잡습니다.

제 개인적인 의견으로는 과학기술 계산용으로 병렬 클러스터를 구축하는 것을 크게 권장하지는 않습니다. 클러스터를 구축하려면 그래도 피씨 한대 세팅 잡는 것보다 많은 노력이 들어가고 프로그래밍도 병렬 프로그래밍을 배워야 합니다. 정말로 노드가 n개 늘어나면 프로그램 수행 속도가 n배로 단축되는 완벽히 병렬화 가능한 케이스가 아니라면 클러스터로 인한 속도 향상이 그렇게 두드러지지 않습니다. 한번 프로그램이 도는데 며칠씩 걸리는 경우라면 클러스터를 생각해 볼 수도 있겠지만 그렇지 않으면 그냥 알고리즘 개선해 가면서 몇달 기다리다가 시피유 업해주는 것이 남는 장사입니다. 게다가 요즘은 인텔과 amd의 경쟁 때문에 모르긴해도 무어의 법칙이 6개월은 단축되어 있을 겁니다. :)

그리고 만약 님의 케이스가 다음과 같은 경우라면 클러스터고 뭐고 필요없고 노는 컴퓨터마다 분산처리 툴만 깔아주면 게임 셋입니다. 초기조건을 다르게 주고 프로그램은 같은 프로그램을 쓰는 경우이지요. 예를들어, 님이 해야 하는 일이

$ foobar input1 > result1
$ foobar input2 > result2
$ foobar input3 > result3
.
.
$ foobbar input_n > result_n

이런경우라면 이 분산 작업을 자동적으로 컴퓨터마다 뿌려주고 나중에 취합해 오는 툴이 이미 있습니다. 인터넷에 연결된 아무 컴퓨터에나 툴을 깔면 되죠. 보통, 이런 도구들은 일반 사용자가 컴퓨터를 쓰지 않는 경우에만 프로그램을 돌려줍니다. 터보리눅스에서 판매하는 툴 (이름은 까먹었네요)이 이 작업을 자동화 해 주죠. Condor도 비슷한 일을 한다고 들었습니다만.

그리고 참고로 Python쪽 툴도 한번 찾아보십시오. MPI 바인딩은 이미 있는 것 같고 Numpy나 기타 수치해석쪽 툴을 같이 쓰면 거의 매트랩 수준의 쉬운 프로그래밍이 가능할겁니다.

글이 길어졌네요. 일단 이만 적겠습니다.

익명 사용자의 이미지

뭔진 모르지만 겁나게 잼나고 유익한 내용이네요.

-영희-

익명 사용자의 이미지

흔히 N-body problem이라고 부르는 형태의 문제를 풀고자하는 문제인데 이경우 다음의 사항을 고려해서 클러스터를 만드세요.

1. CPU Performance : 당연히 floating point operation이 많을것이므로 P4가 좋겠죠?

2. Interconnection Network : 통상적으로 N-body problem의 경우 각 프로세스간의 communication time이 다른 형태의 문제보다 많은 시스템 자원을 요구하게 됩니다. 즉, 가능하면 네트웍 성능이 좋은 것을 요구하게 되지요. fast ethernet보다는 gigabit ethernet이 훨씬 좋은 성능을 보일것이고, myrinet이나 SCI등이 좋을 수도 있지만 항상 가격대 성능비를 고려해야 합니다.

3. Building Parallel Program : 현재 갖고 있는 프로그램이 sequential program일 경우 이를 병렬화하여 클러스터용으로 만드는것이 더 중요합니다. 특히 알고리즘의 특성과 풀고자하는 문제의 domain decomposition 등을 심각하게 고려해야합니다.

4. 클러스터관리 : 어차피 학교 랩의 경우 만든사람이 사용자이고 관리자이므로 관리에 가장 용이하게 만들 수 있읍니다. 하지만 최소한의 data partition 공유, 사용자 id 일치문제, MPI, PVM 세팅 등을 한사람이 처음부터 다해야합니다.

5. 이상의 과정을 거쳐서 클러스터를 만든다고 해도 최소한의 Benchmarking Test를 수행해서 정작 만들고자 하는 클러스터에서 원하는 성능이 나왔는지를 알아봐야합니다.

클러스터 혹은 병렬처리에 관한 논문은 분야별로 엄청나게 많으므로 가능하면 연구하고자 하는 분야에 대해서 관련내용을 survey하는 것이 필요하며 이를 바탕으로 님이 하고자하는 연구에 적합하도록 클러스터를 꾸며야합니다.

순서대로 자료를 찾아보세요(구글에서 검색하면 나옵니다)
1. Design & Building Parallel Program written by Ian Foster
2. PVM User Guide (Chapter 2까지만 보세요) written by Al Geist et al.
3. http://cluster.linuxone.co.kr 에 링크와 Benchmark 결과가 있읍니다.

험난한 길이 될까봐 걱정이군요.

김인수의 이미지

전산유체역학을 하는데용...
여기 실험실에서는 병렬처리를 하는데 리눅스 클러스터의 mpich를 사용하고 있습니다.
유동해석 프로그램은 우리가 코딩하고
코딩된 코드를 엠피아이버전으로 바꾸는 것이죠..
리눅스 클러스터는 업체에서 구입한 것으로 엠피아이 세팅도 업체에서 해 주었지요...
만약 클러스터를 새로 구입하신다면 업체를 통하는 것이 간편하죠...

그러니까 이런식으로 이루어집니다.

리눅스 클러스터를 만든다
하나-업체에서 모두 구입
둘=--리눅스박스만 사서 세팅한다.

병렬처리 프로그램을 깐다.
하나-엠피아이가 되는 프로그램을 산다.
둘---엠피아이가 되는 프로그램을 만든다.

병렬처리 프로그램을 돌린다.
하나-결과를 기다린다.
둘---코드가 깨져서 다시돌린다.
셋---네트워크가 나가서 다시돌린다.

결과를 포스트프로세싱한다.
하나-예쁘게 결과를 만든다.
둘---포스트프로세싱머신의 메모리가 모자라서 포기한다.

이렇게 진행하시면 됩니다.

클러스터는 아마도 구입하시는 것으로 하는게 편하시고-AS문제도 있고...잘 안해주긴 하지만 그래도...

엠피아이는 업체에서 깔아주면 좋고
공부해서까시려면 몇주 까먹는거고

엠피아이 프로그래밍은 몇달까먹으면 되더군요...

수고하세요...

익명 사용자의 이미지

저도 자세히는 잘 모르지만(아직 공부중) 얼마전에 turbo linux사이트에서 enFusion이라는 어플리케이션에 대한 글을 글을 읽었는데... 일반적인 프로그램언어로 작성된 프로그램들을 병렬로 실행시킬수 있는것으로 보입니다. 상용이지만..
그리고 그게, 리눅스,윈도우버전이 다 있던데요.. 용량을 한 2~3메가정도.클러스터링을 이용하는지 어떤지 아직 확실치는 않지만.. 아시는분 답변 좀 해주세요..

익명 사용자의 이미지

Enfusion은 Parallel Computing용이 아니라 Parametric Study를 효율적으로 하기위한 Distributed Computing 용 프로그램이라고 보시는 것이 좋습니다.
즉, 동일한 프로그램에 대해서 input data를 달리해서 수십번을 돌리거나 혹은 수십대의 기계에서 각각 한개씩을 프로그램을 자동으로 뿌려서 결과를 한쪽으로 모으기 위한 프로그램이라고 보시면 됩니다.

이럴경우 각각의 프로세스간에는 데이타교환이 없고 오로지 1개씩 100번을 실행해야하는 parametric study를 한곳에서 100개의 input data를 자동으로 뿌려서 100개를 한큐에 하는 것입니다.

글올리신 분이 하고자하는 nonlinear dynamics 용으로는 그다지 적합하지 않습니다.

익명 사용자의 이미지

리눅스를 병렬연결 하는데는 그리어렵지 않습니다.
병렬프로그램도 많이 나와있구요

님같은 시뮬레이션를 사용하는데는 MPI를 사용하는데
여기서 문제가 좀 발생합니다.

님이 현재사용하시는 시뮬레이션 프로그램소스를 MPI환경에
맞게 소스를 수정하고 각노드들에 프로세스가 연결이 잘되는지 모니터등등를 해야합니다(<-이작업이 노가다죠)
이부분이 문제가 많이 발생하지요.

그냥 크러스터링연결만 하는건 여기 kldp문서만 보아도
쉅게 하실수 있를겁니다.

lovehis의 이미지

클러스터 만드는 일은 그렇게 어려운 일은 아닐꺼라 생각 합니다.
하지만.. 진짜로 생각할 문제는....
과연 하시는 일에 클러스터가 적합한가... 라는 것입니다.

또한, 사용하실려는 응용범위에 맞는 클러스터용 어플리 케이션이 있나 입니다...

만약 없다면.. PVM이나 MPI등을 이용해서 직접 만드시거나,
(병렬 라이브러리를 사용하여서) 프로그램을 직접 하셔야 합니다.(뭐... 프로그램은 그렇게까지 어렵지는 않습니다.)

또한.. 연구실에 계신다면.... 클러스터를 놓아둘 장소도 생각하셔야 합니다...

클러스터라면... (물론 필수는 아니지만..) 렉에 담겨서 쉐프에 보관 하는게 정석이지만...그럴경우, 그게 보통 소음과 진동이 있는게 아님니다...
아마 그 옆에 계신 분들은... 공부하기가 쫌 힘들어요... ^^
렉에 보관을 안하신다면.. 관리하기가 쫌 힘들어요....

키보드 공유기랑 모니터 공유기를 설치해야 하고...(렉도 마찮가지지만..) 그 클러스터에서 나온 전원선, 랜선, 키보드 마우스... 4대만 넘어가도 끔찍 합니다..

암튼... 여러가지 생각하셔서... 확실히 선택하십시요...
클러스터는 사용하는 사람한테는 좋을지 몰라도.. 관리(H/W, S/W 둘다...)하는 사람은... 별로 권하고 싶지 않네요...

물론 잘하신다면... 계산시간은.. 엄청 줄어들수도 있지만...
--
늘...

익명 사용자의 이미지

I am really sorry for writing in English, but I can't help it right now.

Although I am not an expert, I am involved in a research group using Beowulf clusters.

Our group is using two clusters, each of which is composed of 75 linux boxes. Each box has dual Intel PenIII 750Mhz CPU's with 1Gb of RAM. We added a 20Gb hard disk to each box. The OS is RedHat 6.x (I don't remember exactly). Since I was just a manual laboror when we assembled the boxes, I don't know the exact specs of all the hardwares...-_-; However, I here introduce a few sites which the people who really made the clusters frequently visited. I am afraid you might have already visited them.

http://www.scyld.com
http://www.beowulf.org
http://www.beowulf-underground.org (you can find some "practical" information about building a cluster)
http://www.beowulf.org/pipermail/beowulf/ (the beowulf mailing list: usually people learn a lot from others' experience)

I hope you can find this helpful.

Good luck!

익명 사용자의 이미지

beowulf cluster 에 대한 문서들 보다는,
mpi 에대한 부분을 보시는것이 나을듯 보이네요.

http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg245380.html?Open

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.