概要
国立遺伝学研究所・スーパーコンピュータシステムを用いた次世代シークエンスのデータ解析では Apptainer (旧 Singularity) という Linux コンテナに収納されたプログラムを使用します。 Apptainer では Bioconductor イメージで提供されている多種多様なプログラムが( admin 権限を使用し様々なプログラムをインストールすることなく)実行可能な状態にあり、それらは /usr/local/biotools/ ディレクトリに収められています。 このディレクトリには、それぞれプログラムの一文字目のアルファベットに従ってプログラムが各サブディレクトリに収納されています。 各プログラムについては様々なバージョンのものが存在します。 どのバージョンを使用するかについては、それぞれの状況に応じて検討する必要がありますが、実際に解析を行う場合にはどのバージョンのプログラムを使用しているかは記録しておいてください。 論文投稿をするにあたっても、バージョン情報を記載することが求められることもあります。 例えば、NGS解析で頻繁に用いられる samtools というプログラムだけでも 2023年12月9日 時点で 110 の異なるバージョンが存在します。
ls -al /usr/local/biotools/s/samtools:*
とコマンドラインで入力することで、どのようなバージョンの samtools プログラムがあるかを表示できます。 ファイルの更新日時を参考に、発見されたバグの修正が期待できる最新のバージョン(できれば安定したバージョン)のプログラムを使用することをお勧めします。 バージョンによっては新しい機能が追加されたり、あるいは一部機能が削除されたりする場合がありますので、それらを踏まえ解析に必要な機能を備えたプログラムを選択してください。
(注)2023年のシステム更新に伴い、以前は singularity でプログラムを実行する前に求められていたコマンド module load singularity を実行( singularity のモジュールをロード)することが不必要となりました。 また module load singularity を実行するとエラー( ERROR: Unable to locate a modulefile for 'sigularity' )が表示されるようになりました。
(参考)
- BioContainers Apptainer Images の使い方の一例はここで紹介されています。
- 2023年のシステム更新にともなって発生した module load に関するエラーについてはここで説明されています。
qsub によるジョブ投入
メモリをあまり必要しない、かつ短時間で終了するジョブについては単にそのジョブを実行することで問題ありません。
例えば samtools プログラムのヘルプ・メニューを表示したい場合には
singularity exec /usr/local/biotools/s/samtools:1.18--hd87286a_0 samtools --help
と入力します。ここで samtools の後ろに記載されている 1.18 は samtools のバージョン番号で hd87286a_0 は コンテナでのパッケージの番号(Full Tag)を示します。 しかしある程度のメモリが必要な、あるいは長期間かかるジョブについてはシェル・スクリプトを記載し、それを qsub でジョブ投入します。 例えば test.sh のシェル・スクリプトのようなファイルがあった場合は
qsub test.sh
とします。 ここで長時間実行する場合は、-l d_rt オプションおよび -l s_rt オプションで実行時間を指定し、また多くのメモリを必要とする場合は-l vmem オプションおよび -l mem_req オプションで指定します。 計算機システム( intel、epyc、 short、 medium、 gpu )の選択、バッチジョブ(CPU コアを 1 コアだけ使用)、パラレルジョブ(CPU コアを複数同時に使用)、アレイジョブ(多数のジョブを投入)の選択も - l オプションで指定します。 これらのオプションは、シェル・スクリプトに記載するか、あるいは qsub でジョブ投入時に qsub の後に記載します。
一例として先でおこなった samtools プログラムのヘルプ・メニューを表示することをシェル・スクリプトとしてファイルに記載してジョブを投入してみましょう。
まずは、次を記載したファイル test.sh を準備してください。
#!/bin/bash
#$ -cwd
#$ -V
#$ -l short
#$ -l d_rt=00:10:00
#$ -l s_rt=00:10:00
#$ -l s_vmem=4G
#$ -l mem_req=4G
#$ -N an_example_with_displaying_samtools_help_menu
#$ -S /bin/bash
singularity exec /usr/local/biotools/s/samtools:1.18--hd87286a_0 samtools --help
個々の行の内容については、ここ(バッチジョブ)を参照してください。 またここで、 an_example_with_displaying_samtools_help_menu では各単語を _ (アンダーバー)で接続していることに注意してください。 これを空白(スペース)にすると qsub: Unknown option としてエラーが出力されることになります。
ファイルの作成については、PC などでファイルを準備しアップロードして頂いても結構ですし、あるいはスーパーコンピュータシステム上の vi エディタなどで記載して頂いても結構です。 ファイルの準備が終了したら、各行が問題なく記載されているかを
cat test.sh
で確かめてみましょう。 問題があるようであれば、rm test.sh でファイルを削除して再度ファイルを準備してください。 問題がないようでしたら
qsub test.sh
でジョブを投入してみてください。 (計算機ノードが混んでいなければ)すぐに結果が出ます。 次に記載しているジョブの稼働状況の確認や終了ジョブの実施状況の確認を実施してみてください。 ヘルプ・メニューの結果、すなわち標準出力への結果は、an_example_with_displaying_samtools_help_menu.o(ジョブ番号)のついたファイルに記載されています。
(参考)
- 国立遺伝学研究所・スーパーコンピュータシステムでのバッチジョブの投入についてはここ(バッチジョブ)を参照してください。
- 国立遺伝学研究所・スーパーコンピュータシステムでのパラレルジョブの投入についてはここ(パラレルジョブ)を参照してください。
- 国立遺伝学研究所・スーパーコンピュータシステムでのアレイジョブの投入についてはここ(アレイジョブ)を参照してください。
qstat による投入したジョブの稼働状況の確認
すでに qsub で投入したジョブで現在稼働しているものにどのようなものがあるかを調べるには
qstat
と入力します。 すると稼働ジョブのリストが表示されます。 その中には QLOGIN の情報も記載されています( QLOGIN が表示されていないようであればログインサーバで操作していることが疑われます。改めて qlogin しなおし計算機サーバ上で作業を実施することを推奨します。) さらに特定のジョブの稼働状況の詳細を調べるには、(必要に応じて先のリストの中からジョブの番号を探し出し)
qstat -j (調査するジョブの番号)
と入力します。ジョブの稼働状況の詳細が表示されます。
qreport による終了ジョブの実施状況の確認
すでに終了したジョブの実施状況を調べるには
qreport -j (調査するジョブの番号)
と入力します。 ジョブの番号は、終了したジョブについては、実行したシェルスクリプトの後に .e(ジョブ番号) あるいは .o(ジョブ番号)のついたファイルが作成されているので、それらのファイル名からジョブ番号を調べることができます。 実行中になんらかの問題が生じた場合には、 qreport で表示される failed の行に 0 以外の数値が記載されています。 また exit_status の行に 0 以外の数値が記載されている場合も注意が必要です。 ジョブ終了時には、ジョブが正常に終了したどうかを qreport で確認しておくことは重要です。 また.o(ジョブ番号)のついたファイルはスクリプトでの標準出力( stdout ) の結果が、.e(ジョブ番号)のついたファイルはスクリプトでの標準エラー( stderr ) の結果が出力されています。(qsub でジョブ投入時に -o オプションや -e オプションで標準出力や標準エラーの出力先のファイルを指定することも可能です。) ジョブ終了後はこれらのファイルも精査しておくことも重要です。
(ワンポイント・アドバイス)qreport で表示される failed の行に 0 以外の数値が記載されていた場合、そこに記載されている番号からエラーの原因を探す作業に入ります。 もしディレクトリ内に core.(number) のファイルが存在しているようであれば、その多くはプログラム実行時のメモリ不足が原因です。 また qreport で表示される r_mem に対して mem や maxvme が超えていた場合メモリ不足でプログラムが正常に動かなかった可能があります。 このような場合、要求するメモリの量を増加して再度ジョブを実行してみてください。 さらに qreport で表示される start_time と end_time も比較しプログラムの実行に要した時間も計測しておいてください。 もし qsub -l short オプションでジョブを投入しちょうど1時間で終了した場合は、ジョブが時間切れで停止した可能性があります。 それ以外の( short を指定しなかった)場合は、 -l d_rt オプションおよび -l s_rt オプションで実行時間を指定しないと3日でジョブが停止します。 そのためちょうど3日でジョブが終了した場合は、ジョブが時間切れで停止した可能性があります。注意して結果を精査してください。
(参考)
- 国立遺伝学研究所・スーパーコンピュータシステムの実行開始までの待ち時間(混雑具合)についてはここで確認できます。
- 国立遺伝学研究所・スーパーコンピュータシステムのジョブの実行環境に関係するオプションについてはここ(ただし2022年4月12日最終更新)で確認できます。