2019 4/25 誤字修正
効果的なバイオインフォマティクス分析のための適切なプラットフォームを設定することは困難な場合がある。標準のソフトウェアパッケージをインストールするために必要な依存関係とバージョン要件を決定することは、分析を始める前の障壁である。バイオインフォマティクスツールをインストールするには、まず依存関係をインストールする必要がある。依存関係自体にも依存関係がある。再現可能なデータ分析を促進するには、インストールが簡単なソフトウェアが不可欠である(Leprevost et al、2014)。 Dockerは、複雑なパイプラインとワークフローを含むコンピューティング環境を構成し、それを複数のプラットフォームに分散する機能を提供する(Menegidio et al、2017)。最近のいくつかのプロジェクトは、研究のためのバイオインフォマティクスコンテナ環境を提供している。たとえば、BioContainersはBioCondaリポジトリからバイオインフォマティクスソフトウェアへのアクセスを提供し(Grüninget al、2018)、各ソフトウェアパッケージ(Leprevost)のために隔離されたDockerコンテナを作成している。
BioBoxesも同様の目的を果たす(Belmann et al、2015)。ただし、複数の分離されたコンテナを1つの分析パイプラインに結合することは初心者にとっては難しい場合があり、コンテナやデータ分析パイプラインツールにまだ精通していない初心者には適していない。目標がバイオインフォマティクスを教えることである場合、最初にコンテナを教える必要があるのは望ましくない。このような状況では、単一のコンテナにすべての必要なソフトウェアを提供する包括的なコンテナが適している。 BioLinux(http:// environmentomics.org/bio-linux/)は、物理的なUSBフラッシュドライブまたはDVDにインストールできる包括的なディスクイメージを提供し、関連プロジェクトのCloud BioLinux(Krampis et al。、2012)はクラウドコンピューティングサービスで使用するためのAmazonマシンイメージを提供している。 ORCA、Genomics Research Container Architectureは、Dockerイメージで教育や研究のための包括的なバイオインフォマティクスコマンドラインコンピューティング環境を提供する。これには、何百もの一般的なバイオインフォマティクスツールとその依存関係が含まれている。
教育現場では、ORCAはDockerを使用してプライベートなコンテナ環境を提供するが、ユーザーがDockerと直接対話する必要はない。ユーザーは、セキュアなシェルユーティリティsshを使用してORCAサーバーにログインする。ユーザーのログインシェルは、ユーザーに対して透過的に、プライベートコンテナ内でインタラクティブシェルを実行するように設定されている。この構成では、ユーザーは自分でDockerを実行したり対話したりすることはない。ユーザーがログアウトしても、コンテナおよびコンテナ内のユーザーのプロセスは実行されたままなので、ユーザーは後でその同じコンテナに戻ってジョブのステータスと結果を確認できる。データは、ユーティリティscp、sftp、またはrsyncのいずれかを使用してコンテナとの間で転送される。 Integrative Genomics Viewer(IGV)などのグラフィカルアプリケーションは、sshを介してX11プロトコルをトンネリングすることによって使用できる。マルチユーザーサーバーでのORCAの設定については、ORCAのドキュメント(https://github.com/bcgsc/orca#readme)に記載されている。ログインシェルスクリプトを使用して、各ユーザーに個々のコンテナ内にシェルを表示する。個々の設定では、Dockerをインストールし、次にdockerコマンド
$ docker run -it -v HOME:$HOME -w $HOME bcgsc/orca
を実行してORCAをユーザーのワークステーションまたはラップトップにインストールできる。ORCAイメージに含まれるすべてのソフトウェアへのアクセスを提供し、ユーザーのホームディレクトリをマウントしてデータを保存する。 Dockerイメージは、必要に応じてクラウドコンピューティングで使用できるが、ORCAはインストールまたはクラウドコンピューティングに物理メディアを必要としない。
ORCAコンテナイメージの構築は自動化されており、アーキテクチャの概要は論文図1に示されている。コンテナイメージを構築するためのDockerfileスクリプトはGitHubに格納されている。継続的インテグレーションサービスTravisCIは、GitHubへのコミットのたびに、Dockerfileの一般的な間違いや落とし穴を分析するために使用される。コンテナイメージは、Docker Hubの自動ビルド機能を使用して、GitHubに格納されているDockerfileからDocker Hubによってビルドされる。 GitHubで新しいリリースのORCAにタグを付けると、新しいDockerイメージが構築され、テストされ、Docker Hubでタグ付けされる。 ORCAイメージの安定版にはそれぞれバージョン番号が割り当てられているので、ユーザーは以前のバージョンのORCAをDocker Hubから取得して以前の分析を繰り返すことができる。 ORCAイメージの作成およびテスト手順を自動化することで、半日で新しいイメージを展開することができ、Dockerイメージ作成の再現性が保証される。 Dockerイメージは大きいが(17 GB)、1レーンのDNAシーケンスデータ(50 GB以上)より小さい。
ORCAとともに配布されるソフトウェアパッケージの大部分は、Homebrew(https://brew.sh)パッケージマネージャを使用してインストールされる。 Homebrewは、Linux用のWindows Subsystemを使用して、Linux、macOS、またはWindows上のユーザーのホームディレクトリにソフトウェアをインストールでき、管理者権限を必要としない(Jackman and Birol、2016)。 Homebrewは多くのパッケージ用にプリコンパイルされたバイナリを提供する。これはソースから各ツールを構築する必要性を軽減する。バイナリパッケージはCircleCI上に構築され、各ツールが更新されるたびにBintrayに保存される。イメージがビルドされるときに各パッケージがソースからビルドされると、ORCA Dockerイメージのビルドには何日もかかる。
Homebrewで利用可能なバイオインフォマティクスパッケージはORCAにプレインストールされている。ユーザーは、ORCAにデフォルトで含まれていない他のパッケージをインストールすることができる。 Debianパッケージ管理ツールapt-getとPerl(cpan)、Python(pip)そしてRのための言語特有のパッケージ管理システムが追加のソフトウェアパッケージをインストールするために使われるかもしれない。興味を持った熱心なユーザーは、Brewsci/bio(https://github.com/ brewsci / homebrew-bio)に新しいバイオインフォマティクスツールや既存のツールの新しいバージョンを寄付することができる。これはLinuxとmacOSの両方のためのバイナリパッケージを構築する。これらの貢献したツールはORCAの次のリリースに含まれる予定である。
The architecture of ORCA. 論文より転載。
ORCA
genOmics Research Container Architecture
http://www.bcgsc.ca/services/orca
Dockerfileの他にSingularityのレシピも用意されています。
現在導入されているツールのstatus一覧
600以上ある !
リストについてはこちらも参照
https://github.com/bcgsc/orca/blob/master/versions.tsv
使い方
ローカルマシンにpullして使う流れを簡単に紹介する。
A、macを使っている場合
dockerさえインストールしておけば使える。macへのdockerの導入はこちらを参考にしてください。
1、ターミナル(コンソール)を起動し、これから扱うデータがある作業ディレクトリ、またはデータをサブディレクトリとして含むデータのルートディレクトリ(データの一番上の階層)に移動する。
2、コンテナイメージをランする。
#このrunコマンドを打つと、localになければダウンロードしてから立ち上がる。10GBくらいあるので注意する。
#ホストの現在位置をorcaの$HOMEにマウントしてコンテナを立ち上げる。
docker run --rm -it -v$PWD:$HOME -w$HOME bcgsc/orca
#またはホストの$HOMEをorcaの$HOMEにマウントしてコンテナを立ち上げる(*1)
docker run --rm -it -v$HOME:$HOME -w$HOME bcgsc/orca
#またはホスト側からジョブを投げる。ちょっとだけ使うならこれが便利
#samtoolsを使ってbamをsamに変換する。
docker run --rm -it -v$PWD:$HOME -w$HOME bcgsc/orca samtools view -h -@ 8 mapped.bam > mapped.bam
root権限がないなら、上のコマンドの先頭部分はsudo dockerに変更(もちろんpasswordが必要)。-w $HOMEでワーキングディレクトリ(login後のパス)を指定している。-wでカレントを指定しているので、外からジョブを投げる場合も、現在のパスにファイルがあるならフルパスでファイル指定していなくても動作する。exit後にコンテナを消すため"--rm"もつけている。
3、すぐに立ち上がるのであとは使うだけ。説明は以上になる。
もう少しだけ説明しておく。
PATHの通ったディレクトリを確認してみる。
> echo $PATH
$ echo $PATH
/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- /home/linuxbrew/.linuxbrew/bin/
- /home/linuxbrew/.linuxbrew/sbin/
- /usr/local/sbin/
- /usr/local/bin/
- /usr/sbin/
- /usr/bin/
- /sbin/
- /bin/
になる。Dockerfileに記述されている通り、docker build時にlinuxbrewで自動インストールしてイメージが作られている。よって/home/linuxbrew/.linuxbrew/bin/にツールのバイナリはあるはず。/home/linuxbrew/.linuxbrew/bin/を確認する。
> ls /home/linuxbrew/.linuxbrew/bin/
$ ls /home/linuxbrew/.linuxbrew/bin/
2to3-3.7 cmake gmap_uncompress multigem sff-dump.2.9.2
ABYSS cmalign gmapindex multiruby sga
ABYSS-P cmbuild gmapl multiruby_setup sga-align
ALE cmcalibrate gmapl.sse42 mummer sga-asqg2dot.pl
AMOScmp cmconvert gmapper mummerplot sga-astat.py
AMOScmp-shortReads cmemit gmapper-cs muscle sga-bam2de.pl
AMOScmp-shortReads-alignmentTrimmed cmetindex gmapper-ls mutDiff sga-beetl-index.pl
以下略
多すぎるので省略したが、/home/linuxbrew/.linuxbrew/bin/にインフォマィクスツール(バイナリ等)が収納されている。
B、windowsを使っている場合
方法は複数存在します。windows10 ProならHyper-Vを有効にしてDocker for windowsを入れれば良いと思いますが、windowsにおけるlinuxコマンドの扱いはまだ流動的で、今後も変更される可能性があり不正確なことは書けないので、ここでは導入手順は省略します。Qiitaなどで最新の情報を確認してください(*2) 。
#c:/Usersを/dataにマウントして立ち上げる
docker run --rm -itv c:/Users:/data bcgsc/orca
windowsでもちゃんと使えます。linuxとdual bootしたり、いきなりクラウドで次世代解析するのはしんどいという方は試してみてはいかがでしょうか?
memo
samtoolsを使ってみる。
> samtools
$ samtools
Program: samtools (Tools for alignments in the SAM format)
Version: 1.9 (using htslib 1.9)
Usage: samtools <command> [options]
以下略
2019年4月現在v1.9が入っている。
パスを確認する。
$ which samtools
/home/linuxbrew/.linuxbrew/bin/samtools
linuxbrew@2a9b84e428e1:/Us
先ほどの/home/linuxbrew/.linuxbrew/bin/になっている。
いくつかツールを見てみる。
>fastqc -v
$ fastqc -v
FastQC v0.11.7
> fastp -v
$ fastp -v
fastp 0.19.3
> blastn
$ blastn
BLAST query/options error: Either a BLAST database or subject sequence(s) must be specified
Please refer to the BLAST+ user manual.
> blat
$ blat
blat - Standalone BLAT v. 36 fast sequence search command line tool
usage:
> nucmer -v
$ nucmer -v
nucmer
NUCmer (NUCleotide MUMmer) version 3.1
> lastal -V
$ lastal -V
lastal 926
> bamtools
$ bamtools
usage: bamtools [--help] COMMAND [ARGS]
以下略
> gtf2bed
$ gtf2bed
Error: No input is specified; please redirect or pipe in formatted data
convert2bed
> sambamba
$ sambamba
sambamba 0.6.6
Usage: sambamba [command] [args...]
以下略
> bwa
$ bwa
Program: bwa (alignment via Burrows-Wheeler transformation)
Version: 0.7.17-r1188
以下略
> vcftools
$ vcftools
VCFtools (0.1.16)
以下略
> bedtools
$ bedtools
bedtools is a powerful toolset for genome arithmetic.
Version: v2.27.1
以下略
> bcftools -v
$ bcftools -v
bcftools 1.9
Using htslib 1.9
Copyright (C) 2018 Genome Research Ltd.
以下略
> minimap2
$ minimap2
Usage: minimap2 [options] <target.fa>|<target.idx> [query.fa] [...]
Options:
以下略
> bbmap.sh --version
$ bbmap.sh --version
java -Djava.library.path=/home/linuxbrew/.linuxbrew/Cellar/bbtools/37.77/jni/ -ea -Xmx35786m -cp /home/linuxbrew/.linuxbrew/Cellar/bbtools/37.77/current/ align2.BBMap build=1 overwrite=true fastareadlen=500 --version
BBMap version 37.77
以下略
> gatk
$ gatk
Usage template for all tools (uses --spark-runner LOCAL when used with a Spark tool)
以下略
> snpEff -version
$ snpEff -version
SnpEff 4.3t 2017-11-24
> lumpy
$ lumpy
Program: ********** (v 0.2.13)
Author: Ryan Layer (rl6sf@virginia.edu)
Summary: Find structural variations in various signals.
以下略
> delly
$ delly
**********************************************************************
Program: Delly
以下略
> fermi2
Program: fermi2
Version: r178
Contact: http://hengli.uservoice.com/
以下略
> supermatcher
$ supermatcher
Calculate approximate local pair-wise alignments of larger sequences
Input
> abyss-pe -h
$ abyss-pe -h
Usage: make [options] [target] ...
Options:
-b, -m Ignored for compatibility.
以下略
> SOAPdenovo-63mer
$ SOAPdenovo-63mer
Version 2.04: released on July 13th, 2012
Compile Jul 29 2016 22:54:45
以下略
> spades.py -v
$ spades.py -v
SPAdes v3.12.0
lin
> a5_pipeline.pl
$ a5_pipeline.pl
A5-miseq version 20160825
Usage: a5_pipeline.pl [--begin=1-5] [--end=1-5] [--preprocessed] [--threads=4] [--debug] [--metagenome] <lib_file> <out_base>
以下略
> flye --version
r$ flye --version
2.3.5-release
以下略
> canu --version
$ canu --version
Canu 1.7.1
以下略
> quast
$ quast
QUAST: Quality Assessment Tool for Genome Assemblies
Version: 5.0.0, de6973bb
以下略
> vt
$ vt
Help page on http://statgen.sph.umich.edu/wiki/Vt
Useful tools:
以下略
> freebayes
$ freebayes
usage: freebayes -f [REFERENCE] [OPTIONS] [BAM FILES] >[OUTPUT]
Bayesian haplotype-based polymorphism discovery.
> varscan -h
$ varscan -h
Command not recognized
VarScan v2.4.3
以下略
> nanopolish
$ nanopolish
error: no command provided
usage: nanopolish [command] [options]
以下略
> pilon
$ pilon
Pilon version 1.22 Wed Mar 15 16:38:30 2017 -0400
Usage: pilon --genome genome.fasta [--frags frags.bam] [--jumps jumps.bam] [--unpaired unpaired.bam]
以下略
> jellyfish --version
$ jellyfish --version
jellyfish 2.2.10
> kmc
$ kmc
K-Mer Counter (KMC) ver. 3.1.0 (2018-05-10)
Usage:
以下略
> ntcard --version
$ ntcard --version
ntcard Version 1.0.0
Written by Hamid Mohamadi.
> kmergenie
$ kmergenie
KmerGenie
Usage:
kmergenie <read_file> [options]
以下略
> bowtie2 --version
r$ bowtie2 --version
/home/linuxbrew/.linuxbrew/bin/../Cellar/bowtie2/2.3.4.2/bin/bowtie2-align-s version 2.3.4.2
64-bit
以下略
> hisat2 --version
$ hisat2 --version
/home/linuxbrew/.linuxbrew/bin/../Cellar/hisat2/2.1.0/bin/hisat2-align-s version 2.1.0
64-bit
Built on c15103119586
以下略
> kallisto version
$ kallisto version
kallisto, version 0.44.0
> salmon
$ salmon
Salmon v0.9.1
Usage: salmon -h|--help or
以下略
> tophat -v
$ tophat -v
TopHat v2.1.1
> oases
$ oases
oases - De novo transcriptome assembler for the Velvet package
Version 0.2.08
> metaphlan -v
$ metaphlan -v
MetaPhlAn version 1.7.7 (27 January 2014)
> fasterq-dump
$ fasterq-dump
Usage:
fasterq-dump <path> [options]
以下略
> cd-hit
$ cd-hit
====== CD-HIT version 4.7 (built on Apr 19 2018) ======
> busco -v
$ busco -v
BUSCO 3.0.2
> barrnap --version
$ barrnap --version
barrnap 0.9
> tRNAscan-SE
$ tRNAscan-SE
tRNAscan-SE 1.3.1 (January 2012)
> abricate
$ abricate
SYNOPSIS
Find and collate amplicons in assembled contigs
以下略
> rnammer -v
$ rnammer -v
This rnammer 1.2, running from '/home/linuxbrew/.linuxbrew/opt/rnammer'
> hmmscan
$ hmmscan
Incorrect number of command line arguments.
Usage: hmmscan [-options] <hmmdb> <seqfile>
以下略
> TransDecoder.LongOrfs -v
$ TransDecoder.LongOrfs -v
########################################################################################
# ______ ___ __
# /_ __/______ ____ ___ / _ \___ _______ ___/ /__ ____
# / / / __/ _ `/ _\(_-</ // / -_) __/ _ \/ _ / -_) __/
# /_/ /_/ \_,_/_//_/___/____/\__/\__/\___/\_,_/\__/_/ .LongOrfs
#
########################################################################################
#
以下略
> prokka -v
$ prokka -v
prokka 1.13
> augustus
$ augustus
AUGUSTUS (3.3.1) is a gene prediction tool
written by M. Stanke, O. Keller, S. König, L. Gerischer and L. Romoth.
以下略
> art_illumina
$ art_illumina
====================ART====================
ART_Illumina (2008-2016)
Q Version 2.5.8 (June 6, 2016)
Contact: Weichun Huang <whduke@gmail.com>
-------------------------------------------
以下略
> wgsim
$ wgsim
Program: wgsim (short read simulator)
Version: 1.9
以下略
> embossversion
$ embossversion
Report the current EMBOSS version number
> kraken
$ kraken
Need to specify input filenames!
Usage: kraken [options] <filename(s)>
以下略
> mash
$ mash
Mash version 2.0
以下略
> kaiju
$ kaiju
Error: Please specify the location of the nodes.dmp file, using the -t option.
Kaiju 1.5.0
Copyright 2015,2016 Peter Menzel, Anders Krogh
以下略
> centrifuge --version
$ centrifuge --version
/home/linuxbrew/.linuxbrew/bin/../Cellar/centrifuge/1.0.3/bin/centrifuge-class version 1.0.3-beta
64-bit
Built on 776abb41706e
以下略
> orthofinder.py
$ orthofinder.py
OrthoFinder version 2.1.2 Copyright (C) 2014 David Emms
> racon
$ racon
[racon::] error: missing input file(s)!
usage: racon [options ...] <sequences> <overlaps> <target sequences>
以下略
> fastANI
$ fastANI
Required option missing: '-o, --output'
linu
> python2 --version
$ python2 --version
Python 2.7.15
> python3 --version
$ python3 --version
Python 3.7.0 (default, Aug 24 2018, 00:54:23)
[GCC 5.4.0 20160609]
> R --version
$ R --version
R version 3.5.1 (2018-07-02) -- "Feather Spray"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
以下略
> java -version
$ java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
環境によるランタイムの違い(簡単なベンチマーク)
mac pro2012 、core i7 8700のwindows10 proマシン、xeon E5 2680v4のubuntu18.04マシン間で、E.coliのバリアントコールとde novo assembly関連ジョブのランタイムにどのくらい違いが出るのか調べてみる。
1、準備。コンテナを立ち上げ、SRAに上がっているE.coliのWGSデータを1つダウンロードする。リファレンスはNCBIからfetchする。
#mac
mkdir ~/test && cd test/
docker run --rm -itv $PWD:/data -w /data bcgsc/orca
#bash on windows
mkdir ~/test && cd ~/test/
#ここではユーザー名kazuのkazu/dataに移動。
docker run --rm -itv c:/Users/kazu/test:/data -w /data bcgsc/orca
#variant call
# reference genome download URL
# genome https://www.ncbi.nlm.nih.gov/nuccore/NC_000913.3
#download small dataaset
fasterq-dump SRR6281664 -e 8
リファレンス名はEscherichia_coli_K-12_substr_MG1655.fastaに修正した。この3つのファイルがあるはず。
2、ヒアドキュメントで以下のテストスクリプトを作成
cat >run.sh <<EOF
#!/bin/sh
#variant call
ref='Escherichia_coli_K-12_substr_MG1655.fasta'
read1='SRR6281664_1.fastq'
read2='SRR6281664_2.fastq'
thread='8'
mkdir QT_reads
#preprocessing
fastp -i \$read1 -I \$read2 -3 -o QT_reads/cleaned_1.fq.gz -O QT_reads/cleaned_2.fq.gz \\
-h QT_reads/fastp_report.html -j QT_reads/fastp_report.json \\
-q 15 -n 20 -w \$thread
cread1='QT_reads/cleaned_1.fq.gz'
cread2='QT_reads/cleaned_2.fq.gz'
#mapping(*3)
mkdir temp
cp \$ref temp/
bwa index -a is temp/\$ref > /dev/null
bwa mem -t \$thread temp/\$ref \$cread1 \$cread2 | samtools sort -@ \$thread -O BAM - > mapped.bam && samtools index -@ \$thread mapped.bam
sambamba mpileup -t \$thread mapped.bam --samtools -u -g -f temp/\$ref | bcftools call -v -m -O z -o mpileup.vcf.gz
bcftools stats -F temp/\$ref -s - mpileup.vcf.gz > mpileup.vcf.gz.stats
plot-vcfstats -p report/ mpileup.vcf.gz.stats
#de novo assembly
mkdir merged
bbmerge.sh in1=\$read1 in2=\$read2 out=merged/merged.fq ihist=merged/ihist.txt
#evaluation of assembly
spades.py -1 \$cread1 -2 \$cread2 --merged merged/merged.fq --careful -t \$thread -o spades
quast spades/scaffolds.fasta -R \$ref -1 \$cread1 -2 \$cread2 -o report/quast_test_output -t \$thread
exit
EOF
run.shができる。
3、ベンチマークする。
#run benchmark
time (sh run.sh)
timeのrealの値を表にまとめた(n=1)。
thread数を8と16で1回だけテストしたがどちらの条件でもxeonE5 v4のマシンが一番早く終わった。core i7マシンも10年前のxeon搭載mac proと比べると0.6倍以下の時間で処理できた。
感想
調べた限りGeneralなツールは割となんでも入っています。専門的な解析向けのツールは少なめですが、配布サイズを鑑みて現実的なバランスで調整されていると思います。とは言っても環境によっては10GB以上あるイメージサイズはヘビーです。解析に供する直前ではなく、前もってpullしておくのがよいと思います。
論文中で言及されていますが、講習会で使うならリソースが潤沢なサーバーにポートを開けて立てて、講習者がsshでリモートログインして使うのが楽でしょうね。講習会後も必要なら後からpullすれば良いわけで。
引用
ORCA: A Comprehensive Bioinformatics Container Environment for Education and Research
Shaun D Jackman Tatyana Mozgacheva Susie Chen Brendan O’Huiginn Lance Bailey Inanc Birol Steven J M Jones
Bioinformatics, Published: 20 April 2019
関連
*1
-v $HOME:$HOME"と指定しているので、ホストの$HOMEが仮想環境の$HOMEにマウントされる(=>シェアディレクトリになる)。私の場合、ホストの$HOME (私の場合/Users/user)がORCAの$HOME(/home/linuxbrew)にマウントされる。"-w $HOME"指定も同時にしているので、log in後の初期位置は$HOMEになる。
*2
私はこの記事を参考にして10 proにdockerを入れました。
↓もう少し噛み砕いて説明したページ
*3
variant callのstatisticsは以下のチュートリアルを参考にしました。
https://genomics.sschmeier.com/ngs-variantcalling/index.html