--- title: Apptainer --- [toc] ## 利用環境{#enviroment} ### 利用できるバージョン・システム{#version} 以下の表に示すApptainer を利用することができます。 OSに付属するパッケージとして提供されているため、モジュールファイルによる環境設定は不要です。 |バージョン | モジュールファイル名 | システムB/C | システムG | クラウドシステム | 備考 |--- | --- | --- | --- | --- | --- |1.1.2 | none | + | + | + | 旧名称:singularity \+ : すべてのユーザが利用可能 \- : 利用不可 ## 利用方法{#usage} 1. `ubuntu.sif` というコンテナイメージを用いて,ハイブリッド並列を行うプログラム(`a.out`)を実行するための,ジョブスクリプト(`test.sh`)を作成します ```nohighlight #!/bin/bash #============ Slurm Options =========== #SBATCH -p gr19999b # ジョブキュー(パーティション)の指定。投入したいキュー名に適宜変更が必要。 #SBATCH -t 1:00:00 # 経過時間の指定(1時間を指定する例)。 #SBATCH --rsc p=2:c=40 # 要求リソースの指定(2プロセス,40コアを使用するハイブリッド並列の例)。 #SBATCH -o %x.%j.out # ジョブの標準出力ファイルの指定。%xはジョブ名、%j はジョブIDに置換されます。 #============ Shell Script ============ set -x ## GPUを使わない場合 srun apptainer exec --bind `pwd`,/opt/system,/usr/lib64 --env LD_LIBRARY_PATH=/usr/lib64 ubuntu.sif ./a.out ## GPUを使う場合(--nvを付加することでGPU対応になる) srun apptainer exec --nv --bind `pwd`,/opt/system,/usr/lib64 --env LD_LIBRARY_PATH=/usr/lib64 ubuntu.sif ./a.out ``` #### 主要なオプション |オプション | 意味 | 実行例 |---------- | ----------- | ----------- | | --bind _MOUNT\_DIR_ | マウントするディレクトリを指定| --bind /LARGE0,LARGE1,/opt/system,/usr/lib64 | | --env _ENVIRONMENT_ | 環境変数を指定 | --env LD_LIBRARY_PATH=/usr/lib64 | | --nv | GPUを使用する場合に追記| --nv | 2. 1.で作成したジョブスクリプトを用いてジョブ投入. ```nohighlight $ sbatch test.sh Submitted batch job {jobid} ``` 3. 実行結果確認. ```nohighlight $ cat test.sh.{jobid}.out ================ Slrum Info ================ DATE = 2023-03-08T14:38:10+09:00 PARTITION = gr19999d JOB_ID = {jobid} JOB_NAME = test.sh NNODES = 1 RSC_OPT = p=1:t=8:c=8:m=8G ============================================ _________ < hello!! > --------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ``` ## コンテナイメージの作成方法 ### Apptainer(Singurarity)のコンテナイメージを新規作成 ここでは,ubuntu22.04のdockerイメージをベースパッケージとして python3とtensorflowをインストールしたコンテナイメージを作ります. 1. コンテナを生成するためのレシピファイルを作成し,`ubuntu22_tensorflow.def` として保存する. ```nohighlight Bootstrap: docker From: ubuntu:22.04    %post apt-get update apt-get install -y python3 python3-pip pip3 install tensorflow ``` 2. 1.で生成したレシピファイル(`ubunutu22_tensorflow.def`)を使用して,コンテナイメージのビルドを実行する.コンテナイメージは.`ubuntu22_tensorflow.sif` として保存する. ```nohighlight $ apptainer build --fakeroot {コンテナイメージの保存先} {コンテナイメージを生成するためのレシピファイル}   (例) $ apptainer build --fakeroot ~/ubuntu22_tensorflow.sif ubuntu22_tensorflow.def INFO: Starting build... Getting image source signatures (中略) INFO: Creating SIF file... INFO: Build complete: ubuntu22_tensorflow.sif ``` * コンテナイメージの保存先は,ホームディレクトリ配下に設定して下さい. 保存先を大容量ディスクにするとコンテナイメージのビルドに失敗します. 3. 動作確認 ```nohighlight ## コンテナを起動する $ apptainer shell ~/ubuntu22_tensorflow.sif   ## Python3を立ち上げる Apptainer> python3 Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux Type "help", "copyright", "credits" or "license" for more information.   ## Tensorflowの動作確認 >>> import tensorflow as tf >>> tf.__version__ '2.11.0' ``` ### DockerHubにアップロードされているコンテナイメージを使用 1. Apptainerのコンテナイメージを保存するディレクトリへ移動する ```nohighlight $ cd container_image ``` 2. DockerHubからコンテナイメージをダウンロードし,ビルドする ```nohighlight $ apptainer build lolcow.sif docker://godlovedc/lolcow INFO: Starting build... Getting image source signatures (中略) INFO: Creating SIF file... INFO: Build complete: lolcow.sif ``` * Build failed となった場合は,再度ビルドをお試しください. 3. コンテナイメージが作成されていることを確認 ```nohighlight $ ls lolcow.sif lolcow.sif ```