Lifematics Corporate Blog

Lifematics社のコーポレートブログへようこそ!

enrootとpyxis入れてみた

今回は、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」インストーラーは、権限のないユーザーがコンテナ イメージをインポートおよび変換するための追加機能を提供します。 これは、制限されたマルチユーザー サーバー設定ではなく、個人的な使用のために構成する場合に必要です。

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のインストールと動作確認は完了です。