2013.06.27

빅 데이터 성능 높이는 막강 조합 ··· '하둡+GPU' 아키텍처 집중해부

빅 데이터 성능을 높이는 최강 조합 ··· '하둡+GPU' 아키텍처 집중해부 | Network World

분산형 컴퓨팅을 가능하게 하는 오픈 소스 프레임워크인 하둡(Hadoop)은 빅 데이터 처리 방식을 완전히 새롭게 바꿔어 놓았다. 하둡을 이용한 병렬 처리를 통해 성능을 몇 배나 향상시킬 수 있다.

그렇다면 이보다 더 빠른 처리도 가능할까? 만약 CPU에서의 연산 작업을 복잡한 3D와 수학 작업을 위해 설계한 GPU(Graphic Processing Unit)로 이전하면 어떨까? 이론적으로 프로세스가 병렬 컴퓨팅에 최적화되어 있는 경우 GPU는 CPU보다 50~100배 빠르게 연산을 수행한다.

알토로스 시스템즈(Altoros Systems)의 R&D 팀은 빅 데이터용 PaaS(platform-as-a-service)를 지원하고 대규모 시스템에서 무엇이 가능하며 무엇을 시도해 볼 수 있는지를 직접 검토했다.

사실 아이디어 자체는 전혀 새로울 것이 없다. 수 년 동안 과학 프로젝트들은 하둡 또는 맵리듀스(MapReduce) 관련 작업을 GPU로 처리하기 위해 노력해 왔다. 마스(Mars)는 최초로 그래픽 프로세서를 위한 맵리듀스 프레임워크 개발에 성공했다. 해당 프로젝트에서는 웹 데이터(검색/로그)를 분석하고 (행렬 곱셈을 포함해) 웹 문서를 처리할 때 성능을 1.5~1.6x 높일 수 있었다.

마스의 성과를 토대로 다른 연구기관에서 데이터 집중형 시스템의 처리 속도를 높이기 위해 유사한 툴을 개발했다. 분자 동력학, (몬테 카를로(Monte Carlo) 방식 등의) 수학적 모형, 블록 기반의 행렬 곱셈, 재무분석, 이미지 처리 등이 대표적이다.

이 중에서 가장 주목받고 있는 것 중 하나가 그리드 컴퓨팅용 미들웨어 시스템인 BOINC(Berkeley Open Infrastructure for Network Computing)이다. 하둡을 사용하는 것은 아니지만 이미 많은 과학 프로젝트에 사용되고 있다. 예를 들어 GPUGRID는 건강 및 질병에 있어서 단백질의 기능을 이해하는데 필요한 분사 시뮬레이션을 수행하기 위해 BOINC의 GPU 및 분산형 컴퓨팅을 사용하고 있다. 이밖에 약학, 물리학, 수학, 생물학 등과 관련된 대부분의 BOINC 프로젝트도 '하둡 + GPU' 형태로 수행할 수 있다.

따라서 GPU를 이용한 병렬 컴퓨팅 성능을 높이려는 시도는 꾸준히 존재한다. 기업들은 GPU가 탑재된 슈퍼컴퓨터에 투자하거나 자체 솔루션을 개발하고 있다. 크레이(Cray) 등의 하드웨어 업체들은 GPU와 하둡을 미리 탑재한 제품을 선보이기도 했다. 아마존 역시 GPU가 탑재된 자사 클라우드 서버에서 하둡을 가능하게 하는 엘라스틱 맵리듀스(Elastic MapReduce, 아마존 EMR)를 출시했다.

하지만 하둡 + GPU 조합으로 모든 것을 해결할 수 있을까? 수퍼컴퓨터는 가장 강력한 성능을 제공하지만 수백만 달러의 비용이 든다. 아마존 EMR은 수 개월 동안 진행되는 프로젝트에만 적합하다. 2~3년 정도의 대형 과학 프로젝트의 경우 자체 하드웨어를 구입하는 것이 더 비용 효율적일 수 있다.

그렇다면 하둡 클러스터 내에서 GPU를 사용해 연산 속도를 높인다고 해도 데이터 전송과 관련된 성능의 병목현상은 어떻게 해결할까? 이 부분을 더 자세히 살펴보자.

원리
데이터 처리란 HDD, DRAM, CPU, GPU 사이의 데이터 교환을 의미한다. <그림 1>은 상용 머신이 CPU와 GPU를 이용한 연산을 수행할 때 데이터가 어떻게 전송되는지 보여준다.

<그림 1> CPU와 GPU를 이용한 연산 수행시 데이터 흐름


각 단계를 보면 화살표 A는 HDD에서 DRAM으로 데이터 전송하는 것으로 CPU와 GPU 컴퓨팅을 위한 보편적인 최초 단계다. 화살표 B는 CPU를 이용한 데이터 처리로 데이터가 DRAM, 칩셋, CPU 단계로 이동한다. 화살표 C는 GPU를 이용한 데이터 처리 단계로 데이터가 DRAM → 칩셋 → CPU → 칩셋 → GPU → GDRAM → GPU 순으로 이동한다.

결과적으로 이 모든 작업을 완료하기 위해 필요한 총 시간은 다음과 같다.

- CPU 또는 GPU가 연산을 수행하는데 필요한 시간
- 그리고 모든 구성요소들 사이의 데이터 전송에 소요된 시간


톰스 하드웨어(Tom's Hardware, CPU 차트 2012)에 따르면 평균적인 CPU의 성능은 15~130GFLOPS 정도다. 엔비디아의 GPU 성능은 100~3,000+ GFLOPS이다. 이런 측정치는 모두 개략적인 것으로 실제 성능은 작업 유형과 알고리즘에 따라 천차만별이다.

어쨌든 경우에 따라서는 GPU가 노드당 5~25배 정도 연산 속도를 증가시킬 수 있다. 어떤 개발자들은 클러스터가 여러 개의 노드로 구성된 경우 성능을 50~200배까지 높일 수 있다고 말한다. 실제로 MITHRA 프로젝트 개발자들은 성능을 254배나 끌어올리는데 성공했다.




2013.06.27

빅 데이터 성능 높이는 막강 조합 ··· '하둡+GPU' 아키텍처 집중해부

빅 데이터 성능을 높이는 최강 조합 ··· '하둡+GPU' 아키텍처 집중해부 | Network World

분산형 컴퓨팅을 가능하게 하는 오픈 소스 프레임워크인 하둡(Hadoop)은 빅 데이터 처리 방식을 완전히 새롭게 바꿔어 놓았다. 하둡을 이용한 병렬 처리를 통해 성능을 몇 배나 향상시킬 수 있다.

그렇다면 이보다 더 빠른 처리도 가능할까? 만약 CPU에서의 연산 작업을 복잡한 3D와 수학 작업을 위해 설계한 GPU(Graphic Processing Unit)로 이전하면 어떨까? 이론적으로 프로세스가 병렬 컴퓨팅에 최적화되어 있는 경우 GPU는 CPU보다 50~100배 빠르게 연산을 수행한다.

알토로스 시스템즈(Altoros Systems)의 R&D 팀은 빅 데이터용 PaaS(platform-as-a-service)를 지원하고 대규모 시스템에서 무엇이 가능하며 무엇을 시도해 볼 수 있는지를 직접 검토했다.

사실 아이디어 자체는 전혀 새로울 것이 없다. 수 년 동안 과학 프로젝트들은 하둡 또는 맵리듀스(MapReduce) 관련 작업을 GPU로 처리하기 위해 노력해 왔다. 마스(Mars)는 최초로 그래픽 프로세서를 위한 맵리듀스 프레임워크 개발에 성공했다. 해당 프로젝트에서는 웹 데이터(검색/로그)를 분석하고 (행렬 곱셈을 포함해) 웹 문서를 처리할 때 성능을 1.5~1.6x 높일 수 있었다.

마스의 성과를 토대로 다른 연구기관에서 데이터 집중형 시스템의 처리 속도를 높이기 위해 유사한 툴을 개발했다. 분자 동력학, (몬테 카를로(Monte Carlo) 방식 등의) 수학적 모형, 블록 기반의 행렬 곱셈, 재무분석, 이미지 처리 등이 대표적이다.

이 중에서 가장 주목받고 있는 것 중 하나가 그리드 컴퓨팅용 미들웨어 시스템인 BOINC(Berkeley Open Infrastructure for Network Computing)이다. 하둡을 사용하는 것은 아니지만 이미 많은 과학 프로젝트에 사용되고 있다. 예를 들어 GPUGRID는 건강 및 질병에 있어서 단백질의 기능을 이해하는데 필요한 분사 시뮬레이션을 수행하기 위해 BOINC의 GPU 및 분산형 컴퓨팅을 사용하고 있다. 이밖에 약학, 물리학, 수학, 생물학 등과 관련된 대부분의 BOINC 프로젝트도 '하둡 + GPU' 형태로 수행할 수 있다.

따라서 GPU를 이용한 병렬 컴퓨팅 성능을 높이려는 시도는 꾸준히 존재한다. 기업들은 GPU가 탑재된 슈퍼컴퓨터에 투자하거나 자체 솔루션을 개발하고 있다. 크레이(Cray) 등의 하드웨어 업체들은 GPU와 하둡을 미리 탑재한 제품을 선보이기도 했다. 아마존 역시 GPU가 탑재된 자사 클라우드 서버에서 하둡을 가능하게 하는 엘라스틱 맵리듀스(Elastic MapReduce, 아마존 EMR)를 출시했다.

하지만 하둡 + GPU 조합으로 모든 것을 해결할 수 있을까? 수퍼컴퓨터는 가장 강력한 성능을 제공하지만 수백만 달러의 비용이 든다. 아마존 EMR은 수 개월 동안 진행되는 프로젝트에만 적합하다. 2~3년 정도의 대형 과학 프로젝트의 경우 자체 하드웨어를 구입하는 것이 더 비용 효율적일 수 있다.

그렇다면 하둡 클러스터 내에서 GPU를 사용해 연산 속도를 높인다고 해도 데이터 전송과 관련된 성능의 병목현상은 어떻게 해결할까? 이 부분을 더 자세히 살펴보자.

원리
데이터 처리란 HDD, DRAM, CPU, GPU 사이의 데이터 교환을 의미한다. <그림 1>은 상용 머신이 CPU와 GPU를 이용한 연산을 수행할 때 데이터가 어떻게 전송되는지 보여준다.

<그림 1> CPU와 GPU를 이용한 연산 수행시 데이터 흐름


각 단계를 보면 화살표 A는 HDD에서 DRAM으로 데이터 전송하는 것으로 CPU와 GPU 컴퓨팅을 위한 보편적인 최초 단계다. 화살표 B는 CPU를 이용한 데이터 처리로 데이터가 DRAM, 칩셋, CPU 단계로 이동한다. 화살표 C는 GPU를 이용한 데이터 처리 단계로 데이터가 DRAM → 칩셋 → CPU → 칩셋 → GPU → GDRAM → GPU 순으로 이동한다.

결과적으로 이 모든 작업을 완료하기 위해 필요한 총 시간은 다음과 같다.

- CPU 또는 GPU가 연산을 수행하는데 필요한 시간
- 그리고 모든 구성요소들 사이의 데이터 전송에 소요된 시간


톰스 하드웨어(Tom's Hardware, CPU 차트 2012)에 따르면 평균적인 CPU의 성능은 15~130GFLOPS 정도다. 엔비디아의 GPU 성능은 100~3,000+ GFLOPS이다. 이런 측정치는 모두 개략적인 것으로 실제 성능은 작업 유형과 알고리즘에 따라 천차만별이다.

어쨌든 경우에 따라서는 GPU가 노드당 5~25배 정도 연산 속도를 증가시킬 수 있다. 어떤 개발자들은 클러스터가 여러 개의 노드로 구성된 경우 성능을 50~200배까지 높일 수 있다고 말한다. 실제로 MITHRA 프로젝트 개발자들은 성능을 254배나 끌어올리는데 성공했다.


X