SingularityのコンテナにSpyderを追加する

Linux

はじめに

ここで使えるようにしたSingularityのコンテナでPythonのSpyderを使えるようにしました。

環境

一応入れてありますが、ホストにnvidia-container-toolkitは不要です。

- Debian 12 bookworm
- GO 1.21.3
- Singularity 4.0.1
- nvidia-driver 525.125.06-1~deb12u1
- nvidia-container-toolkit 1.14.3-1
- コンテナ
  docker://nvcr.io/nvidia/tensorflow:23.10-tf2-py3

コンテナ

下記のURLにあるコンテナを使います。
このURLの「Framework Containers Support Matrix」をクリックすると、コンテナに含まれるCUDAやシステムの必要条件が読めます。

TensorFlow | NVIDIA NGC
TensorFlow is an open source platform for machine learning. It provides comprehensive tools and libr...

方法

コンテナを保存するディレクトリを作成して、コンテナをダウンロードします。
保存するコンテナは、オリジナルと区別するために末尾に「-edit」を追記しておきます。

mkdir ~/singularity

cd ~/singularity

singularity build --sandbox tensorflow-23.10-tf2-py3-edit docker://nvcr.io/nvidia/tensorflow:23.10-tf2-py3

Spyderのインストール

Spyderをインストールするためにroot権限、書き込み可でSingularityに入ります。

singularity shell --writable --fakeroot ~/singularity/tensorflow-23.10-tf2-py3-edit

Singularityに入ったら、コマンドを打ちます。
pipのみでインストールすると依存関係のあるライブラリが不足します。
また、aptのみでインストールすると「/run/user/1000」の書き込み権限のエラーでSpyderが起動しません。

apt update
pip install spyder
apt install spyder3

インストールの途中でタイムゾーンの質問が2回ほどあります。
Time zoneを選択(数字を入力)します。
選択するのは以下の番号です。

6. Asia
79. Tokyo

インストール完了後、Spyderが起動するか確認します。

spyder

ユーザ権限でSpyderの起動確認

「–fakeroot」オプションを付けずにSpyderが起動するか確認します。

singularity run --nv ~/singularity/tensorflow-23.10-tf2-py3-edit

Singularityに入ったらSpyderを起動します。

spyder

コンテナに変換する

動作を確認したら、Singularityのコンテナ(sif形式)に変換します。

cd ~/singularity

singularity build tensorflow-23.10-tf2-py3-edit.sif tensorflow-23.10-tf2-py3-edit

作成したコンテナをSingularityから起動して動作を確認します。

singularity run --nv ~/singularity/tensorflow-23.10-tf2-py3-edit.sif

または

singularity shell ~/singularity/tensorflow-23.10-tf2-py3-edit.sif

アカウント管理がOpenLDAPの場合

OpenLDAPでアカウント認証を行いログイン、自動でホームディレクトリを作成した場合、/etc/subuidと/etc/subgidを修正する必要があります。
以下のRed Hatのマニュアルに記載があります。

コンテナ内外の root について理解する
コンテナを root として実行しているか、それとも一般ユーザーとして実行しているか。これは一見、極めて単純な質問です。すぐに答えたくなるかもしれませんが、ちょっと待ってください。あなたは脅威モデルを...

なお、OSインストール時に作成したユーザや、ローカルでuseaddを使ってアカウントを作成した場合は自動で登録されます。
Singularityを実行したアカウントが/etc/subuidと/etc/subgidに無い場合、以下のエラーが表示されます。

FATAL:   could not use fakeroot: no mapping entry found in /etc/subuid for 【アカウント名】

/etc/subuidに追記します。

sudo vi /etc/subuid

記載する内容です。
user1はOSインストール時に作成した一般ユーザです。
このとき、user2、user3は、OpenLDAPでアカウント認証を行いログイン、自動でホームディレクトリを作成したユーザなので、ファイルに登録する必要があります。
user1が10000なので、user2とuser3は、それぞれ10001、10002とします。
GIDはuser1と同様に65536とします。
なお、UIDは100000から165535が記述できます。

user1:100000:65536
user2:100001:65536
user3:100002:65536

/etc/subgidに追記します。

sudo vi /etc/subgid

記載内容は、/etc/subuidと同じです。

user1:100000:65536
user2:100001:65536
user3:100002:65536

記載後はuser2、user3でログインして、Singularityでコンテナを起動することができます。

Comments