singularityとは
- dockerのようなコンテナシステム自分で環境構築して、サクッと実行環境を作ること
- GPUにも対応してるのでdeeplearningもできるよくん
- sudo権限がいらないから、何でもroot権限にするdockerよりいい気がする
実際にやってみよう
インストール
- 基本は、singularityのホームページにそってやる。(version3.4)
- まずは必要ツールからinstall
$ sudo apt-get update && sudo apt-get install -y \
build-essential \
libssl-dev \
uuid-dev \
libgpgme11-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git
- GO環境が必要なのでinstall
$ export VERSION=1.12 OS=linux ARCH=amd64 && \ # Replace the values as needed
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \ # Downloads the required Go package
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \ # Extracts the archive
rm go$VERSION.$OS-$ARCH.tar.gz # Deletes the ``tar`` file
注意
- 2019/12/23現在うまくGO環境がうまく認識されません.Github isuue以下のようなエラーが出たら以下の手順をとって下さい
./mconfig
Configuring for project `singularity' with languages: C, Golang
=> running pre-basechecks project specific checks ...
=> running base system checks ...
checking: host C compiler... cc
checking: host C++ compiler... c++
checking: host Go compiler (at least version 1.13)... not found!
mconfig: could not complete configuration
- 対応策
- まずはgoの削除をおこなって
$ export VERSION=1.13.5 OS=linux ARCH=amd64 # change this as you need
$ wget -O /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz https://dl.google.com/go/go${VERSION}.${OS}-${ARCH}.tar.gz && \
sudo tar -C /usr/local -xzf /tmp/go${VERSION}.${OS}-${ARCH}.tar.gz
#環境変数の設定
$ echo 'export GOPATH=${HOME}/go' >> ~/.bashrc && \
echo 'export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin' >> ~/.bashrc && \
source ~/.bashrc
- 環境変数設定
$ echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc && \
source ~/.bashrc
- singularityをgitclone
$ export VERSION=3.4.0 && # adjust this as necessary \
wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-${VERSION}.tar.gz && \
tar -xzf singularity-${VERSION}.tar.gz && \
cd singularity
- make!
$ ./mconfig && \
make -C builddir && \
sudo make -C builddir install
注意
- とあるサイトによると公式に記載のaptに足りないものがあるらしい!!
- 以下のエラーメッセージがでたら注意
- Singularityのインストールと実行をしてみた
unable to find the cryptsetup program, is the package cryptsetup-bin installed?
$ sudo apt install cryptsetup-bin
実際に環境作ってみる
- 手順は以下のよう
- dockerhubかsingularityのlibraryからいい感じのベース環境を取ってくる
- コンテナの効率的な作り方はこちらから
追加項目(2019/10/12)
- dockerコンテナの選び方というか助言
- 現在のサポートubuntuLTSは18.04なのでそちらを選んだほうが良い
- サポートしてないバーションだとpythonが古かったり、apt pipが古くてうまく更新でいないことがある。
- 各cudaバージョンでubuntu18.04を使ってるものを紹介
- いまのところ18.04では、cuda9.2~10.1までしかない
tags | cuda version | cudnn version |
---|---|---|
9.2-cudnn7-runtime-ubuntu18.04 | 9.2 | 7 |
10.0-cudnn7-runtime-ubuntu18.04 | 10.0 | 7 |
10.1-cudnn7-runtime-ubuntu18.04 | 10.1 | 7 |
- それに追加でなんか必要ならpipとかaptで必要ライブラリ追加
- 試しに実行してプログラム動けばOK
- まずここではdefファイルの書き方のあとにsandboxを説明する
.defから作る
- 最小構成の雛形はこんな感じ
#ここでベース環境指定
#libraryはsingularityのライブラリ
#dockerはdockerhub
Bootstrap: library or docker
#どっから取ってきたねんを記述
From: ubuntu:18.04
#インストールしたいものを記述
%post
#apt
apt update
apt -y upgrade
apt -y install hogehoge
#pip
pip install hogehoge
#環境変数設定
%environment
export LC_ALL=C
#誰が作ったのか記述する場所
%labels
Author hogehoge
Version v0.0.0
- 作った.defファイルはsudo権限で.sif(singulairty image file)に変換する
- コードは以下のよう
$ sudo singularity build hoge.sif hoge.def
sandboxから作る
- sandboxとは開発環境を作るときにパッケージインストール(aptやpipを行いながら)開発を行うときに便利なシステム
- とりあえず以下のコマンド実行
sudo singularity build --sandbox ch_sandbox docker://chainer/chainer:latest-python3 # --sandboxオプションは-sと省略可
- このコマンドでは、dockerhubからchainerをサンドボックスとして読み出したもの
- カレントディレクトリにch_chainerが作られる
- ここからオプションが2つある
$ singularity shell ch_sandbox #.sifファイルと同じ扱い
$ sudo singularity shell --writable ch_sandbox #書き換え可能
- writableの違い
-writable | 何もなし |
---|---|
書き込みできる | 読み込み専門 |
他のディレクトリマウントできない | .sifのようになる |
apt pip install可能 |
訂正 pipも含めコンテナにはインストールできません |
/root | /home |
- 開発環境を思考錯誤したい人は使うといいが
- 今後のメンテナンス性を考えてdefにしておくことをおすすめする。
- sandboxも.sifにできる。
$ sudo singularity build my_chainer.sif ch_sandbox
実行方法
- .sifまでできればあとは簡単
- 他の人に.sifだけ渡せば権限なくても使えます(dockerとの一番の違い)
#GPUを使ってshellを使うとき
$ singularity shell --nv hogehoge.sif
#GPUを使って何かしらコマンドを動かすとき
$ singularity exec --nv hogehoge.sif nvidia-smi
#他のディレクトリをマウントするとき
$ singularity shell --bind マウントするディレクトリ:コンテナ内でマウントする箇所 hogehoge.sif
- 基本マウントは、/HOME,/PWD,/tmp,/proc,/sys,/devがマウントされます。(めちゃ便利)
- --nvをつけることでnvidia GPU使用可です。
追加項目
-
githubアカウントにサンプルで.defなどをおいて置くので使って見てください
- いくつかのサンプルdefを作成しましたご覧ください(2019/10/1)
- コメントはご自由に@fleming_toneへ
参考リンク
- 参考リンクくらい載せようぜってことで載せときます。
- sylab-singularity
- 検証用コンテナはDocker?いいえ、Singularityです。-quita
- Singularityのインストールと実行をしてみた-quita
- Singularity-HPC
追加項目(2019/10/20)
- singularityコンテナともとpcとの環境依存について
- あたりまえかもしれないが,同じpcにsingularityで入れたライブラリと同じものが入っているともとから入っているライブラリが使われる.
- 例を挙げると,pytorchのライブラリをcondaやpipを使って追加したなら,singularity内で宣言したライブラリのバージョンは,conda&pipで入れたバージョンに依存します.
ポイント
singularityで特定のバージョンを使いたいなら,ベース環境はで,conda,pip,aptでライブラリを共存させないようにしましょう.
#追加項目(2019/12/23)
- GO言語のインストールに失敗することについて加筆
- GITHUBにて新しいdefファイル公開