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