LoginSignup
17
18

More than 3 years have passed since last update.

singularity使ってみた

Last updated at Posted at 2019-09-29

singularityとは

  • dockerのようなコンテナシステム自分で環境構築して、サクッと実行環境を作ること
  • GPUにも対応してるのでdeeplearningもできるよくん
  • sudo権限がいらないから、何でもroot権限にするdockerよりいい気がする

実際にやってみよう

インストール

$ 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

注意

unable to find the cryptsetup program, is the package cryptsetup-bin installed?

$ sudo apt install cryptsetup-bin

実際に環境作ってみる

追加項目(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
  1. それに追加でなんか必要ならpipとかaptで必要ライブラリ追加
  2. 試しに実行してプログラム動けば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のみインストール可能
訂正
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

参考リンク

追加項目(2019/10/20)

  • singularityコンテナともとpcとの環境依存について
    • あたりまえかもしれないが,同じpcにsingularityで入れたライブラリと同じものが入っているともとから入っているライブラリが使われる.
    • 例を挙げると,pytorchのライブラリをcondaやpipを使って追加したなら,singularity内で宣言したライブラリのバージョンは,conda&pipで入れたバージョンに依存します.

ポイント
singularityで特定のバージョンを使いたいなら,ベース環境はで,conda,pip,aptでライブラリを共存させないようにしましょう.

追加項目(2019/12/23)

  • GO言語のインストールに失敗することについて加筆
  • GITHUBにて新しいdefファイル公開
17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18