個人ゲノム解析環境におけるSingularityの利用方法
1. Singularityの概要
遺伝研スパコンでは、各種ソフトウェアを安定的に使用するためにSingularityコンテナの使用を推奨しています。
Singularityとは、共用計算機システム上でのHPC/バイオアプリケーション実行に適した、Linuxコンテナソフトウェアです。
Singularityを利用することにより従来システムでは実現困難だった以下のような利用例が可能です。
- 本システムとは異なるLinuxディストリビューション上でビルドされたアプリケーションを実行する。
- ユーザ所有のLinuxマシン上で作成した、カスタマイズした環境のイメージをSingularityコンテナにして持ち込み、本システム上で実行する。
- 他システムが提供するHPC用アプリケーションコンテナイメージを持ち込んで実行する。
- BioContainersなど、各種バイオ系プロジェクトで提供されたコンテナイメージをシステム上で実行する。
- SingularityHubや、DockerHubに登録されているコンテナをシステム内に持ち込んで実行する。
- NVIDIA GPU Cloudで公開されているDockerコンテナをNGCからダウンロードして実行する。
そのため、このページではSingularityの使用方法を説明しています。
2. 使い方
2.1. 遺伝研スパコン上に設置してあるSingularityコンテナイメージファイルを使う
遺伝研スパコンではBioContainersが提供している34,000個以上のSingularityコンテナイメージファイルを/usr/local/biotools/ディレクトリ以下に置いています。
これらを利用することで解析ソフトウェアのインストールの手間を軽減することができます。
ディレクトリへの移動の方法
インタラクティブノードで下記コマンドを実行します。
$ cd /usr/local/biotools
コンテナの確認
lsコマンドでSingularityコンテナイメージが格納されています。
$ ls /usr/local/biotools/
ユーザーのディレクトリに戻る場合は下記コマンドを実行してください。
$ cd /home/ユーザーID
BioContainerの使い方については、BioContainersの利用方法をご覧ください。
2.2. 自作のSingularityコンテナイメージファイルを使う
Singularityコンテナは以下の手順で使用します。
- (1)root権限を持つローカルのサーバー上でsandboxモードで解析環境を作成する。
- (2)それをsingularity buildしてコンテナイメージファイル(*.sif)に固める。
- (3)このファイルをスパコンにコピーする。
- (4)スパコン上ではユーザー権限でコンテナの中のプログラムを実行する。
このときコンテナイメージファイル(*.sif)は元々書き込み禁止となっており、これにより共用計算機上にコンテナを持ち込んだ際のセキュリティーの問題を回避しています。 Singularity Definition Fileを用いた利用例は以下の通りです。
(1)root権限を持つローカルのサーバー上でsandboxモードで解析環境を作成する。
まず、ユーザーの環境上にSingularityをインストールします。詳細は公式ページhttps://sylabs.io/guides/3.5/admin-guide/index.htmlのInstalling Singularityを参照し、自分の環境にあったSingularityをインストールしてください。
WindowsやMacはvagrantで仮想マシンを起動し、その環境上でコンテナ例(Ubuntu18 Singularity:https://github.com/oogasawa/singularity-ubuntu18)をインストールします。
※環境により上記コンテナ例のビルドがうまく行かない場合があります。ご了承ください。その場合は、その他の例を検索等でお探しください。
(2)それをsingularity buildしてコンテナイメージファイル(*.sif)に固める。
Singularityインストール後、コンテナ例のページの通りにしていただくとコンテナイメージファイルが作成できます。
(3)このファイルをスパコンにコピーする。
作ったSingularityコンテナイメージファイルを、仮想環境から共有フォルダを介しダウンロードします。
そのファイルを遺伝研スパコン上にコピーします。
ファイルのコピーにはファイル転送(リンク必要)をご利用ください。
※上記のビルドには1時間以上かかるので、あらかじめsingularity-hubに登録しすることでバックグラウンドでビルドしておいて、singularity-hubからSingularityコンテナイメージファイルを遺伝研スパコンにダウンロードも可能です。
singularity-hubからダウンロードする場合は、遺伝研スパコン上で以下のようにコマンドを実行します。
# singularity-hubからコンテナイメージファイルを取得。
singularity pull shub://oogasawa/singularity-ubuntu18
# コマンドが長くなるのを防ぐためエイリアスを設定する。
alias sing="singularity exec $HOME/ubuntu18.sif
(4)スパコン上ではユーザー権限でコンテナの中のプログラムを実行する。
2.3. DockerコンテナイメージからSingularityイメージを生成する
一方、Singularityのsandboxモードの代わりにDockerコンテナを使うことが出来ます。
その際DockerコンテナイメージファイルはあらかじめDocker Hubに登録しておいてください。
Dockerコンテナイメージを用いたSingularityの利用例は以下の通りです。
# Docker Hub上のDockerコンテナをユーザー権限でSingularityビルドする。
$ singularity build lolcow.sif docker://godlovedc/lolcow
INFO: Starting build...
Getting image source signatures
Skipping fetch of repeat blob
sha256:9fb6c798fa41e509b58bccc5c29654c3ff4648b608f5daa67c1aab6a7d02c118
Skipping fetch of repeat blob
sha256:3b61febd4aefe982e0cb9c696d415137384d1a01052b50a85aae46439e15e49a
Skipping fetch of repeat blob
sha256:9d99b9777eb02b8943c0e72d7a7baec5c782f8fd976825c9d3fb48b3101aacc2
Skipping fetch of repeat blob
sha256:d010c8cf75d7eb5d2504d5ffa0d19696e8d745a457dd8d28ec6dd41d3763617e
Skipping fetch of repeat blob
sha256:7fac07fb303e0589b9c23e6f49d5dc1ff9d6f3c8c88cabe768b430bdb47f03a9
Skipping fetch of repeat blob
sha256:8e860504ff1ee5dc7953672d128ce1e4aa4d8e3716eb39fe710b849c64b20945
Copying config sha256:73d5b1025fbfa138f2cacf45bbf3f61f7de891559fa25b28ab365c7d9c3cbd82
3.33 KiB / 3.33 KiB [======================================================] 0s
Writing manifest to image destination
Storing signatures
INFO: Creating SIF file...
INFO: Build complete: lolcow.sif
# Singularityコンテナを実行してみる。
$ singularity run lolcow.sif
________________________________________
/ Don't let your mind wander -- it's too \
\ little to be let out alone. /
----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
o
3. 利用に際したTips
■コンテナの外部ディレクトリのバインド(bind)マウントについて
Singularityでは、
- $HOME
- $PWD
- /tmp
- /proc
- /sys
- /dev
は、コンテナ内からデフォルトでbindマウントされており、ユーザが明示的に指定しなくても、コンテナ内から アクセスすることが可能になっています。それ以外のディレクトリにアクセスする必要がある場合は、 コマンドラインで指定するか、シェルの環境変数SINGULARITY_BINDPATHを定義することにより、コンテナ内と コンテナ外のディレクトリを対応づけることが必要です。
singularity shell --bind $HOME my-container.simg
export SINGULARITY_BINDPATH="ユーザがコンテナ内から参照したいシステム上のディレクトリ" singularity shell my-container.simg
■Singularityを使ったMPIジョブの実行について
Singularityはソフトウェアとしては、コンテナ内でMPIジョブを実行することは可能です。ただし試行してみると、 コンテナ内外のMPIの実装、ライブラリ、通信デバイスのドライバの整合性をある程度とらないと正常には動作せず、 InfiniBand等の高速なインターコネクトを利用した場合、「外部から持ってきたコンテナイメージをそのまま動かす」 というわけにはいかないようです。この為、本システムではMPIについてはコンテナを利用するよりは、本システム で提供しているMPI環境を直接利用頂くことを推奨とさせて頂きます。
■免責事項および権利の留保事項
Singularityでは、コンテナ内の環境はユーザの自由にカスタマイズすることが可能です。この為、ご自身で作成し、持ち込まれた コンテナによるLinux環境については、ユーザご自身で管理して頂く必要があります。個人で作成されたコンテナイメージについては、 ご本人で維持、管理して頂くようお願いします。作成されたコンテナイメージに関するお問い合わせについてご容赦頂けるようお願い 致します。また、ユーザが作成され、持ち込まれたコンテナ環境について、システム全体の運用から望ましくない設定がされている 恐れが万一ある場合、事情をお聞きし、当該コンテナの利用を停止していただく権利をシステム側で留保するものとします。
4.参考ドキュメント
開発元のドキュメントページ
https://www.sylabs.io/docs/
開発元のユーザガイド(3.5 html版)
https://www.sylabs.io/guides/3.5/user-guide/index.html
開発元のユーザガイド(2.6 html版)
https://www.sylabs.io/guides/2.6/user-guide/index.html