はじめに
今回は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の方が柔軟性があって使いやすいなと感じています。