遺伝研スパコンでDFASTを動かす

# 概要
原核微生物用のゲノムアノテーションツール DFAST (DDBJ Fast Annotation and Submission Tool) のスタンドアローン版を遺伝研スパコンで動かす。
**スパコンに用意された singularity コンテナ ([→参考](https://sc.ddbj.nig.ac.jp/ja/guide/software/singularity))と参照データを使えばソフトウェアのセットアップの必要なく動かすことができる。**(スパコンを使わない場合には [github] (https://sc.ddbj.nig.ac.jp/ja/guide/software/singularity) からソースコードを取得するか、[Bioconda](https://anaconda.org/bioconda/dfast) を使ってインストールできる。)
また、ゲノムの完成度および生物種名チェックのツール [DFAST_QC](https://github.com/nigyta/dfast_qc) も同様の手順で実行できる。


**\* 初心者の方、大量にデータ処理をする必要がない方は web版 [DFAST](http://dfast.ddbj.nig.ac.jp/) を使用することをおすすめします。**

# DFASTの実行

遺伝研スパコンには`/usr/local/biotools/`以下にBiocontainersからインポートされたsingularityコンテナが格納されている。スタンドアローン版DFAST (DFAST_core)のコンテナイメージファイル`/usr/local/biotools/d/dfast:1.2.13--h8b12597_0` (2021年3月時点での最新版) を利用する。

DFASTの参照用データ (参照タンパク質配列DB等)はスパコンの`/usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dfast_core_db/`に配置されている(*1)ので、これを`--dbroot`オプションで指定して利用する。


*1) スパコンの`/usr/local/resources/`以下にはDDBJに登録された配列データやBLASTデータベースなど様々なリソースファイルが用意されている。


### 実行前の準備
起動するのにデフォルトのメモリ設定では不足する(*2)ので、下記のようにメモリ指定してqloginをしておく。（バッチジョブとして投入する際には同じようにメモリオプションと、必要であれば使用CPU数を指定する）

```
qlogin -l mem_req=8g,s_vmem=8G
```

*2) デフォルトのメモリ設定では足りない場合があるので8Gを指定している。~~理由不明だが遺伝研スパコンではBiopythonをインポートするとなぜか大量にメモリを必要とする（自環境だけかもしれない）。DFASTをデフォルト条件で実行するだけなら本来はそれほどメモリは必要とせず、メモリ8Gb積んだMacBookでも動作する。~~

__2023.2.4追記__ Biopython をインポートする際にメモリが大量に消費される問題を回避するため、
```
export OMP_NUM_THREADS=1
```
を設定しておく。
(参考: https://teratail.com/questions/373677, https://github.com/bcgsc/mavis/issues/185#issuecomment-481376728)






次に、JAVAが動くようにに環境変数`MALLOC_ARENA_MAX`に小さめの値を設定しておく。

```
export MALLOC_ARENA_MAX=2
```

これは遺伝研スパコン特有のtipsで、JAVA実行時に不必要に大量のメモリが確保されるのを防ぐためである ([→参考](https://sc.ddbj.nig.ac.jp/ja/guide/faq/tips#autotoc-item-autotoc-1))。`export _JAVA_OPTIONS="-XX:ParallelGCThreads=1 -Xmx1g"`のように環境変数を設定しておく方法でも回避できる。

### 実行
```
singularity exec -B /usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dfast_core_db:/dfast_core_db \
  /usr/local/biotools/d/dfast:1.2.13--h8b12597_0 dfast \
  --dbroot /dfast_core_db --genome path/to/genome.fna --cpu 1
```

singularity実行時には自ホームディレクトリは自動でバインドされるようになっているが、それ以外の場所のファイルは見えなくなってしまう。そこで、`-B`オプションを使って参照データの置き場所`/usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dfast_core_db/`をコンテナの`/dfast_core_db`にバインドしている。dfastの実行オプションに` --dbroot /dfast_core_db`と指定することでこのデータが参照可能になる。

この例ではインタラクティブシェルからの利用を想定しているため`--cpu 1`を指定している。バッチジョブで投げる場合、CPU要求値に合わせて変更して構わない（デフォルトでは`--cpu 4`になっている)。


# DFAST_QCの実行
singularityコンテナイメージファイル `/usr/local/biotools/d/dfast_qc:0.2.6--0`と参照データ `/usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dqc_reference` を使って同様に実行できる。
DFAST_QCは参照データの準備に時間がかかるが、この方法を使えばすぐに使用することができる。

### 事前準備
DFASTと同様に、メモリを24G程度指定してログインしておく。

また、外部との通信できるように`/etc/resolv.conf` を別の場所にコピーしておき、実行時にコンテナにバインドする(*3)。ここでは/tmpにコピーを作成する。これはログアウトすると消去される。

```
cp /etc/resolv.conf /tmp
```

*3) `/etc/resolv.conf` とはDNSへの参照情報が書かれたファイルで外部とのネットワーク通信で必要になるが、Biocontainersから提供されているコンテナには含まれていない ([→参考](https://github.com/bioconda/bioconda-recipes/issues/11583))。そのため、実行時にスパコン外との通信が必要なツールについてはresolv.confをコンテナにバインドする必要がある。なお、コンテナ内では`/etc/resolv.conf`は`/tmp/resolv.conf`へのリンクになっているので、上記のようにコピーを作成してからホストの`/tmp`をコンテナの `/tmp`にバインドすればコンテナ内でresolv.confが参照できるようになる。
DFAST_QCでは実行時に不足する参照データがあればNCBIのFTPサーバーに接続して取得するようになっているため、この操作が必要。今後のアップデートで接続しなくても動作するように変更する予定であり、将来的にはこの事前準備は不要となる。

### 実行

```
singularity exec -B /tmp:/tmp -B /usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dqc_reference:/dqc_reference \
  /usr/local/biotools/d/dfast_qc:0.2.6--0 dfast_qc \
  --ref_dir /dqc_reference --input_fasta path/to/genome.fna
```

DFASTのときと同様に参照データをコンテナの`/dqc_reference`にバインドし、`--ref_dir`オプションで指定している。

### DFAST_QC実行方法に関する追記 (2021.12.28)
遺伝研スパコンの`/usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/containers/dfast_qc-latest.sif`に最新版（執筆時点で0.4.1）のsingularityコンテナイメージを用意しています。これを利用する場合、

```
singularity exec -B /usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/dqc_reference/:/dqc_reference /usr/local/resources/mirror/ddbj.nig.ac.jp/dfast/containers/dfast_qc-latest.sif dfast_qc --input path/to/genome.fna
```
で実行可能です。

# まとめ

- 遺伝研スパコンでは`/usr/local/biotools/`以下にBiocontainersからインポートされたsingularityコンテナが格納されている。
- 遺伝研スパコンでは`/usr/local/resources/`以下に様々な参照用データが用意されている。
- これらを組み合わせて使用することで、ソフトウェアや参照データのセットアップの必要がなくDFASTやDFAST_QCが使用できる。
- 遺伝研スパコンではJAVAのプログラムを動かすときには環境変数`MALLOC_ARENA_MAX`の指定が必要。
- コンテナから外部とのネットワーク通信が必要なツールを動かす際にはコンテナに`resolv.conf`をバインドする必要がある。