GPUユーザー1は、様々なフレームワーク2や言語3で提供されるサンプルコードを試したり、バージョンアップによって動かなくなった過去コードのメンテナンス4に追われたりと、環境にまつわる問題に日々悩まされていました。
この問題に対する解は仮想環境の利用です。仮想環境はこのような問題を解決するのに役立ちますが、所詮フレームワークを切り替えたい位の話なので、VMwareなどの仮想マシンではいろんな意味で重すぎます。ほとんどのGPUユーザーに使われている仮想化が、コンテナ型のDockerです。5 以下、Dockerについては既に使っていること前提で、話を進めていこうと思います。
Docker6を使っていると、ちょっと気になることがあります。それは、dockerがデーモンで動いているし、イメージを立ち上げるには、実行時にsudo
しないといけない7し、イメージ内ではrootになっていし、違和感満載8です。さらに、USBカメラ使いたいとかGUIしたいなどのちょっとしたことが面倒9です。
これは、まぁ慣れ的な話だし、慣れている人には慣れろと言われそうですが、他にいい方法があるハズです。
そこで、いきなりですが、結論です。そんなあなたは、
すぐにdockerからsingularityに切り替えるべき!
以上。
それでは、あなたをこの結論に誘う8つのことをご紹介します。
1.singularity10とは
科学および高性能コンピューティング(HPC)環境向けに設計されたオープンソースベースのコンテナープラットフォームです。
2.dockerイメージが使える
docer同様、コンテナ・イメージをビルドして使います。singularityのリポジトリもありますし、dockerのリポジトリからも取ってくることができます。
1 2 |
> singularity build image.file docker://hubsite/account/imagename:tag |
3.使い方は簡単!
shellを動かす。
1 2 |
> singularity shell --nv image.file |
pythonスクリプトを実行する。
1 2 |
> singularity exec --nv image.file python script.py |
4.rootで動かさなくていい
コンテナ内を書き換えないなら、実行時にsudo
しなくてもいい。
5.実行時のuserを引き継ぐ
~/下など、権限があれば書き込みできる。
dockerだと、イメージを実行する場合、こんな感じで動かさなければならないです。
1 2 |
> sudo docker run -it -v /home/user1:/home/user1 account/imagename /bin/bash |
6.usbcamとかGUIとかすぐ使える
/devや/tmpも引き継がれるため、シームレスにusbカメラ等が使えるので、検証も楽々です。
dockerだと、イメージを実行する場合、こんな感じになる。(ハマる・・・ムリ
1 2 |
> sudo docker run -it -v /home/user1:/home/user1 --device=/dev/video0:/dev/video0 -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix account/imagename /bin/bash |
7.MPIを使って並列処理も可能
やったことないけどw
8.ABCI11でも使われている
しかも、ソニーのnnablaを使ったImageNet/ResNet-50 Trainingで世界最速12,13ですって、奥様。
おわりに
どうでしたか?安心してsingularityできると思っていただけたと思います。14
環境を汚さず、いろいろ試したいだけだったんですが、いいモノ見つけたと思います。皆さんもお試しあれ!15
エコモットでは、データ分析したい人を随時募集しています。とりあえず、PCA知っているレベルから面接します。DGX-STATIONでDNNしたい方、是非お声かけください。
参考サイト
- ユーザーガイド/Sylabs Inc.
- Singularityで分散深層学習
- [第2回 Singularity 勉強会] Singularity Hands-on
- singularity/HPCシステムズ株式会社
- Linuxコンテナ/ABCI Users Guide
- ここでは、tensorflowとかchainerなどのフレームワークを使って、GPUでごにょごにょする人をこう呼びます。 ↩
- 上述の他にnnablaやpytorch,kerasなどの他にこれから流行る未知のモノまでいろいろです。 ↩
- 基本pythonでしょうが、Derknetを使う場合はC++だったりします。 ↩
- 基本メンテナンスしない方向で考えます。 ↩
- またはnvidia-dockerよね? ↩
- nvidia-dockerを含む ↩
-
ってことで、
sudo
できる権限を与えないといけない ↩ -
セキュリティ的には問題ないんでしょうけど、マルチユーザ環境ではあまり
sudo
できる人は増やしたくないですよね。 ↩ - みんなが困っているので、ググればすぐ解決しますけどね。 ↩
- 技術的特異点ではありません ↩
- https://abci.ai/ja/about_abci/ ↩
- https://www.aist.go.jp/aist_j/press_release/pr2018/pr20181113/pr20181113.html ↩
- https://arxiv.org/abs/1811.05233 ↩
- 目的達成 ↩
- ちなみに、ソースからインストールする時、Goのインストールがパスにセンシティブなので、エラーの時はreadmeの通りやってみてください。 ↩