FAQ
Q. インタラクティブ利用時にCtrl+Sを入力するとそれ以降のキー入力ができない
macOS、Windows、Linuxなどの標準のターミナルエミュレータでは、デフォルトでCtrl+S/Ctrl+Qによる出力制御が有効になっているためです。無効にするためには、ローカルPCのターミナルエミュレータで以下を実行してください。
$ stty -ixon
インタラクティブノードにログインした状態で実行しても同等の効果があります。
Q. 認証が必要なコンテナレジストリをSingularityで利用できない
SingularityPROにはdocker login
相当の機能として、環境変数で認証情報を与える機能があります。
[username@es1 ~]$ export SINGULARITY_DOCKER_USERNAME='username'
[username@es1 ~]$ export SINGULARITY_DOCKER_PASSWORD='password'
[username@es1 ~]$ singularity pull docker://myregistry.azurecr.io/namespace/repo_name:repo_tag
SingularityPROの認証に関する詳細は、下記のユーザーガイドをご参照ください。
Q. 複数の計算ノードを割り当て、それぞれの計算ノードで異なる処理をさせたい
qrsh
やqsub
で-l rt_F=N
オプションもしくは-l rt_AF=N
オプションを与えると、N個の計算ノードを割り当てることができます。
割り当てられた計算ノードでそれぞれ異なる処理をさせたい場合にMPIが使えます。
[username@es1 ~]$ qrsh -g grpname -l rt_F=3 -l h_rt=1:00:00
[username@g0001 ~]$ module load hpcx/2.12
[username@g0001 ~]$ mpirun -hostfile $SGE_JOB_HOSTLIST -np 1 command1 : -np 1 command2 : -np 1 command3
他にも、計算ノードへのSSHログインを有効にすることで、割り当てられた計算ノードにそれぞれ異なる処理をさせることができます。
計算ノードへのSSHログインアクセスは、qrsh
やqsub
実行時に-l USE_SSH=1
オプションを指定することで有効になります。
USE_SSH
オプションについては、付録. 計算ノードへのSSHアクセスを参照してください。
以下はSSHアクセスを使用して割り当てられた計算ノードに異なる処理を実行させる例です。
[username@es1 ~]$ qrsh -g grpname -l rt_F=3 -l h_rt=1:00:00 -l USE_SSH=1
[username@g0001 ~]$ cat $SGE_JOB_HOSTLIST
g0001
g0002
g0003
[username@g0001 ~]$ ssh -p 2222 g0001 command1 &
[username@g0001 ~]$ ssh -p 2222 g0002 command2 &
[username@g0001 ~]$ ssh -p 2222 g0003 command3 &
Q. SSHのセッションが閉じられてしまうのを回避したい
SSHでABCIに無事接続したしばらく後に、SSHのセッションが閉じられてしまうことがあります。このような場合は、SSHクライアントとサーバ間でKeepAliveの通信をすることで回避できる場合があります。
KeepAliveを適用するには、利用者の端末でシステムのssh設定ファイル(/etc/ssh/ssh_config)、またはユーザ毎の設定ファイル(~/.ssh/config)に、オプション ServerAliveInterval を60秒程度で設定してください。
[username@userpc ~]$ vi ~/.ssh/config
[username@userpc ~]$ cat ~/.ssh/config
(snip)
Host as.abci.ai
ServerAliveInterval 60
(snip)
[username@userpc ~]$
Note
ServerAliveInterval の初期値は 0 (KeepAliveなし)です。
Q. ジョブの混雑状況を知りたい
ジョブの混雑状況に加え、計算ノードの利用状況、データセンター全体の消費電力やPUE、冷却設備の稼働状況等を可視化するWebサービスを動作させています。
ABCI内部サーバvws1
の3000/tcpポートで動作していますので、以下の通りにアクセスできます。
SSHトンネルの設定をしてください。
以下の例では、ローカルPCの$HOME/.ssh/config
に、ProxyCommandを用いてas.abci.ai経由でABCI内部サーバにSSHトンネル接続する設定をしています。
ABCIシステム利用環境のSSHクライアントによるログイン::一般的なログイン方法も参考にしてください。
Host *.abci.local
User username
IdentityFile /path/identity_file
ProxyCommand ssh -W %h:%p -l username -i /path/identity_file as.abci.ai
ローカルPCの3000番ポートをvws1サーバの3000/tcpポートに転送するSSHトンネルを作成します。
[username@userpc ~]$ ssh -L 3000:vws1:3000 es.abci.local
ブラウザでhttp://localhost:3000/
にアクセスします。
Note
ABCI User Groupでは、インタラクティブノード上で混雑状況を確認する方法が紹介されていますので、こちらもご参照ください。
Q. ダウンロード済みのデータセットはありませんか?
データセットの利用を参照してください。
Q. バッチジョブでSingularity pullでのイメージファイル作成に失敗する
バッチジョブでSingularity pullでのイメージファイルを作成しようとした際に、mksquashfs の実行ファイルが見つからず作成に失敗することがあります。
INFO: Converting OCI blobs to SIF format
FATAL: While making image from oci registry: while building SIF from layers: unable to create new build: while searching for mksquashfs: exec: "mksquashfs": executable file not found in $PATH
これは、以下のように、/usr/sbin
にパスを通すことで回避できます。
実行例)
[username@g0001 ~]$ export PATH="$PATH:/usr/sbin"
[username@g0001 ~]$ module load singularitypro
[username@g0001 ~]$ singularity run --nv docker://caffe2ai/caffe2:latest
Q. 計算ノードでsingularity build/pullすると容量不足でエラーになる
singularity build/pull コマンドは一時ファイルの作成場所として /tmp
を使用します。
大きなコンテナを計算ノード上でsingularity build/pullする際に /tmp
の容量が足りずエラーになる場合があります。
FATAL: While making image from oci registry: error fetching image to cache:
while building SIF from layers: conveyor failed to get: writing blob: write
/tmp/0123456789.1.gpu/bundle-temp-0123456789/oci-put-blob0123456789:
no space left on device
容量が足りずエラーになる場合は、次のようにローカルスクラッチを使用するようSINGULARITY_TMPDIR
環境変数を設定してください。
[username@g0001 ~]$ SINGULARITY_TMPDIR=$SGE_LOCALDIR singularity pull docker://nvcr.io/nvidia/tensorflow:20.12-tf1-py3
Q. ジョブ ID を調べるには?
qsub
コマンドを使ってバッチジョブを投入した場合は、コマンドがジョブ ID を出力しています。
[username@es1 ~]$ qsub -g grpname test.sh
Your job 1000001 ("test.sh") has been submitted
qrsh
を使っている場合は、環境変数 JOB_ID の値を見ることで確認できます。この変数は、qsub (バッチジョブ) の場合でも利用可能です。
[username@es1 ~]$ qrsh -g grpname -l rt_C.small=1 -l h_rt=1:00:00
[username@g0001 ~]$ echo $JOB_ID
1000002
[username@g0001 ~]$
すでに投入済みのジョブに付与されているジョブ ID を確認するには、qstat
コマンドを使ってください。
[username@es1 ~]$ qstat
job-ID prior name user state submit/start at queue jclass slots ja-task-ID
------------------------------------------------------------------------------------------------------------------------------------------------
1000003 0.00000 test.sh username qw 08/01/2020 13:05:30
対象のジョブがすでに完了している場合は、qacct -j
を使ってジョブ ID を調べます。-b
や -e
オプションが、対象範囲を限定するために役に立ちます。qacct(1) man ページ (インタラクティブノードで man qacct
) で使い方を確認できます。下記の例は、完了したジョブのうち、2020年 9月 1日 以降に開始されていたものを出力しています。jobnumber
がジョブ ID です。
[username@es1 ~]$ qacct -j -b 202009010000
==============================================================
qname gpu
hostname g0001
group grpname
owner username
:
jobname QRLOGIN
jobnumber 1000010
:
qsub_time 09/01/2020 16:41:37.736
start_time 09/01/2020 16:41:47.094
end_time 09/01/2020 16:45:46.296
:
==============================================================
qname gpu
hostname g0001
group grpname
owner username
:
jobname testjob
jobnumber 1000120
:
qsub_time 09/07/2020 15:35:04.088
start_time 09/07/2020 15:43:11.513
end_time 09/07/2020 15:50:11.534
:
Q. 割り当てられた全計算ノードでコマンドを並列に実行したい
ABCIでは、割り当てられた全計算ノードで並列にLinuxコマンドを実行するugedsh
コマンドを用意しています。
ugedsh
コマンドの引数で指定したコマンドは、各ノードで1回ずつ実行されます。
実行例)
[username@es1 ~]$ qrsh -g grpname -l rt_F=2
[username@g0001 ~]$ ugedsh hostname
g0001: g0001.abci.local
g0002: g0002.abci.local
Q. 計算ノード(A)と計算ノード(V)の違いが知りたい
ABCIは、2021年5月にABCI 2.0にアップグレードされました。 従来より提供していたNVIDIA V100搭載の計算ノード(V)に加えて、NVIDIA A100を搭載した計算ノード(A)が利用できるようになりました。
ここでは計算ノード(A)と計算ノード(V)の違い、および、計算ノード(A)を利用する際の注意点などを説明します。
資源タイプ名
計算ノード(A)と計算ノード(V)では資源タイプ名が異なります。計算ノード(A)は、以下の資源タイプ名を指定することで利用できます。
資源タイプ | 資源タイプ名 | 割り当て物理CPUコア数 | 割り当てGPU数 | メモリ(GiB) |
---|---|---|---|---|
Full | rt_AF | 72 | 8 | 480 |
AG.small | rt_AG.small | 9 | 1 | 60 |
より詳しい資源タイプについては、利用可能な資源タイプを参照してください。
課金
利用可能な資源タイプに示す通り、計算ノード(A)と計算ノード(V)では資源タイプ課金係数が異なります。このため、課金に基づいて算出される、使用ABCIポイント数も異なります。
計算ノード(A)利用時の使用ABCIポイント数は、以下の通りとなります。
資源タイプ名 実行優先度 |
On-demandおよびSpotサービス 実行優先度: -500(既定) (ポイント/時間) |
On-demandおよびSpotサービス 実行優先度: -400 (ポイント/時間) |
Reservedサービス (ポイント/日) |
---|---|---|---|
rt_AF | 3.0 | 4.5 | 108 |
rt_AG.small | 0.5 | 0.75 | NA |
Operating System
計算ノード(A)と計算ノード(V)では、使用しているOSが異なります。
項目 | OS |
---|---|
計算ノード(A) | Red Hat Enterprise Linux 8.2 |
計算ノード(V) | Rocky Linux 8.6 |
Rocky LinuxとRed Hat Enterprise Linuxは互換性がありますが、動作を保証するものではありません。 計算ノード(A)向けのプログラムは、計算ノード(A)や後述するインタラクティブノード(A)を使用してビルドしてください。
CUDA Version
計算ノード(A)に搭載されているNVIDIA A100はCompute Capability 8.0に準拠しています。
CUDA 10以前ではCompute Capability 8.0をサポートしていません。そのため、計算ノード(A)では、Compute Capability 8.0をサポートするCUDA 11以降を使用してください。
Note
Environment Modulesでは、試験用にCUDA 10も利用可能としていますが、動作を保証するものではありません。
インタラクティブノード(A)
ABCIでは、計算ノード(A)向けのプログラム開発の利便性のため、インタラクティブノード(A)を提供しています。 インタラクティブノード(A)は、計算ノード(A)と同様のソフトウェア構成を有しています。 インタクティブノード(A)でビルドしたプログラムは、計算ノード(V)での動作を保証しません。
インタラクティブノードの使い分けについては以下を参照してください。
インタラクティブノード(V) | インタラクティブノード(A) | |
---|---|---|
利用者がログインできるか? | Yes | Yes |
計算ノード(V)向けのプログラム開発が可能か? | Yes | No |
計算ノード(A)向けのプログラム開発が可能か? | No | Yes |
計算ノード(V)向けのジョブ投入が可能か? | Yes | Yes |
計算ノード(A)向けのジョブ投入が可能か? | Yes | Yes |
インタラクティブノード(A)の詳細は、インタラクティブノードを参照してください。
Q. 過去のABCI Environment Modulesを利用したい
ABCIでは、過去のEnvironment Modulesを提供しています。
各年度でのEnvironment Modulesを以下にインストールしていますので、使用したい年度のパスをMODULE_HOME
環境変数に設定し、設定ファイルを読み込んでください。
なお、これら過去のEnvironment Modulesはサポート対象外です。あらかじめご了承ください。
Note
2023年度に計算ノード(V)とインタラクティブノード(V)のOSをCentOS 7からRocky Linux 8に変更しました。 これによりCentOS 7用の過去のEnvironment Modulesは新しい計算ノード(V)とインタラクティブノード(V)では動作しません。 また、メモリインテンシブノードのサービスは、2023年10月1日15:00 に終了したため、CentOS 7用の過去のEnvironment Modulesは利用できません。
バージョン | インストールパス | 計算ノード(V) | 計算ノード(A) |
---|---|---|---|
2020年度版 | /apps/modules-abci-1.0 |
- | - |
2021年度版 | /apps/modules-abci-2.0-2021 |
- | Yes |
2022年度版 | /apps/modules-abci-2.0-2022 |
- | Yes |
2023年度版 | /apps/modules-abci-2.0-2023 |
Yes | Yes |
以下は2021年度版Environment Modulesを利用する例です。
sh, bashの場合:
export MODULE_HOME=/apps/modules-abci-2.0-2021
. ${MODULE_HOME}/etc/profile.d/modules.sh
csh, tcshの場合:
setenv MODULE_HOME /apps/modules-abci-2.0-2021
source ${MODULE_HOME}/etc/profile.d/modules.csh
Q. inodeの使用量を削減したい
大量のファイルを生成する処理においてinodeの使用量を低減する方法として、ZIPファイルを利用する方法があります。
ここではPythonのstream-zipモジュールを使用して、生成したデータをZIPファイルに格納する例を示します。 なお、stream-zipに関する詳細は、stream-zipのドキュメント をご参照ください。
# このプログラムは、ファイル名`file0000`から`file0099`の
# 100ファイルを収めた`output.zip`ファイルを生成します。
from datetime import datetime
from stream_zip import ZIP_64, stream_zip
def gen_file(i):
modified_at = datetime.now()
perms = 0o600
filename = f'file{i:04d}'
def data_gen():
yield b"aaaaa"
return filename, modified_at, perms, ZIP_64, data_gen()
def generator():
for i in range(100):
yield gen_file(i)
with open("output.zip", "wb") as f:
for chunk in stream_zip(generator()):
f.write(chunk)