[第2回 Singularity 勉強会] Singularity Hands-on


人数の関係で,うちわな勉強会ですが、内容はOpenにします。第1回勉強会の内容は、いちばん下にある "参考文献" を読んでください。それらの資料の紹介でした。第2回はハンズオンを行い、基礎的事項を学ぶことを目的とします。

はじめに
====================

Singularity とは、HPC向けのコンテナー型仮想化です。乱暴にいうとHPC向けDockerと言えます。
Dockerだと対応が難しい、MPIを利用したHPC向けアプリケーションを動かすのに非常に適しています。
[産総研の佐藤さんの資料][佐藤さん]によると仮想化によるオーバヘッドもありません。

本Hands-onでは Singularity 上でTensorflowを使ってMNISTを動かしながら、Singularityのコマンド体系を学んでいきます。

どんな人にオススメか？
-----------------------


- マルチノードの Deep Learning をやりたい人、最初の試行錯誤は手元のWorkstation, DNNが決まったら、スパコンやCloudを使って最後に大きな学習...
- HPCアプリを書いている方で、いろんな環境でそのコードを動かしたいひと
- OSSを複数の環境で頻繁に使うひと
- DokerでMPI動かすためにハックしたひと、諦めた人

つまり、手元のアプリケーションのバージョンがたびたび変更になり、さらに複数のコンピューティング環境を使いたい人に最適です。環境差を吸収します。MPIも対応しているので、これまで、Docker で MPI を動かしたかった人にももちろんオススメです！！


コマンド全体像
-----------------------

コマンド群としては、主に下記に示す、5つとなっていますが、本ハンズオンでは、buildコマンドと アプリケーションの実行方法に焦点を充て、exec, shell, run コマンドを中心に取り扱います。そのため、pullコマンドなど、一部のコマンドは使用しません。

ここで、build方法と、実行方法の Overviewを以下の図に示します。

![Kobito.fqlaLg.png](https://qiita-image-store.s3.amazonaws.com/0/73207/ca25dbef-5fcd-ae27-718d-267e1b462193.png "Kobito.fqlaLg.png")

| command | 説明                                                                                                                                                                                              | sample                                                                     |
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| build   | buildを使用して、既存のコンテナをダウンロードしてアセンブルしたり、あるフォーマットから別のフォーマットにコンテナを変換したり、特異性レシピからコンテナを作成することができます。                 | singularity build singlarity-tensorflow.img docker://tensorflow/tensorflow |
| inspect | イメージ概要を調査するコマンド。runscript、テストスクリプト、環境、ヘルプ、およびメタデータのラベルを簡単に表示することができます                                                                 | singularity inspect singlarity-tensorflow.img                              |
| exec    | ホストシステム上で直接実行されているかのように、コンテナイメージ内の任意のコマンドを生成できます。このexecは、Docker execとは異なり、コンテナを使用する前にコンテナを「実行」する必要がありません | singularity exec singlarity-tensorflow.img python mnist_softmax.py         |
| shell   | コンテナ内に対話型シェルを自動的に生成します。                                                                                                                                                    | singularity shell singlarity-tensorflow.img                                |
| run     | コンテナがファイル名で直接実行または実行されたときに実行されるカスタムアクションを定義できます。                                                                                                  | singularity run singlarity-tensorflow.img <br/> ./singlarity-tensorflow.img   |
| pull    | Docker HubもしくはSingularity Hub からコンテナーのイメージを取得するときに仕様するコマンド                                                                                                        | singularity pull singlarity-tensorflow.img docker://tensorflow/tensorflow  |



---------------


0. Singularityのインストール
==============================================


状況に応じて、0.1 もしくは 0.2 のどちらかを選んでください。

0.1 公式ページのやり方でインストールする
---------------------------------------------
 
Qiitaにまとめたのは、Macのみです。Windows、Linuxの方は公式ページからインストールしてください。
MacとWindowsは, vagrant > virtualbox > singularity > ubuntu という流れになっています。

- Macの方
	- 長尾のまとめ: https://qiita.com/daikumatan/private/775e3cea91bac6147974
	- 公式ページ: http://singularity.lbl.gov/install-mac
- Windowsの方
	- 長尾のまとめ: ゴメン
	- 公式ページ: http://singularity.lbl.gov/install-windows
- Linux
	- 橋本さんのまとめ: https://qiita.com/a210/private/a38101cec8084c066087
	- 公式ページ: http://singularity.lbl.gov/install-linux

0.2 (非公式) Docker コンテナー上に構築する (中丸さん作成)
-----------------------------------------------------

root権限はないけど、Dockerはインストールされている環境。NVIDIAのDGXユーザとか・・・

- Singularity 非公式インストール方法
	- https://qiita.com/pottava/private/6e1aee8879099c64a699

1. [Hands-on] 各種ビルドオプションと exec, shell, run を用いた、アプリケーションを実行方法を学ぶ
===============================================


- 1.1 Singularity 上で tensorflow を動かそう! (dafaultビルド, execコマンド編)
	- https://qiita.com/daikumatan/private/18fa571c992c949011dd
- 1.2 Singularity 上で tensorflow を動かそう! (--writableビルド, shellコマンド編)
	- https://qiita.com/daikumatan/private/3db9b43f02635b61868a
- 1.3 Singularity 上で tensorflow を動かそう! (--sandboxビルド, runコマンド編)
	- https://qiita.com/daikumatan/private/00472d9f960c0597073b

2. [Hands-on] recipe ファイルを使ったbuild方法を学ぶ (橋本さん作成)
=============================================================================

- Recipeファイルを使ったSingularityコンテナイメージの作成
	- https://qiita.com/a210/private/23e4ef734c38e6f36e78

3. 参考文献
========================

- [Singularityで分散深層学習][佐藤さん] 産総研 佐藤 仁さん
- [AWSでSingularityを使ってみよう][白鳥さん] Serverworks 白鳥 貴久さん
- [RescaleでSingularityを使ってみよう][古家さん] Argographics 古家 真之介さん
- [Google、Docker イメージに対するテスト自動化フレームワーク「Container Structure Tests」オープンソースで公開](http://www.publickey1.jp/blog/18/googledockercontainer_structure_tests.html)(第一回で話題になったコンテナのセキュリティ)



[佐藤さん]:https://www.slideshare.net/htsst/singularity-85959573
[白鳥さん]:https://www.slideshare.net/TakahisaShiratori1/awssingularity
[古家さん]:https://www.slideshare.net/ShinnosukeFuruya/singularity-on-rescale