はじめに
ここで使えるようにした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やシステムの必要条件が読めます。
方法
コンテナを保存するディレクトリを作成して、コンテナをダウンロードします。
保存するコンテナは、オリジナルと区別するために末尾に「-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のマニュアルに記載があります。

なお、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