はじめに
Singularityのイメージやインストール方法が分かったところで、今回はどうやって使うのかに関してまとめたいと思います。
Singularityの使い方
基本的にはDockerと同様にimageからコンテナを作成して実行します。
・SingularityのコンテナであるSingularity Image File (SIF)をbuildします。
・SIFコンテナに対して、アクセス(shellやrun, exec)することで使用します。
※SIFコンテナは読取専用ファイルでコンテナ内で編集することはできません。
SIFのbuild方法は主に5つあります。目当てのコンテナが以下の場所にあれば簡単にbuildすることができます。
1.Container Libiraryから
2.Docker Hubから
3.Singularity Hubから
4.マシン上の既存のコンテナから
5. Singularity Definition Fileから
※SIFにすると動かないDocker imageがあるようです。もう少し勉強が必要だと感じてます。
Singularityの使い方-実践
今回はRNA-seqの解析ツールであるRumBallを例にして、SIFをbuildして使用してみたいと思います。
RumBall
GitHub: https://github.com/rnakato/RumBall Manual: https://rumball.readthedocs.io/en/latest/
SIFのbuildは以下のコマンドで行います。
$ singularity build <SIF name> <インストール元> $ singularity build rumball.sif docker://rnakato/rumball #今回の例
今回はDocker Hub に公開されているRumBallからrumball.sifを作成しています。
rumball.sifがSIFコンテナでありRNA-seq解析に必要なツールがインストールされています。
注意点はRamBall内でインストールされているツールは使用できますが、インストールされていないものは使用できません。ツールが足りないからと言って自分でインストールしてSIFコンテナに追加することはできません。
実行は、shell, run, execで行います。
shell
コンテナ内でShellを実行する.%runscript などは実行されずShellが起動する。デフォルトのShellは Bash が起動する。--shell でShellを指定することも可能。コンテナ内で、定義されたコマンドを実行する。
$ singularity shell <SIF name> $ singularity shell rumball.sif #例 Singularity> <command>
run
コンテナ内でユーザ定義のデフォルトコマンドを実行する。sifファイルの作成時に指定できる %runscript が実行される。%runscript が指定されていない場合はShellが立ち上がる。
$ singularity run <SIF name> <command>
exec
execは run の部分をexecにするだけです。違いはコンテナ内でコマンドを実行するがコンテナを作成してから run するのではなく、sifファイルに直接コマンドを投げる点です。
$ singularity exec <SIF name> <command>
個人的にはexecを使う場合が多いかと思います。
注意点ですがshell, run, execともにデフォルトは$homeがマウントされています。
$ singularity shell rumball.sif Singularity> pwd /home/nagaoka Singularity> exit
マウントポジションを指定する場合は--bind
オプションを使います。複数のディレクトリをマウントする場合は ,
で続けて記載します。
$ singularity shell --bind <directory> <SIF name> #run,execも同じ $ singularity shell --bind /work,/work2 rumball.sif #例 Singularity> pwd /work/Nagaoka/rumball/worktest
また、GPUを使用してコマンドを実行したい場合は--nv
オプションを使用します。
$ singularity exec --nv --bind <directory> <SIF name> <command>
基本的な使い方は以上で、あとは<command>
の用法があっていれば解析ができます。
Dockerと異なりコンテナを立ち上げては消すというような作業が不要であり、外部のディレクトリを参照しやすいため非常に使い勝手が良いです。
一方で、SIFの中身を編集することはできないためツールにバグがあっても自分で修正することができません。また、SIFの作製に使用したimageが更新された場合は都度SIFのBuildが必要になります。