컬럼

Google의 genomics API를 통해 살펴본 그들의 전략

hongiiv 2014. 4. 25. 11:03
반응형

Google의  genomics 관련 투자 현황

Google은 google ventures를 통해 다양한 분야에 투자를 하고 있다. 그중에서도  genomics 관련 분야는 다음과 같은 회사들로 요약된다.  지노타이핑에서 대용량 ngs분석과 암분석까지 현재까지 유전체에서 할 수 있는 일련의 라인업에 대해 투자를 하고 있다.
  • 23andMe:  개인유전체 검사를 해주며, 요즘은 FDA와의 문제로 ancestry 정보만을 제공하나 기본적으로 질병 관련정보 및 exome sequencing을 통한 리포트와 자체적인 쌓인 고객 데이터를 기반으로 다양한 연구를 수행하고 있다.
  • Foundation medicine:  foundation one이라는 암유전체 분석을 통한 맞춤형 항암제 정보를 의사에게 제공하고 있으며 나스닥에 상장되어 있는 회사
  • DNAnexus: 클라우드 컴퓨터를 기반으로 유전체 데이터를 분석할 수 있는 플랫폼을 제공하는 회사로 대규모 유전체 연구를 지원하고 있다.
  • Transcriptic: 클로닝, 마우스 지노타이핑, 바이오뱅킹 등의 서비스를 제공

 
구글이 genomics에 투자만 하고 있는 것일까? 그건 아니다. 구글도 자체적으로 genomics에 뛰어 들고 있는데 그것이 바로 오늘 살펴볼 내용이다.

Global Alliance for Genomics & Health

구글은 최근 아마존,  Appistry(GATK를 팔고 있는),  BGI, DNANexus, IBM, 히타치, 일루미나, 인텔, 뉴욕지놈센터 등등 25개국 177개의 회원사들이 가입한 Global Alliance for Genomics & Health에 가입했다. 여기서는 간단히 유전체 데이터와 health에 있어서 어떻게 데이터를 운용하고 규제에 대해 논의하는 곳으로 규제 및 윤리, 데이터, 보안, clinical의 4개의 워킹그룹으로 구성되어 있다.  이중 Data Working Grop은 개인의 유전체 데이터에 대한 컴퓨터 포맷과  이를 교환하고 사용하기 위한 API에 대한 총괄을 담당하고 있다.  우선은 BAM, CARM, VCF의 표준을 제공하기 위한 관리와 지원을 하고 있다. 최종적으로는 이들은 대규모의 유전체 데이터에 대한 데이터 모델, API와 이를 통해 유전체 데이터를 저장, 교환, 쿼리하고 분석을 제공하고자 하고 있다. 이그룹은 현재 sanger의 Richard Durbin이 이끌고 있다.

누구나 알고 있듯이 유전체 데이터는 Big Data이고 그 유용성 또한 인간의 건강에 직접적인 연관이 있는 중요한 데이터이기에 이러한 움직임은 당연한 것이고 다들 이것을 통해 한 몫 잡으려고 하고 있다.  그리고 이러한 움직임 없이는 genomics가 clinical에 적용되기 힘들다는 것 또한 분명하다. 뭐 그건 그렇고, 암튼 핵심은 유전체 데이터를 다루기 위한 플랫폼이 필요한 거고 거기에 google이 직접 뛰어 들었다는 것이다.

구글 너 뭐하니

구글이 그럼 뭐를 하고 있느냐 이것을 알기 전에 직접적으로 genomics 와는 관련없지만 구글이 뭐를 하고 있는지에 대해서 우선 알아보야 한다. 구글은 개발자들을 위한 다양한 서비스와 API를 제공하고 있다. 이러한 서비스는 Google Deveolpers Console에서 통합적으로 제공되고 있는데 이중 눈여겨 볼 서비스는 다음과 같다. 이들 서비스는 유기적으로 연결되어 있는데, 가령 Google Cloud Storage에 저장된 데이터를 Google Bigquery로 불러 들여 분석을 할 수 있도록 하는 것이다.
  • Google Cloud Storage: 아마존 AWS의 S3나 KT ucloud biz의 storage 서비스와 같은 object storage 서비스
  • Google Cloud SQL: 관계형 데이터베이스 서비스
  • Google Compute Engine: 아마존 AWS나 KT ucloud biz와 같은 public 클라우드 서비스
  • Google Bigquery: 수십억개의 행의 대규모 데이터셋에 대해서 손쉽게 대화형 분석을 할 수 있는 서비스
그렇다. 이제 감이 오나, 구글은 이미 Big Data를 관리할 수 있는 서비스들을 가지고 있으며 여기에 유전체 데이터도 하나 더 추가한 것이다. 그것이 바로 Google Genomics API이다.

Google Genomics API

아래 그림은 현재 내가 사용중인 구글의 서비스로 Genomics API는 현재 테스트 기간으로 신청을 해야만 사용이 가능하다. 물론 이서비스는 Google Cloud Storage를 데이터 저장소로 사용한다. 구글이 제공하는 다른 서비스와 마찬가지로 genomics API 또한 API query 기준으로 과금이 되는 형태이며, 당연히 저장소는 cloud storage의 과금 기준을 따른다.  아직은 과금이 이루어지지 않고 있지만,,, 테스트 기간인 현재 user별로 초당 10개의 쿼리가 가능하다.


Genomcis API 구조

Genomics API는 앞서 말했듯이 유전체 데이터 BAM, VCF를 지원하고 있으며, 이들을 저장하고 관리할 수 있는 API를 제공하고 있다. 우리가 일반적으로 NGS 데이터를 생산하는 경우  reference genome에 align된 genome의 짧은 단편인 read가 존재하고 이 read들은 모여 하나 또는 그이상의 샘플(bam)이 구성한다. 


  • Datasets: 유전체 데이터의 집합으로 Dataset은 여러 Readsets을 가질 수 있다.
  • Readsets: Read들이 집합이며 read들은 고유한 id와 reference에 align된 정보를 가지고 있다.
  • Read: genome 데이터를 구성하는 최소 단위
  • Variants: reference와 다른 부분을 표현하는 것으로 SNP, insertion 등이 있다.
  • Callsets: Variant의 집합으로 일반적으로 한 샘플의 모든 variants를 포함하며 dataset에 포함된다.
  • Jobsreads와 variants 등의 import, export와 같은 시간이 걸리는 작업에 대한 고유 id를 가진다.

API 활용 예제 - 특정 read 정보 찾기

API를 어떻게 사용하는지에 대해서 알아보기 전에 우선 저 API들이 어떻게 동작하고 그걸로 뭐하라는 건지에 대한 활용 사례부터 살펴보도록 하자. 다음은 google이 예제로 넣은 PGP 데이터로 특정 readset의 염색체20번의 68,198~69,000에 위치하는 모든  read에 대한 쿼리 결과이다. 


질의 결과는 JSON 형태로 제공되며 좀 더 보기 편하게 json formatter로 보면 다음과 같다.  해당 질의 결과로 해당 영역에 존재하는 read들은 총 256개가 검색되었으며, 각 read에 대한 read의 id, base, base quality, cigar,flags 등의 14개 정보를 보여준다. 


이렇게 간단히 API 호출만으로도 원격의 storage에 저장된 대용량의 유전체 데이터에 대한 빠른 검색이 가능하다. 이런 API를 이용하면 다음과 같은 GenomeBrowser를 손쉽게 사용자가 직접 만들 수 있게 된다. google genomics api를 사용하여 만든 GABrowser로 보고자 하는 readset(1000 Genomes project의 HG00096 샘플)을 선택하고 read가 align된 것을 눈으로 확인 가능하며, 각 read를 선택하면  read에 대한 정보가 좌측에 보여진다. 아래는 rs671을 검색한 화면이다.



Genomics API 활용

google은 그들의 Reserch Blog를 통해 자신들의 하나의 API를 통해 다양한 Apps를 만들 수 있는 상호운용성에 대해서 강조하고 있다.  기본적으로 Cloud와 Local의 저장소(repository)에 저장된 데이터는 API를 통해 위에서 살펴본 GenomeBrowser, Command-line interface, MapReduce wrapper 등의 다양한 app을 만들 수 있다. 분명 개발자의 입장에서는 손쉽게 다양한 app을 만들 수 있는 환경은 매력적이라고 할 수 있다. 그것도 아무런 하드웨어의 제약없이 말이다.  분명 이 분야가 발전하기 위해서는 연구자들이 데이터에 대한 접근이 어려워서는 안된다. 점점 시퀀싱 비용은 하락하고 데이터를 생산하는데에는 별 어려움이 없어진 반면 이러한 데이터를 다루기 위한 기반은 부족하며 구글과 같은 움직임은 분명 데이터 접근의 용이성으로 이 분야의 발전에 큰 도움을 줄 것이다.

Google Genomics는 구글의 클라우드 인프라 기반에서 DNA sequence reads, reference-based alignment, variant call을 API 레벨에서 제공하고 있다. 이러한 API를 이용하면 다음과 같은 작업들이 가능하다.

  • BAM 포맷의 align된 read를 빠르게 import
  • unaligned read들을 import하고 표준의 pipleine으로 처리
  • 샘플이나 특정 영역의 read 정보를 질의
  • BAM 포맷으로 reads 정보를 export


구글의 API는 github을 통해 배포되고 있으며, 위의 sample을 포함한 예제들을 포함하고 있다. 각각의 예제 프로그램들은 java와 python 등 다양한 언어로 제공되고 있다.
  • client-go: Go 프로그래밍 언어를 이용한 API call 예제
  • client-java: API 쿼리를 위한 command-line 기반의 인턴페이스
  • client-python: Python으로 작성된 웹 기반의 API 예제로  Google App Engine에 deploy해서 사용하며 위에서 언급한 GenomeBrowser 예제가 들어있다.
  • client-r: API의 query 결과를 R의 GAlignments로 변환해주는 R script
  • mapreduce-python: google app engine의 MapReudce Pthon을 이용하여 복잡한 계산을 하는 예제
  • protobufs: 구글의 데이터 interchange format인 protocol buffers로 유전체 데이터를 사용할 수 있도록 하는 예제
  • readstore-local-java: 로컬 BAM 파일을 읽어서 API를 로컬에서 사용가능하게 하는 예제

JDK 설치

Google이 API를 활용하기 위해 github에 넣어놓은 genomics-tools는 기본적으로 java 1.7 몇몇은 java 1.8을 필요로 하기때문에 java 홈페이지에 가서 jdk 1.8을 설치하고 설정하는게 필요하다. 맥을 사용하는 나로서는 우선 다음과 같이 해결했다. 
Oracle에 가서 Mac OS X x64 버전의 Java SE Development Kit 8을 다운로드
다운로드한 pkg 파일을 실행하여 JDK 8 버전을 설치
$ sudo rm /usr/bin/java
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java /usr/bin/java
$ sudo rm /Library/Java/Home
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home /Library/Java/Home
export JAVA_HOME=/Library/Java/Home
$ java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
$ javac -version

Maven 설치

$ brew install maven
$ mvn -version
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15T02:37:52+09:00)
Maven home: /usr/local/Cellar/maven/3.2.1/libexec
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
$ git clone https://github.com/GoogleCloudPlatform/genomics-tools.git
$ cd genomics-tools/client-java
$ mvn package
$ cd target
$ ls genomics-tools-client-java*jar
genomics-tools-client-java-v1beta.jar 
우선 다시 말하지만 google genomics api를 사용하기 위해서는 신청해야 하며, 신청이 수락된 후에는 credentials을 생성하여 아래와 같이 client_secret.json 파일을 생성해서 실행하여야 한다.
java -jar genomics-tools-client-java-v1beta.jar searchreads --client_secrets_filename ~/Documents/client_secret.json --sequence_name "chr20" --sequence_start 68198 --sequence_end 69000 --readset_ids "CJ_ppJ-WCxDxrtDr5fGIhBA"

정리

Google은 빅데이터를 위한 storage에서 검색까지 다양한 서비스가 이미 존재했고 이제는 genomics에 관한 데이터까지 손을 뻗었다. 이제 유전체 연구자들은 굳이 유전체 데이터의 저장/관리에 신경 쓸 필요없이 구글에 업로드만 하면 구글은 안전한 데이터 저장에서 부터 데이터 핸들링을 위한 API를 제공함으로써 자연스럽게 데이터를 그들의 틀안에 가두어 둘 수 있게 되었다.

GenomeCloud API??

그러나 여기가 다인가  KT 또한 구글이 내놓은 서비스와 99% 유사한 컨셉을 통해 GenomeCloud라는 서비스가 만들어져 있다. 내부적으로 GenomeCloud 서비스를 위해 사용할뿐 API를 제공하지 않을뿐이다. GenomeCloud도 Object Storage에 데이터만 넣으면 다양한 쿼리/관리가 가능한 구조로 되어 있다. 일례로 사용자는 원격에서 IGV를 통해 자신의 데이터에 접근이 가능하다. 아래와 같이 GenomeCloud에서 배포하는 IGV를 실행하면 GenomeCloud라는 메뉴가 있어 로그인하면 아래와 같은 팝업창이 뜬다. Read, Sample, Analysis는 각각 fastq, bam,vcf파일이며 이들은 object storage에 저장되어 있으며 google genomics api와 유사한 구조의 api를 통해 호출된다.



아래는 g-Storage라는 서비스로 genome data를 저장/관리/공유하는 서비스로 아래와 같이 fastq 파일에 바로 access하여 미리보기 기능 또한 제공한다. 


문제는 GenomeCloud와 같은 서비스를 구글의 genomics api를 이용하면 손쉽게 아무나? 만들 수 있게 된다는 것이다. 젠장 어쩌지?? ㅅ
반응형