빅데이터분석

NGS 데이터 분석을 위한 미들웨어 시스템 설계

hongiiv 2014. 2. 21. 10:33
반응형
무슨 논문제목 같기는 하네. 간단히 말해서 NGS Big Data 분석을 위해서 컴퓨터 hardware (Cluster, Cloud)와 software(BWA, GATK 등) 사이에서 이들을 효율적으로 연결시켜주는 것이 필요하다는 것이다. 지금까지 써왔던 Resource Managent를 위한 Job Scheduler인 OpenPBS, SGE, OGE (SLURM, Torqueue는 써보지 못했음) 를 사용하는데에 실제 데이터 분석을 하는데에 있어 컴퓨터 자원을 효율적으로 사용하지 못한다는 단점이 존재한다.

일반적으로 컴퓨터의 레벨 (levels of computing)은 Core, Machine, Cluster로 나뉘어진다. 하나의 Machine은 메모리를 공유하는 여러 Core가 존재하며 각 Machine들은 여러개 서로 묶여 Cluster를 구성한다. 요즘은 CPU내에 여러개의 Core개 존재하는 형태가 일반적이다. Parallelism(병렬화)란 이러한 각 레벨의 자원을 서로 어떻게 효율적으로 사용하는냐라는 문제를 다룬다. Core 레벨에서는 multi-threading, Machine 레벨의 클러스터에서는 scatter-gather (요즘 유행하는 Map/Reduce method)를 사용하게 된다.

병렬화는 여러 레벨의 자원을 다루기 때문에 이들을 손쉽게 관리하기 위한 Job Scheduler가 필요하며, 이러한 Job Scheduler의 임무중 하나는 Big Data 분석을 위해 구축된 infrasturcture를 사용을 최대화하는데에 있다. 흔히 Grid Engine이라고도 불리는 Job Scheduler는 분석을 위한 일정한 단위의 job을 할당 받아 해당 job을 수행하게 된다.

예를 들어 4단계로 구성된 job이(NGS의 경우 mapping, calling, annotation, merge) 있다고 하자. 1단계를 위해서는 3개의 worker(Core)가 필요하고, 2단계에는 2개, 3단계에서는 3개가 필요하며, 마지막 4단계에서는 1개가 필요하다. 여기서 각 단계는 이전 단계가 모두 finish되어야 다음 단계에 진입할 수 있다. 당신은 총8개의 노드(1 core/8 machine, 4 core/2machine 등등 구성은 다양할 수 있다)가 있다고 한다면 job을 끝내기 위해서 자원을 어떻게 활용하는지 한번 살펴 보도록 하자.


총 12라는 시간동안 4단계로 이루어진 1개의 complete job을 6개를 수행했고 이때 idle 상태로 42가 존재한다. 즉 총 96 unit(12x8)중 50%가 idle이며 총 working amount는 6된다. NGS로 이야기 한다면 총 12시간 동안 6개의 샘플이 분석 완료 된 것이다. 이것이 현재 NGS Big Data 분석시 job scheduler가 동작하는 방식이다.

이제 아래 그림처럼 일하는 방식의 smart/intelligent하게 변경해서 각 job들이 다음 단계에 빈 node를 찾아서 들어가게 되면 9시간내에 6개의 샘플을 분석 완료 할 수 있다. 뿐만 아니라 위와 같이 12시간 동안 일을 하게 된다면 기존 6샘플 보다 2개 더 많은 8 샘플을 분석 가능하게 되며, 시간이 흘러 가면 갈수록 분석할 수 있는 샘플 수는 늘어나게 된다.



이번에는 약간 주제를 바꾸어 보도록 하겠다. 그러면 어떻게 NGS 데이터를 분석시에 어떻게 parallism을 구성하는냐이다. 기본적으로 S/W상에서 multi-thread를 지원하도록 하는 방법과 Map/Reduce 방식(human의 경우 chromosome이 23개 이므로 23으로 scatter하고 1개의 결과로 gather하기에 너무 좋다. Map/Reduce가 어떻게 데이터를 나눌지에 대한 답이 bed파일에 명시되어 있지 않은가!!)을 사용하는 것이다.

예를 들어 bwa와 같은 경우 reference에 fastq를 split하여 map/reduce를 구현하면 된다. snp calling의 경우도 염색체별로 또는 exome의 경우 bed파일을 적당히 나누어 map/reduce를 구현하면 된다. 즉 일반적인 job을 제출하면 중간에 wrapper가 어떠한 방식으로 유전체 데이터를 split할 지를 정의하고 단순히 foreach를 통해 job을 split하여 처리하고 이를 merge하면 된다.

지금까지 2가지 방법에 대해서 NGS 데이터 분석하는데에 자원을 효율적으로 사용할 수 있는 방법에 대해서 살펴봤다. 이러한 미들웨어가 구축되어 한정된 자원을 효율적으로 사용할 수 있도록 하는 것이 이제 절실히 필요한 시점이다.

참고문헌
Ayrris Intelligent Scheduling: Getting the Most from Your Infrastructurehttp://bit.ly/MGjLdI
Extending the Galaxy protal with parallel and distributed execution capability http://bit.ly/1cw7ke1
A primer on parallelism with the GATK http://bit.ly/1mxozCc
반응형