モチベーション
前回の記事でDocker上に自作の環境を作成した。こいつをスパコン上で動かそうと思ったのだが, 1ユーザーにSudo権限が付与されているはずもなくDockerがインストールできず途方に暮れる。
-> スパコン上にはSingulairyというDockerみたいなやつ(ざっくりとした理解)がプリインストールされていた。これを使えばSudo権限なしに自作のDockerイメージが動かせるらしい。
Singularityの利点についてはこちらが参考になった。GPU環境の整備が楽だったりするらしいです。
作業の流れ
- Singularityをローカルにインストール
- SingularityでDocker Hub上の自作イメージをsifファイルに変換
- scpでスパコンに転送
- スパコン上のSingularityでsifファイルを開く
そもそもスパコン側のSingularityで直接Docker Hubから自分のイメージを取ってくれればこの様な面倒なプロセスは必要ない。私の使っているスパコンではSingularityが直接Docker Hubにアクセスすることを禁止されているためこのようなめんどくさいプロセスを踏んでいる。
Singularityが直接Docker Hubにアクセスできる場合, もっと楽な方法があるのでググることをおすすめする。
1. SingularityをローカルのUbuntuにインストール
singularityにより作成されるsifファイルはバージョン間の互換性がないらしい。私はまずここでハマった。そこでスパコン上のsingularityのバージョンを調べ, 同じバージョンのものをローカル上に導入する。
(スパコン上で)
$ singularity --version
私のものはバージョン2.6.1だったのでこれを導入する。導入はこのサイトの「Install a specific release」を参考にした。まずは必要なパッケージのインストール。
$ sudo apt-get update && \
sudo apt-get install \
python \
dh-autoreconf \
build-essential \
libarchive-dev
Code language: JavaScript (javascript)
続いてSingularityをインストール。Versionは適宜要変更。
$ VER=2.6.1
$ wget https://github.com/sylabs/singularity/releases/download/$VER/singularity-$VER.tar.gz
$ tar xvf singularity-$VER.tar.gz
$ cd singularity-$VER
$ ./configure --prefix=/usr/local --sysconfdir=/etc
$ make
$ sudo make install
Code language: PHP (php)
2. SingularityでDocker Hub上の自作イメージをsifファイルに変換
あらかじめDocker hubにアップロードしておいたイメージを先程インストールしたSignularityで変換する。私の場合privateなイメージを使うのでログインしないと以下のエラーで蹴られる。
ERROR UNAUTHORIZED: authentication required
これを解決するには環境変数にDocker Hubのログイン情報を出力すればよい。
$ export SINGULARITY_DOCKER_USERNAME=<your id>
$ export SINGULARITY_DOCKER_PASSWORD=<your password>
Code language: HTML, XML (xml)
変換は以下のコードで実行
$ singularity pull --name <imagenameforsigularity>.sif docker://<your repository info>
Code language: HTML, XML (xml)
3. scpでスパコンに転送
普通に先程作成した.sifファイルをscpでスパコンに送る。
$ scp <path to local sif file> user@targetip:<path to the remote folder>
Code language: HTML, XML (xml)
4. スパコン上のsingularityでsifファイルを開く
スパコン上で以下をタイプ。作成した環境に自動的に移行するはず。
$singularity run <yoursifile>.sif
Code language: HTML, XML (xml)