今回は、enrootとpyxisの導入についてご紹介します。
私は最初にそれぞれの名前を聞いたとき、某ポケットに入るモンスター*1や某声優ユニット*2を連想してしまいました。
enroot/pyxisってなぁに?
どちらもNVIDIAが提供するHPC用パッケージです。
enrootを利用すると、root権限なしでDockerコンテナを操作できるようになります。
Dockerではバックグラウンドでデーモンが動作し、その操作や設定の際にroot権限が(原則)必要ですが、
enrootを利用することで、個人の権限でコンテナの起動や設定が可能です。
enroot公式GitHub
pyxisは、Slurmのプラグインで、enrootをSlurmで使うために導入します。
pyxis公式GitHub
enrootインストール手順
インストール準備
enrootのインストールに必要なパッケージをインストールします。
sudo apt install parallel sudo apt install fuse-overlayfs libnvidia-container-tools squashfuse
環境確認
公式GitHubから環境確認モジュールをダウンロードして実行し、インストール可能か確認します。
3.5.0のバージョン部分は適宜変更してください。
Not Foundな場合は、実際にGitHubを見に行ったり、uname -mの結果を確認したりして、モノがあるか確認してみてください。
#公式GitHubからモジュールをダウンロード curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.5.0/enroot-check_3.5.0_$(uname -m).run #Runファイルに権限を付与 chmod +x enroot-check_*.run #enrootがインストールできるか確認 ./enroot-check_*.run --verify ./enroot-check_*.run
インストール
CPUアーキテクチャ(今回はamd64)を変数で指定し、インストールモジュールをダウンロードしてインストールします。
#アーキテクチャを変数で指定
arch=$(dpkg --print-architecture)
#debファイルをダウンロード
curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.5.0/enroot_3.5.0-1_${arch}.deb
curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.5.0/enroot+caps_3.5.0-1_${arch}.deb
#インストール
sudo apt install ./enroot*.deb
#使ったモジュールの掃除
ls -la
rm ./enroot
capsについて(参考ページより抜粋)
The "+caps" installer provides extra capabilities for unprivileged users to import and convert container images. You want that if you are configuring for your own personal use i.e. not a restricted multi-user server setup.
(機械翻訳)→「+caps」インストーラーは、権限のないユーザーがコンテナ イメージをインポートおよび変換するための追加機能を提供します。 これは、制限されたマルチユーザー サーバー設定ではなく、個人的な使用のために構成する場合に必要です。
初期設定
enroot.confをバックアップし、設定を変更します。
ENROOT_RUNTIME_PATHは作業ディレクトリ、ENROOT_DATA_PATHはコンテナ置き場を指定します。
#設定ファイルをバックアップ(コピー)
sudo cp /etc/enroot/enroot.conf /etc/enroot/enroot.conf.org
#設定ファイルを編集
sudo vi /etc/enroot/enroot.conf
#以下の内容をコメントアウトされている同項目の下に転記
ENROOT_RUNTIME_PATH ${HOME}/enroot
ENROOT_DATA_PATH /data/enroot/${USER}
動作確認
enrootが動作するか確認します。
#テスト用のコンテナをインポート enroot import docker://chuanwen/cowsay #コンテナを作成 enroot create --name cowsay chuanwen+cowsay.sqsh #コンテナを起動 enroot start cowsay
うまくいくと、以下のような出力がされます。
_______________________________________
/ If a child annoys you, quiet him by \
| brushing his hair. If this doesn't |
| work, use the other side of the brush |
\ on the other end of the child. /
---------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
以上で、enrootのインストールと動作確認は完了です。
(オプション)ディレクトリのパーミッション変更
複数人で使う場合、enrootのインストールディレクトリが導入ユーザーのパーミッションになってしまうため、他の人が使えなくなってしまいます。
その対応策として、インストールディレクトリのパーミッションを変更します。
今回は雑にnobodyユーザー、nongroupグループ、フルアクセスにしていますが、適宜調整してみてください。
sudo chown -R nobody:nogroup /data/enroot sudo chmod -R 777 /data/enroot sudo ls -la /data/ sudo ls -la /data/enroot/
pyxisインストール手順
続いて、pyxisのインストール手順を見ていきましょう。
インストール
公式GitHubからインストールモジュールをダウンロードしてビルドします。 そののち、設定ファイルを編集してSlurmのプラグインとして追加します。
git clone https://github.com/NVIDIA/pyxis.git cd pyxis sudo make install sudo vim /usr/local/etc/plugstack.conf #以下の内容を追加 required /usr/local/lib/slurm/spank_pyxis.so #Slurmの再起動 ##マスターノード sudo systemctl status slurmctld sudo systemctl restart slurmctld sudo systemctl status slurmctld ##計算ノード sudo systemctl status slurmd sudo systemctl restart slurmd sudo systemctl status slurmd
動作確認
Slurm経由で実行できるか確認します。
srun --partition=default --container-image=chuanwen/cowsay /usr/games/cowsay 'Hello Pyxis!'
うまくいくと、以下のような出力がされます。
pyxis: importing docker image: chuanwen/cowsay
pyxis: imported docker image: chuanwen/cowsay
______________
< Hello Pyxis! >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
以上で、pyxisのインストールと動作確認は完了です。