「DeepVariant」はGoogle Brain と Verily Life Sciencesが開発したゲノム変異解析用のソフトウェアです。2016年には、ゲノム変異解析の精度を競う「PrecisionFDA Truth Challenge」で、現在デファクトスタンダードとなっている「GATK」などを抑えて「Highest SNP Performance賞」を受賞しました。「DeepVariant」は2017年12月4日にオープンソースとしてGitHub上にリリースされました。今回は、quick startに従って、Amazon EC2上で「DeepVariant」を実行してみます。
AWSコンソールから「サービス」->「EC2」->「インスタンス」->「インスタンスの作成」をクリックします。
Amazonマシンイメージには、「Ubuntu Server 18.04 LTS (HVM), SSD Volume Type – ami-0ac019f4fcb7cb7e6 (64 ビット x86)」、インスタンスタイプには「t2.micro」を選択しました。ストレージのサイズは8 GBで十分です。
まずは、dockerのインストールとイメージのダウンロードです。
- BIN_VERSION="0.7.2"
- MODEL_VERSION="0.7.2"
- MODEL_NAME="DeepVariant-inception_v3-${MODEL_VERSION}+data-wgs_standard"
- MODEL_HTTP_DIR="https://storage.googleapis.com/deepvariant/models/DeepVariant/${MODEL_VERSION}/${MODEL_NAME}"
- DATA_HTTP_DIR="https://storage.googleapis.com/deepvariant/quickstart-testdata"
- sudo apt -y update
- sudo apt-get -y install docker.io
- sudo docker pull gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}"
続いて、Modelファイルをダウンロードしていきます。
- mkdir -p ${MODEL_NAME}
- wget -P ${MODEL_NAME} ${MODEL_HTTP_DIR}/model.ckpt.data-00000-of-00001
- wget -P ${MODEL_NAME} ${MODEL_HTTP_DIR}/model.ckpt.index
- wget -P ${MODEL_NAME} ${MODEL_HTTP_DIR}/model.ckpt.meta
[MODEL_NAME]フォルダの中に3つのファイルがダウンロードされたかと思います。これらは、TensorFlowのcheckpointフォーマットに当たります。
- ls -1 "${MODEL_NAME}/"
- #model.ckpt.data-00000-of-00001
- #model.ckpt.index
- #model.ckpt.meta
次に、サンプルデータをダウンロードします。
- mkdir -p quickstart-testdata
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/NA12878_S1.chr20.10_10p1mb.bam
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/NA12878_S1.chr20.10_10p1mb.bam.bai
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.bed
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.vcf.gz
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.vcf.gz.tbi
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.fai
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz.fai
- wget -P quickstart-testdata "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz.gzi
quickstart-testdataフォルダの中に10つのファイルがダウンロードされました。
- ls -1 quickstart-testdata/
- NA12878_S1.chr20.10_10p1mb.bam
- NA12878_S1.chr20.10_10p1mb.bam.bai
- test_nist.b37_chr20_100kbp_at_10mb.bed
- test_nist.b37_chr20_100kbp_at_10mb.vcf.gz
- test_nist.b37_chr20_100kbp_at_10mb.vcf.gz.tbi
- ucsc.hg19.chr20.unittest.fasta
- ucsc.hg19.chr20.unittest.fasta.fai
- ucsc.hg19.chr20.unittest.fasta.gz
- ucsc.hg19.chr20.unittest.fasta.gz.fai
- ucsc.hg19.chr20.unittest.fasta.gz.gzi
NA12878_S1.chr20.10_10p1mb.bamは参照配列にマッピング済みのBAMファイル、ucsc.hg19.chr20.unittest.fastaは参照配列のFASTAファイル、test_nist.b37_chr20_100kbp_at_10mb.vcf.gzは評価用の正解データ、test_nist.b37_chr20_100kbp_at_10mb.bedは評価する領域を示したBEDファイルです。
それでは、実際に実行していきます。まず、結果出力用のフォルダ作成と環境変数の設定です。
- OUTPUT_DIR=${HOME}/quickstart-output
- mkdir -p "${OUTPUT_DIR}"
- REF=${HOME}/quickstart-testdata/ucsc.hg19.chr20.unittest.fasta
- BAM=${HOME}/quickstart-testdata/NA12878_S1.chr20.10_10p1mb.bam
- MODEL="${HOME}/${MODEL_NAME}/model.ckpt"
STEP1: make_examples
このステップでは、pileup(ゲノム座標ごとに塩基をカウントしたもの)を作成します。
- sudo docker run \
- -v ${HOME}:${HOME} \
- gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}" \
- /opt/deepvariant/bin/make_examples \
- --mode calling \
- --ref "${REF}" \
- --reads "${BAM}" \
- --regions "chr20:10,000,000-10,010,000" \
- --examples "${OUTPUT_DIR}/examples.tfrecord.gz"
2つファイルが作成されました。
- ls -1 quickstart-output/
- examples.tfrecord.gz
- examples.tfrecord.gz.run_info.pbtxt
STEP2: call_variants
このステップでは、実際に変異解析を実行します。
- sudo docker run \
- > -v ${HOME}:${HOME} \
- > gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}" \
- > /opt/deepvariant/bin/call_variants \
- > --outfile "${CALL_VARIANTS_OUTPUT}" \
- > --examples "${OUTPUT_DIR}/examples.tfrecord@${N_SHARDS}.gz" \
- > --checkpoint "${MODEL}"
- I0110 02:48:42.534190 140314581722880 call_variants.py:292] Set KMP_BLOCKTIME to 0
- Traceback (most recent call last):
- File "/tmp/Bazel.runfiles_hh_Ngv/runfiles/com_google_deepvariant/deepvariant/call_variants.py", line 411, in
tf.app.run() File "/root/.local/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 125, in run _sys.exit(main(argv)) File "/tmp/Bazel.runfiles_hh_Ngv/runfiles/com_google_deepvariant/deepvariant/call_variants.py", line 401, in main use_tpu=FLAGS.use_tpu, File "/tmp/Bazel.runfiles_hh_Ngv/runfiles/com_google_deepvariant/deepvariant/call_variants.py", line 295, in call_variants example_format = tf_utils.get_format_from_examples_path(examples_filename) File "/tmp/Bazel.runfiles_hh_Ngv/runfiles/com_google_deepvariant/deepvariant/tf_utils.py", line 177, in get_format_from_examples_path one_example = get_one_example_from_examples_path(source) File "/tmp/Bazel.runfiles_hh_Ngv/runfiles/com_google_deepvariant/deepvariant/tf_utils.py", line 156, in get_one_example_from_examples_path 'Cannot find matching files with the pattern "{}"'.format(source)) ValueError: Cannot find matching files with the pattern "/home/ubuntu/quickstart-output/examples.tfrecord@.gz"
何も考えずにコピペしたら、エラーになりました。–examples “${OUTPUT_DIR}/examples.tfrecord@${N_SHARDS}.gz”の部分が、並列で実行する場合になっていました。再度実行します。
- sudo docker run \
- -v ${HOME}:${HOME} \
- gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}" \
- /opt/deepvariant/bin/call_variants \
- --outfile "${CALL_VARIANTS_OUTPUT}" \
- --examples "${OUTPUT_DIR}/examples.tfrecord.gz" \
- --checkpoint "${MODEL}"
call_variants_output.tfrecord.gzが作成されました。
- ls -1 quickstart-output/
- call_variants_output.tfrecord.gz
- examples.tfrecord.gz
- examples.tfrecord.gz.run_info.pbtxt
STEP3: postprocess_variants
このステップでは変異検出結果をVCFファイルに変換します。
- FINAL_OUTPUT_VCF="${OUTPUT_DIR}/output.vcf.gz"
- sudo docker run \
- -v ${HOME}:${HOME} \
- gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}" \
- /opt/deepvariant/bin/postprocess_variants \
- --ref "${REF}" \
- --infile "${CALL_VARIANTS_OUTPUT}" \
- --outfile "${FINAL_OUTPUT_VCF}"
output.vcf.gzが作成されました。
- ls -1 quickstart-output/
- call_variants_output.tfrecord.gz
- examples.tfrecord.gz
- examples.tfrecord.gz.run_info.pbtxt
- output.vcf.gz
結果は以下のようなフォーマットになります。
- ##fileformat=VCFv4.2
- ##FILTER=
##FILTER= ##FILTER= ##INFO= ##FORMAT= ##FORMAT= ##FORMAT= ##FORMAT= ##FORMAT= ##FORMAT= ##FORMAT= ##contig= #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 chr20 10000117 . C T 41.9 PASS . GT:GQ:DP:AD:VAF:PL 0/1:41:55:25,30:0.545455:41,0,49 chr20 10000211 . C T 46 PASS . GT:GQ:DP:AD:VAF:PL 0/1:46:59:30,29:0.491525:45,0,60 chr20 10000439 . T G 47.4 PASS . GT:GQ:DP:AD:VAF:PL 1/1:42:72:0,72:1:47,43,0 chr20 10000598 . T A 47.6 PASS . GT:GQ:DP:AD:VAF:PL 1/1:43:46:0,46:1:47,45,0 chr20 10000694 . G A 39.3 PASS . GT:GQ:DP:AD:VAF:PL 0/1:39:48:26,22:0.458333:39,0,63 chr20 10000758 . T A 46.5 PASS . GT:GQ:DP:AD:VAF:PL 1/1:43:56:0,56:1:46,46,0 chr20 10001019 . T G 4.6 PASS . GT:GQ:DP:AD:VAF:PL 0/1:5:44:31,13:0.295455:2,0,34 chr20 10001298 . T A 48.7 PASS . GT:GQ:DP:AD:VAF:PL 1/1:42:43:0,43:1:48,43,0 ...
結果の評価
- sudo docker pull pkrusche/hap.py
- sudo docker run -it -v ${HOME}:${HOME} \
- pkrusche/hap.py /opt/hap.py/bin/hap.py \
- ${HOME}/quickstart-testdata/test_nist.b37_chr20_100kbp_at_10mb.vcf.gz \
- "${FINAL_OUTPUT_VCF}" \
- -f ${HOME}/quickstart-testdata/test_nist.b37_chr20_100kbp_at_10mb.bed \
- -r "${REF}" \
- -o "${OUTPUT_DIR}/happy.output" \
- --engine=vcfeval \
- -l chr20:10000000-10010000
良好な結果が得られました。
- Benchmarking Summary:
- Type Filter TRUTH.TOTAL TRUTH.TP TRUTH.FN QUERY.TOTAL QUERY.FP QUERY.UNK FP.gt METRIC.Recall METRIC.Precision METRIC.Frac_NA METRIC.F1_Score TRUTH.TOTAL.TiTv_ratio QUERY.TOTAL.TiTv_ratio TRUTH.TOTAL.het_hom_ratio QUERY.TOTAL.het_hom_ratio
- INDEL ALL 4 4 0 13 0 9 0 1 1 0.692308 1 NaN NaN 0.333333 1.000000
- INDEL PASS 4 4 0 13 0 9 0 1 1 0.692308 1 NaN NaN 0.333333 1.000000
- SNP ALL 44 44 0 60 0 16 0 1 1 0.266667 1 1.2 1.307692 0.333333 0.363636
- SNP PASS 44 44 0 60 0 16 0 1 1 0.266667 1 1.2 1.307692 0.333333 0.363636