yNagaokaのブログ

このブログはNGS解析初心者がつまずいた部分と解決方法をまとめた覚書のようなものです。

Singularityとは何か?の覚書ーその1

はじめに

今回はDockerと合わせて重要になるSingularityに関して簡単にまとめようと思います。Singularityの公式ユーザーガイドは以下を参照してください。
https://docs.sylabs.io/guides/latest/user-guide/:embed:cite

Singularityとは?

・Singularityは、米LBNL(Lawrence Berkeley National Laboratory)で生まれた科学および高性能コンピューティング環境向けに設計されたオープンソースベースのコンテナープラットフォームです。

・アプリケーションの本体及び動作に必要なライブラリ、データをパッケージ化し、コンテナイメージを作成します。(Dockerのようなコンテナシステムを自分で環境構築して実行環境が作れます)

・コンテナイメージは基本的に1ファイルでDokcer imageよりも軽量です。

・コンテナを立ち上げなくても直接コマンドを実行することができます。

・Docker HubやSingularity Hubから直接イメージを作成することができます。

・Dockerと違い、できるだけ「コンテナ外のリソースを取り込む」ことを主眼としたコンテナです。

Singularityを使うメリット

・sudo権限が不要なため、一般ユーザアカウントでコンテナを起動・停止することができます。Dockerと違いユーザアカウントにsudo権限を付与しなくても良い!

・既にDockerで作成されているコンテナイメージがそのまま使える!

・実行ユーザアカウントの権限をそのままコンテナに引き継ぎできます。コンテナ内でファイルの作成・編集をしてもownerは実行ユーザのまま!

GPUの仮想化に対応しています。コンテナ起動時にオプションを付与すれば、コンテナ内でGPUも利用できる!

・デフォルトでホストの$HOME下をコンテナに共有します。$HOME以外にも システム管理者がユーザにバインドを許可していた場合は、ユーザ側でバインド元と先を指定することも可能です。 また、/sys, /proc, /tmp, /var/tmp, /etc/resolv.conf, /etc/passwdもデフォルトでコンテナ側にマウントされます。

Singularityと他の仮想環境との比較

・コンテナ型はハイパーバイザーがないため仮想化によるオーバーヘッドがない。
※オーバーヘッド:何らかの処理を行うためにかかるシステムやプロトコルの動作に対する負荷。 「仮想化オーバーヘッド」という場合には、物理サーバー上での動作では発生しないが仮想サーバー上では発生する余分な制御や余分な時間のことを指す。

・Dockerはコンテナの内外が分断された独立環境となるが、Singularityはコンテナ外を容易に参照できる環境である。 つまり、Singularityはホストのリソース (ファイル・ハイドウェア) を直接利用できる。

参考資料:以下が非常に参考になります。

https://qiita.com/mkt3/items/b9f86f5ddf9eb0f43608:title:embed:cite https://abci.ai/ja/how_to_use/data/ABCI-MiniCamp_Singularity_202105.pdf

Dockerを用いるメリットもありますが、個人的にはSingularityの方が柔軟性があって使いやすいなと感じています。