2022/03/20 文章修正
2022/03/24アンケート結果追記
ご存じの通り、新しいmacはCPUがARMアーキテクチャに移行し、x86-64 darwin向けにコンパイルされたプログラムが実行できなくなりました(まだ販売されているintel macもありますが、選択肢は少なくなってきています)。Apple siliconのmacで動かすには、ソースコードからコンパイルする必要があります。しかしビルドにも現状は工夫が必要で、例えばCで書かれたbwaはこちらの質問スレッドの回答にあるように、命令セットを修正し、パッチ(参考)を当てることでコンパイルできるようです(以前にテスト済み)。
また、bwa(bwa0717-mac-aarch64.tar.gz)やbowite2(bowtie2-2.4.5-macos-arm64.zip)、seqkit(seqkit_darwin_arm64.tar.gz)のように、リリースにビルドずみのパッケージを用意してくれている開発者もいますが、まだ少数だと思います。また、複雑な処理を行う自動化されたパイプラインではたくさんの実装を組み合わせているものが多く、リリースからダウンロードするような方法では、インストールプロセスがスケールしません。最近の複雑化されたパイプラインを正確に、かつ短い時間で導入するには、brewやcondaのようなパッケージマネージャの力を借りる必要があります。
以前、M1 macにも導入可能なmambaforgeインストーラーを紹介しました。
この手順で、M1 macでもconda(mamba含む)を使えるようになります。しかし現状ではバイオインフォマティクス向け実装のほんとんどについてARM64 (aarch64) darwin向けのバイナリが準備されていないため、condaを実行してもエラーになります。
bowite2をインストールしてみましょう。M1チップのmacbook airを使っています。
mamba install -c bioconda bowtie2
Looking for: ['bowtie2']
bioconda/osx-arm64 352.0 B @ 487.0 B/s 404 failed 0.7s
anaconda/cloud/bioconda/osx-arm64 114.0 B @ 154.0 B/s 404 failed 0.7s
bioconda/noarch 3.5MB @ 3.5MB/s 1.1s
pkgs/main/osx-arm64 522.2kB @ 415.5kB/s 0.5s
au-eoed/osx-arm64 1.6kB @ 857.0 B/s 0.8s
anaconda/pkgs/free/noarch 10.1kB @ 3.0kB/s 2.7s
conda-forge/noarch 7.6MB @ 2.2MB/s 1.9s
pkgs/r/noarch 482.4kB @ 128.2kB/s 0.4s
conda-forge/osx-arm64 2.0MB @ 422.9kB/s 0.9s
ursky/noarch 130.0 B @ 23.0 B/s 0.9s
pkgs/main/noarch 804.6kB @ 122.4kB/s 1.0s
anaconda/pkgs/main/osx-arm64 3.0MB @ 294.3kB/s 6.5s
ursky/osx-arm64 131.0 B @ 11.0 B/s 1.0s
anaconda/pkgs/free/osx-arm64 130.0 B @ 10.0 B/s 0.8s
anaconda/cloud/conda-forge/osx-arm64 15.4MB @ 1.2MB/s 12.4s
au-eoed/noarch 125.0 B @ 10.0 B/s 0.5s
pkgs/r/osx-arm64 281.0 B @ 22.0 B/s 404 failed 0.2s
anaconda/pkgs/main/noarch 4.9MB @ 327.6kB/s 8.5s
anaconda/cloud/conda-forge/noarch 54.2MB @ 2.0MB/s 26.5s
anaconda/cloud/bioconda/noarch 25.2MB @ 485.5kB/s 52.1s
Pinned packages:
- python 3.9.*
Encountered problems while solving:
- nothing provides requested bowtie2
見つからないためインストールできずに終了しました。
もちろん、全てのツールがこうなるわけではありません。導入できるものもあります。
#javaのpilon
mamba install -c bioconda/label/cf201901 pilon
#bbmap
mamba install -c bioconda/label/cf201901 bbmap
#picard-tools
mamba install -c bioconda/label/cf201901 picard
#igv
mamba install -c bioconda igv
kazuma$ pilon --help
Pilon version 1.23 Mon Nov 26 16:04:05 2018 -0500
Usage: pilon --genome genome.fasta [--frags frags.bam] [--jumps jumps.bam] [--unpaired unpaired.bam]
[...other options...]
pilon --help for option details
別の方法として、動作は遅くなりますが、dockerに代表される仮想環境やエミュレータのRosetta2(apple)を使う手があります。RosettaはかつてpowerPCのmacがintelに移行した時にも活躍しましたね。Rosetta2も、intel mac向けのアプリをapple siliconのmacで動かす時に使われています。dockerも便利で、2022年3月現在、すでにM1 mac向けインストーラーのGeneralリリースが公開されています。ただし、dockerは処理によってはものすごく遅くなります(参考記事)。また、dockerがインストールできないなどのバグも聞きます。
そこで、ここではRosetta2を使ってM1 macでcondaを利用できるようにします。まず、M1 向けmambaforgeがあるなら、消すかリネームしておきます。(もしくは後で入れるintel mac向けmambaforgeのパスや名前を変える)
rm -rf ~/mambaforge/
#bashrcに書いているなら消す(viを立ち上げ、ddで行消し、:wqで閉じる)
vi ~/.bashrc
ターミナルは終了しておきます。
Rosetta2で実行する用に、Rosetta2専用のターミナルを用意します。ターミナルアプリをコピペして複製します(commnad+shift+U =>ターミナル)(参考記事)。
2つ目のターミナルにはRosettaを利用して開くにチェックを付けます。
(他のターミナルソフトウェアでも同じことができるはずです)
Rosettaチェックをつけた方のターミナルを起動します。マシンのアーキテクチャを表示するコマンドarchをタイプ。
$ arch
写真のようにインテルCPUと出ればO.K。arm64と出るならRosettaが使われていません。
Rosetta2を使うので、あえてintel mac向けMambaforgeインストーラーをダウンロードします。間違ってM1向けMambaforgeインストーラーをダウンロードしないで下さい。condaは当然動作しますが、conda installを打った時にはM1向けバイナリを引っ張ってこようとするので、見つからなくて失敗します。
#Apple x86_64 (Intel chip)
wget -O Mambaforge3.sh https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-MacOSX-x86_64.sh
バッチモードでインストールします。-pでパスとprefixを指定できます(デフォルトは~/mambaforge/)。
bash Mambaforge3.sh -b
#アクティブにする
echo ". ~/mambaforge/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate base" >> ~/.bashrc
#アクティベート
source ~/.bashrc
- -b run install in batch mode (without manual intervention)
改めてbowtie2をインストールしてみましょう。
mamba install -c bioconda bowtie2
help
>bowtie2
$ bowtie2
No index, query, or output file specified!
Bowtie 2 version 2.4.5 by Ben Langmead (langmea@cs.jhu.edu, www.cs.jhu.edu/~langmea)
Usage:
bowtie2 [options]* -x <bt2-idx> {-1 <m1> -2 <m2> | -U <r> | --interleaved <i> | -b <bam>} [-S <sam>]
<bt2-idx> Index filename prefix (minus trailing .X.bt2).
NOTE: Bowtie 1 and Bowtie 2 indexes are not compatible.
<m1> Files with #1 mates, paired with files in <m2>.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<m2> Files with #2 mates, paired with files in <m1>.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<r> Files with unpaired reads.
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<i> Files with interleaved paired-end FASTQ/FASTA reads
Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
<bam> Files are unaligned BAM sorted by read name.
<sam> File for SAM output (default: stdout)
導入できました。
samtoolsもインストールしてみましょう。
mamba install -c bioconda samtools -y
> samtools
$ samtools
Program: samtools (Tools for alignments in the SAM format)
Version: 1.15 (using htslib 1.15)
Usage: samtools <command> [options]
O.K
こんな感じで、正常に動作しているようです。x86-64 darwin向けのバイナリをRosetta2を使って動作させているのでネイティブ実行するより遅くなりますが、dockerを使うよりはずっと高速なのではないでしょうか?明日は簡単なベンチマークを取ってみます。
参考
2022/03/25
M1 Macを使っておられるかアンケートに答えていただいた結果です。
良かったら教えて下さい。M1チップのMacを使っていますか?(貸与含む)
— Kazuma Uesaka (@kazumachack) March 23, 2022
自分のツイッターアカウントはおそらく自分に似た属性の方とより多く繋がっていると思うので、結果はランダムサンプリングには全くなっていないことは断りを入れておきます(ネットワークの異なる場所で聞けば大きく異なる結果になる可能性が高い)。とはいえ、既に多くの方がM1のMacを使っていることが分かりました。