はじめに
筆者はSingularityと同じくコンテナ型仮想環境であるDockerを日常的に使用しているのですが、次のような問題点を改善できないかと調べていたところSingularityにたどり着きました。
- Dockerではコンテナの操作及び作成にroot権限が必要であること
- 外部のデバイスやGUI,GPUを使うための設定が面倒臭い
など。この記事ではSingularityについて学びながら、その内容をアウトプットしていければ幸いです。
Singularityとは
Singularity(シンギュラリティ)は、ユーザーが自身の計算環境を完全に再現し、保持できるようにした新しい Linux コンテナです。
Singularityは、アプリケーションの本体及び動作に必要なライブラリ、さらにはデータをパッケージ化します。作成されたコンテナイメージは、Singularityがインストールされている他のLinuxサーバーで動作可能。
また、既にDockerをお使いの場合はDockerイメージをそのままインポートすることもできます。
例えば、ご自身がお使いのアプリケーションを複数のシステムで共有するようなケースでは、パッケージ化された環境をSingularityコンテナに入れるだけで共有でき、不足している依存関係をそれぞれのシステムにインストールする必要がありません。
ホスト上の環境がアプリケーションの要求するものと大幅に違っていても、Singularity コンテナ内のパッケージ化された環境が使われるためアプリケーションを確実に実行することができます。
とのこと。参考: HPCシステムズ Singularity
Dokcerのイメージなどがそのまま流用出来るそうなので便利そうです。
Singularityの環境構築
早速 公式ドキュメントを参考にしつつ、環境構築を行いました。
次のスクリプトを実行すれば環境構築自体はできるはずです。
Singularity及びその環境構築時に必要なGoのバージョンに関しては適宜変更してください。
#! /bin/bash
# Singularity 環境構築用のシェルスクリプト(Singularity v3.9.5)
# 依存関係のインストール
sudo apt update && sudo apt install -y \
build-essential \
libssl-dev \
uuid-dev \
libgpgme11-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git
# Goのインストール(バージョンは適宜変更)
export VERSION=1.17.2 OS=linux ARCH=amd64 && \
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \
rm go$VERSION.$OS-$ARCH.tar.gz
# Goの 環境設定
export GOPATH=${HOME}/go && \
export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin
# githubからSinguralityをインストール
git clone https://github.com/sylabs/singularity.git && \
cd singularity && \
git checkout v3.9.5
# Singuralityをコンパイル
./mconfig && \
make -C ./builddir && \
sudo make -C ./builddir install
# bash補完
. /usr/local/etc/bash_completion.d/singularity
コードの内容についてはここでは詳しくは言及しません。と言っても、コード内のコメントに書かれている通りです。
もっと詳しく学びたい方は公式ドキュメントを参考にしてください。
この後
singularity version
とターミナル上でコマンドを打ち込んだ際に、バージョンの情報(今回はv3.9.5)が出て来れば環境構築できています。
まとめ
とりあえずSingularityの環境構築を行いました。
以降はSingularityでのコマンドなどの細かい部分に触れていきたいと思います。