ABCI Singularity エンドポイント
概要
ABCI Singularity エンドポイントでは、ABCI 内部向けに Singularity Container サービスを提供しています。このサービスは、SingularityPRO で用いるコンテナイメージをリモートビルドするための Remote Builder と、作成したコンテナイメージを保管・共有するための Container Library から成ります。ABCI 内部向けのサービスであるため、外部から直接アクセスすることはできません。
以下では、ABCI において本サービスを利用するための基本的な操作を説明します。詳細は Sylabs 社のドキュメントを参照下さい。
事前準備
モジュールのロード
本サービスを利用するため、以下のように SingularityPRO のモジュールをロードして下さい。
[username@es1 ~]$ module load singularitypro
アクセストークンの取得
Note
ABCI Singularity エンドポイントのアップデートに伴い、2023年3月以前に取得したアクセストークンは使用できなくなりました。そのため、再度アクセストークンを取得後、アクセストークンの登録を実施してください。
最初に、本サービスの認証に必要なアクセストークンを取得します。
インタラクティブノードで get_singularity_token
コマンドを実行して下さい。発行には ABCI のパスワード (利用者ポータルへのログインに使用するパスワード) の入力が必要です。
[username@es1 ~]$ get_singularity_token
ABCI portal password :
just a moment, please...
(The generated access token will be displayed.)
取得したアクセストークンは、この後の登録に必要になりますので、安全なところに控えておいて下さい。
Note
アクセストークンは、非常に長い1行の文字列で作られているため、途中に改行などが入らないよう注意して下さい。
リモートエンドポイントの設定確認
singularity remote list
を実行し、本サービスを提供している ABCI Singularity エンドポイント(cloud.se2.abci.local)が、リモートエンドポイントとして正しく設定されていることを確認して下さい。
[username@es1 ~]$ singularity remote list
NAME URI DEFAULT? GLOBAL? EXCLUSIVE? SECURE?
ABCI cloud.se2.abci.local ✓ ✓ ✓
SylabsCloud cloud.sylabs.io ✓ ✓
[username@es1 ~]$
Note
singularity remote list
コマンドの出力において、使用している端末により各列に?
マークが表示される場合があります。その場合は?
マークをチェックマークに読み替えてください。
Note
SylabsCloud は Sylabs が運営するパブリックサービスのエンドポイントです。https://cloud.sylabs.io/ にサインインし、アクセストークンを取得することで利用可能になります。
Note
Singularity のコンテナイメージは、Singularity Global Client を用いて取得することも可能です。詳細はSingularity Global Clientの利用を参照して下さい。
アクセストークンの登録
ABCI Singularity エンドポイントに対して、singularity remote login
を実行し、先に取得したアクセストークンを入力し、自身の SingularityPRO の設定ファイルに登録します。
[username@es1 ~]$ singularity remote login ABCI
Generate an access token at https://cloud.se2.abci.local/auth/tokens, and paste it here.
Token entered will be hidden for security.
Access Token:
INFO: Access Token Verified!
INFO: Token stored in /home/username/.singularity/remote.yaml
[username@es1 ~]$
アクセストークンを再取得した際にも、上記コマンドを再実行し、アクセストークンを再登録して下さい。既存のアクセストークンは上書きされます。
Note
現在、アクセストークンの有効期限は1年に設定されています。
Remote Builder
最初に、コンテナイメージをビルドするための定義ファイルを作成して下さい。以下の例では、Docker Hub から取得した Ubuntu のコンテナイメージをベースとして、追加パッケージのインストールと、コンテナを実行した時に実行されるコマンドを指定しています。定義ファイルの詳細については、Definition Files を参照して下さい。
[username@es1 ~]$ vi ubuntu.def
[username@es1 ~]$ cat ubuntu.def
Bootstrap: docker
From: ubuntu:18.04
%post
apt-get update
apt-get install -y lsb-release
%runscript
lsb_release -d
[username@es1 ~]$
次に、singularity build
コマンドに --remote
を指定して、ubuntu.def の内容からコンテナイメージ ubuntu.sif をリモートビルドで作成して下さい。
[username@es1 ~]$ singularity build --remote ubuntu.sif ubuntu.def
INFO: Remote "cloud.se2.abci.local" added.
INFO: Access Token Verified!
INFO: Token stored in /root/.singularity/remote.yaml
INFO: Remote "cloud.se2.abci.local" now in use.
INFO: Starting build...
:
:
INFO: Build complete: ubuntu.sif
[username@es1 ~]$
動作確認として singularity run
でコンテナイメージを起動する例を以下に示します。定義ファイル内で指定した lsb_release -d
が実行され、その結果が出力されています。
[username@es1 ~]$ qrsh -g grpname -l rt_C.small=1 -l h_rt=1:00:00
[username@g0001 ~]$ module load singularitypro
[username@g0001 ~]$ singularity run ubuntu.sif
Description: Ubuntu 18.04.6 LTS
[username@g0001 ~]$
Container Library (Experimental)
作成したコンテナイメージを Container Library にアップロードし、他の ABCI 利用者に公開することができます。1人あたり、合計 100GiB までアップロードして保存することができます。
Note
Container Library にアップロードしたコンテナイメージに対して、アクセス制御の設定はできません。つまり、ABCIの利用者であれば誰でもアクセス可能になりますので、アップロードするイメージが適切なものであるか十分に確認して下さい。
コンテナイメージの署名鍵の作成と登録
Container Library へコンテナイメージをアップロードして、ABCI 内に公開する場合には、事前に鍵ペアを作成し、KeyStore に公開鍵を登録して下さい。コンテナイメージの作成者は、秘密鍵を用いてコンテナイメージに署名し、コンテナイメージの利用者は KeyStore に登録されている公開鍵を用いてその署名を検証することが可能です。
鍵ペアの作成
singularity key newpair
により鍵ペアを作成します。
[username@es1 ~]$ singularity key newpair
Enter your name (e.g., John Doe) :
Enter your email address (e.g., john.doe@example.com) :
Enter optional comment (e.g., development keys) :
Enter a passphrase :
Retype your passphrase :
Would you like to push it to the keystore? [Y,n]
Generating Entity and OpenPGP Key Pair... done
各入力値の説明は以下のとおりです。
項目 | 入力値 |
---|---|
Enter your name | ABCIアカウント名を入力してください。 |
Enter your email address | email address となっていますが、ABCIアカウント名を入力して下さい。 |
Enter optional comment | この鍵ペアにつけておきたい任意のコメントを入力します。 |
Enter a passphrase | パスフレーズを決めて入力して下さい。コンテナイメージを署名する時などに必要になります。 |
Would you like to push it to the keystore? | 公開鍵を Keystore にアップロードする場合は Y を入力して下さい。 |
鍵の一覧表示
singularity key list
を実行すると、作成した鍵も含め、ローカルの鍵リングに入っている公開鍵の情報を確認できます。
[username@es1 ~]$ singularity key list
Public key listing (/home/username/.singularity/sypgp/pgp-public):
:
:
--------
7) U: username (comment) <username>
C: 2020-06-15 03:40:05 +0900 JST
F: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
L: 4096
--------
[username@es1 ~]$
Keystore に登録されている鍵情報を取得するには、singularity key search -l
に ABCIアカウント名を指定します。
[username@es1 ~]$ singularity key search -l username
Showing 1 results
FINGERPRINT ALGORITHM BITS CREATION DATE EXPIRATION DATE STATUS NAME/EMAIL
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY RSA 4096 2020-06-15 03:40:05 +0900 JST [ultimate] [enabled] username (comment) <username>
[username@es1 ~]$
Keystore への公開鍵の登録
鍵ペアの作成時に、Keystore へのアップロードを指定しなかった場合、あとからアップロードすることもできます。
Warning
Keystore に登録した公開鍵を削除することはできません。
[username@es1 ~]$ singularity key list
0) U: username (comment) username
C: 2020-08-08 04:28:35 +0900 JST
F: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
L: 4096
--------
この 0 番の公開鍵をアップロードするには、F:
のところに表示されているフィンガープリントを singularity key push
に指定します。
[username@es1 ~]$ singularity key push ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
public key `ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' pushed to server successfully
[username@es1 ~]$ singularity key search -l username
Showing 1 results
FINGERPRINT ALGORITHM BITS CREATION DATE EXPIRATION DATE STATUS NAME/EMAIL
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ RSA 4096 2020-06-15 03:40:05 +0900 JST [ultimate] [enabled] username (comment) <username>
Keystore に登録されている公開鍵の取得
Keystore に登録されている公開鍵は、ダウンロードして自分の鍵リングに保存することができます。以下の例では、username2 で検索して見つけた公開鍵をダウンロードして、保存しています。鍵につけられたコメントにマッチする文字列を指定して検索することもできます。singularity key pull
には、フィンガープリントを指定します。
[username@es1 ~]$ singularity key search -l username2
Showing 2 results
FINGERPRINT ALGORITHM BITS CREATION DATE EXPIRATION DATE STATUS NAME/EMAIL
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA RSA 4096 2020-06-22 11:51:45 +0900 JST [ultimate] [enabled] username2 (comment) <username2>
[username@es1 ~]$ singularity key pull AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1 key(s) added to keyring of trust /home/username/.singularity/sypgp/pgp-public
[username@es1 ~]$ singularity key list
:
:
1) U: username2 (comment) <username2>
C: 2020-08-10 11:51:45 +0900 JST
F: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
L: 4096
--------
[username@es1 ~]$
鍵の削除
自分の鍵リングに登録されている公開鍵は、singularity key remove
に鍵のフィンガープリントを指定して削除することができます。Keystore に登録された公開鍵を削除することはできません。
[username@es1 ~]$ singularity key remove AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
コンテナイメージのアップロード
Container Library にアップロードする前に、コンテナイメージに署名します。
singularity key list -s
で鍵の番号を確認し、singularity sign
で署名します。
-k
オプションで鍵の番号を指定して下さい。以下の例では 2 番の鍵を使用して、ubuntu.sif
へ署名しています。
[username@es1 ~]$ singularity key list -s
Public key listing (/home/username/.singularity/sypgp/pgp-secret):
:
:
--------
2) U: username (comment) <username>
C: 2020-06-15 03:40:05 +0900 JST
F: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
L: 4096
--------
[username@es1 ~]$ singularity sign -k 2 ./ubuntu.sif
Signing image: ./ubuntu.sif
Enter key passphrase :
Signature created and applied to ./ubuntu.sif
Container Library におけるコンテナイメージの場所は、library://username/collection/repository:tag
という形式の URI で表されます。下記の各構成要素の説明を参照し、アップロード先となる URI を決定してください。
項目名 | 値 |
---|---|
username | 自分のABCIアカウント名を指定します。 |
collection | コレクション名を任意の文字列で指定します。 |
repository | リポジトリ名を任意の文字列で指定します。 |
tag | 同じコンテナイメージを識別するための文字列です。バージョンやリリース日、リビジョン番号や latest などの文字列で指定します。 |
コレクション名を abci-lib
、 リポジトリ名を ubuntu
、タグとして latest
を指定してアップロードする例を以下に示します。
[username@es1 ~]$ singularity push ubuntu.sif library://username/abci-lib/ubuntu:latest
INFO: Container is trusted - run 'singularity key list' to list your trusted keys
35.36 MiB / 35.36 MiB [===========================================================================================================================================================================================================] 100.00% 182.68 MiB/s 0s
[username@es1 ~]$
コンテナイメージのダウンロード
Container Library にアップロードされたコンテナイメージは、以下のようにダウンロードできます。
[username@es1 ~]$ singularity pull library://username/abci-lib/ubuntu:latest
INFO: Downloading library image
35.37 MiB / 35.37 MiB [=============================================================================================================================================================================================================] 100.00% 353.47 MiB/s 0s
INFO: Download complete: ubuntu_latest.sif
[username@es1 ~]$
署名が検証できない場合は、以下のような WARNING メッセージが出力されますが、ダウンロードは行われます。
WARNING: Skipping container verification
ダウンロードした後に singularity verify
を使って署名を検証することもできます。
以下の例では、Keystore に登録されている公開鍵で署名が検証されています。自分の鍵リングに登録されている公開鍵で検証された場合は、REMOTE
ではなく LOCAL
と出力されます。検証できなかった場合は WARNING メッセージが出力されます。
[username@es1 ~]$ singularity verify ubuntu_latest.sif
Verifying image: ubuntu_latest.sif
[REMOTE] Signing entity: username (comment) <username>
[REMOTE] Fingerprint: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Objects verified:
ID |GROUP |LINK |TYPE
------------------------------------------------
1 |1 |NONE |Def.FILE
2 |1 |NONE |JSON.Generic
3 |1 |NONE |FS
Container verified: ubuntu_latest.sif
Note
検証に失敗した場合でもコンテナイメージを実行することはできますが、検証可能なコンテナイメージの使用を推奨します。
コンテナイメージの検索
Container Library にアップロードされたコンテナイメージをキーワードで検索することができます。
[username@es1 ~]$ singularity search hello
No users found for 'hello'
No collections found for 'hello'
Found 1 containers for 'hello'
library://username/abci-lib/helloworld
Tags: latest
コンテナイメージの削除
Container Library にアップロードされたコンテナイメージは、singularity delete
で削除することができます。
[username@es1 ~]$ singularity delete library://username/abci-lib/helloworld:latest
Note
library://username/abci-lib/helloworld:latest
のように、タグやIDを指定してコンテナイメージを削除することはできますが、library://username/abci-lib/helloworld
のようにコンテナの名前そのものを削除することはできません。
コンテナイメージ一覧表示
Container Library にアップロードされたコンテナイメージ一覧情報を表示することができます。
コレクション名一覧はsingularity enterprise get col
で表示できます。その際、引数としてABCIアカウント名を指定します。
[username@es1 ~]$ singularity enterprise get col username
ID Name Num. Containers
username/tensorflow-test tensorflow-test 1
username/ubuntu-test ubuntu-test 2
[username@es1 ~]$
コレクション内のリポジトリ一覧はsingularity enterprise get rep
で表示できます。その際、引数としてsingularity enterprise get col
で表示されるIDを指定します。
[username@es1 ~]$ singularity enterprise get rep username/ubuntu-test
ID Name Description Images Tags Size DownloadCount
username/ubuntu-test/ubuntu ubuntu 1 0 64.0 MiB 3
username/ubuntu-test/ubuntu2 ubuntu2 1 0 67.0 MiB 5
[username@es1 ~]$
コンテナイメージの情報はsingularity enterprise get img
で表示できます。その際、引数としてsingularity enterprise get rep
で表示されるIDを指定します。
[username@es1 ~]$ singularity enterprise get img username/ubuntu-test/ubuntu2
ID Tags Arch Description Size Signed Encrypted Uploaded
username/ubuntu-test/ubuntu2:sha256.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [20221118 latest] amd64 67.0 MiB true false true
[username@es1 ~]$
Container Libraryの使用量表示
Container Libraryの使用量を、show_container_library_usage
で表示することができます。表示の際には ABCI のパスワードの入力が必要です。
[username@es1 ~]$ show_container_library_usage
ABCI portal password :
just a moment, please...
used(GiB) limit(GiB) num_of_repositories
3 100 6
アクセストークン
ここでは、取得したアクセストークンに関するコマンドを説明します。
アクセストークン一覧表示
アクセストークンの一覧を、list_singularity_tokens
で表示することができます。表示の際には ABCI のパスワードの入力が必要です。
[username@es1 ~]$ list_singularity_tokens
ABCI portal password :
just a moment, please...
Token ID: XXXXXXXXXXXXXXXXXXXXXXXX
Issued: Apr 5, 2023 at 6:55 pm JST
Expires: Apr 4, 2024 at 6:55 pm JST
Token ID: XXXXXXXXXXXXXXXXXXXXXXXX
Issued: Apr 6, 2023 at 12:14 pm JST
Expires: Apr 5, 2024 at 12:14 pm JST
アクセストークンの無効化
取得したアクセストークンは、singularity enterprise delete token
で無効にすることができます。list_singularity_tokens
で表示されたアクセストークン一覧から、無効にしたい Token ID を引数として指定します。
[username@es1 ~]$ singularity enterprise delete token <Token ID>
INFO: Revoking token XXXXXXXXXXXXXXXXXXXXXXXX
[username@es1 list_singularity_tokens]$