スーパーコンピュータ「不老」の利用に関するFAQ/Tips
このページでは、利用者様からの良くある質問とその回答や、 スーパーコンピュータ「不老」を利用する上で知っておいた方が良い情報などを紹介します。 ある程度まとまった情報や、図などで説明した方が良い情報は 基本マニュアルや利用手引書(HPCポータルを参照)に掲載される予定ですので、あわせてご活用ください。
- 旧システムとのバッチジョブシステムの違いに関すること
- -X オプション(環境変数の引き継ぎ)の廃止
- インタラクティブジョブ実行時のオプション追加
- 旧システム(他のシステム)でコンパイルできていたプログラムがコンパイルできない時に確認すべきこと
- メモリモデルの指定
- 「京」コンピュータとの違いに関すること
- rank-map-hostfile 利用上の注意
- Type Iサブシステムのエンディアンについて
- ディレクトリの使い分け方について
- ユーザ間のデータ共有方法について
- 使用中のファイル容量を確認する方法について
- 同時に実行可能なジョブ数と受付可能なジョブ数の制限値について
- インストール済みアプリケーションの使い方 1(modulefileの活用)
- インストール済みアプリケーションの使い方 2(提供ツールについて)
- プロセスとスレッドの適切な配置方法について
- CUDA-Aware MPIに対応したMPIライブラリについて
- Singularityの使い方
- JupyterLab (Jupyter Notebook) を使う方法
- Type II サブシステムの消費ポイント算出方法について (CPUのみを使うと多くのポイントを消費する?)
- 利用ポイントを節約するには?
- 出力したはずの文字列が出力されていない?
- IOに多くの時間がかかる場合は?
- Type Iで1ノードから大量のIOを実行してしまったケース
- コンパイル時に「マルチバイトキャラクタを処理するためのロケール "" をセットできません」というエラーが生じる
- 利用成果等を発表する際の謝辞の記載のお願い
旧システムとのバッチジョブシステムの違いに関すること
システムの更新に伴い、旧システムとはバッチジョブシステムの挙動に細かな違いが生じています。 特に間違いやすい点や問い合わせがあった点などを記しておきます。
-X オプション(環境変数の引き継ぎ)の廃止
旧システムではpjsub実行時に-Xオプションをつけるとログインノード上の環境変数が引き継がれましたが、 「不老」ではEnvironment modulesは環境変数で動作を制御しているため、 実行時の環境変数を引き継ぐとうまく動作しない場合がります。 また、LD_LIBRARY_PATHなど一部引き継げない環境変数もあるため、本システムではこの機能は提供されていません。
インタラクティブジョブ実行時のオプション追加
旧システムではリソースグループにインタラクティブキューを指定すればインタラクティブジョブが実行できましたが、
本システムでは pjsub --interact -L rscgrp=fx-interactive
のように --interact
を明示する必要があります。
旧システム(他のシステム)でコンパイルできていたプログラムがコンパイルできない時に確認すべきこと
メモリモデルの指定
プログラム中で用いているメモリの量が多い場合にコンパイルエラーすることがあります。
- Type Iサブシステム(富士通コンパイラ)の例
relocation truncated to fit: R_AARCH64_ADR_PREL_PG_HI21 against `.bss'
- Type IIサブシステム(Intelコンパイラ)の例
relocation truncated to fit: R_X86_64_PC32 against `message_catalog'
additional relocation overflows omitted from the output
このようなエラーが出る場合、プログラム領域と静的データ領域の合計がデフォルト値 (Type Iサブシステムでは4GB、Type IIサブシステム、Type IIIサブシステムおよびクラウドシステムでは2GB)を越えている可能性があります。 コンパイル時に以下のオプションを試してみてください。
- Fujitsu コンパイラの場合:
-Kcmodel=large
- GNU互換オプションを指定する場合:
-mcmodel=large
- GNU互換オプションを指定する場合:
- Intel コンパイラの場合:
-mcmodel=medium
または-mcmodel=large
- GNU コンパイラの場合:
-mcmodel=medium
または-mcmodel=large
- PGI(NVIDIA) コンパイラの場合:
-mcmodel=medium
「京」コンピュータとの違いに関すること
同じ富士通のスパコンシステムということで、「京」コンピュータで利用していたプログラムを「不老」Type Iサブシステムで利用したいユーザも多いと思います。 その際に気を付けた方が良い点について記しておきます。
rank-map-hostfile 利用上の注意
「京」ではバッチジョブ実行時にrank-map-hostfileを指定するだけでプロセスの割り当てを指定できました。 Type Iサブシステムでも同様にrank-map-hostfileを用いた利用ノードの指定が可能ですが、 これを行う際にはrank-map-bychipまたはrank-map-bynodeの指定も必要です。 以下に例を示します。
#PJM --mpi "rank-map-bynode" <== 追加が必要
#PJM --mpi "rank-map-hostfile=rankmapfile.dat"
まとめて一行で指定することもできます。
#PJM --mpi "rank-map-bychip,rank-map-hostfile=rankmapfile.dat"
詳細はHPCポータルから入手できる「エンドユーザー向けガイド」(ジョブ運用ソフトウェアエンドユーザ向けガイド)の 「2.3.5 MPIジョブの投入」をご確認ください。
Type Iサブシステムのエンディアンについて
Type Iサブシステムは旧FXシステムと同様に富士通製のシステムですが、 CPUのエンディアンが異なります。 そのため旧FXシステムで使用していたバイナリ形式の入力ファイルを Type Iサブシステムで利用しようとすると問題が生じることがあります。
詳細と解決法についてはHPCポータルに掲載されている「Fortran使用手引書」をご確認ください。
ディレクトリの使い分け方について
各利用者は、/home以下にホームディレクトリを有するのに加えて、 /data/group1/ユーザID というディレクトリも利用可能です。 (一部の利用者はgroup1ではなくgroup2になります。) /homeよりも/dataの方が性能が高い構成になっていますので、 バッチジョブを実行する際には/data側から実行するようにしてください。 なお、/homeも/dataも、ログインノードと計算ノードの両方から読み書き可能です。
ユーザ間のデータ共有方法について
利用制度を問わず、「不老」にはユーザ間でデータを共有するためのディレクトリは特に用意されていません。 各ユーザの/homeや/dataのディレクトリ内に任意のディレクトリを作成してパーミッションを調整してご利用ください。
例えば以下のように設定することで、
/home/a49999a/share/project/
という共有パスを知っているユーザは誰でも
/home/a49999a/share/project/
にアクセスできるようになります。
(lsコマンドでファイル一覧を確認したり、ファイルを読んだりコピーしたりできますが、書き換えはできません。)
一方、上位ディレクトリである
/home/a49999a/share/
や/home/a49999a/
、
/home/a49999a/
の下にある/home/a49999a/private/
については、
他のユーザがlsコマンドで覗こうとしても覗けません。
パーミッション ディレクトリ
711 /home/a49999a/
711 /home/a49999a/private/
711 /home/a49999a/share/
755 /home/a49999a/share/project/
使用中のファイル容量を確認する方法について
現在使用中のファイル容量を確認するにはlfsコマンドを利用してください。
$ lfs quota -u xxxxxx /home
Disk quotas for usr xxxxxx (uid xxxx):
Filesystem kbytes quota limit grace files quota limit grace
/home 66737048 0 1073741824 - 501774 0 10000000 -
$ lfs quota -u xxxxxxa /data
Disk quotas for usr xxxxxx (uid xxxx):
Filesystem kbytes quota limit grace files quota limit grace
/data 109958548 0 0 - 10617 0 50000000 -
xxxxxxの部分にはユーザIDを指定してください。
アカウントポータルからも確認できます。各月の利用実績ページをご確認ください。
同時に実行可能なジョブ数と受付可能なジョブ数の制限値について
同時に実行可能なジョブ数はリソースグループ(キュー)ごとに決まっています。 また、受付可能なジョブ数(同時にキューに入った状態にできるジョブ数)はリソースユニットごとに決まっています。
具体的な値は各サブシステムの利用手引書をご確認ください。
インストール済みアプリケーションの使い方 1(modulefileの活用)
インストール済みのアプリケーションの多くはmodulefileによって提供されています。
module availコマンドで利用可能なmoduleの一覧を確認できます。
module loadコマンドでmoduleを読み込むことで、対応するコマンドが利用可能になります。
一部のmoduleは特定のmoduleをloadした状態でないと利用できません。 これは特定のコンパイラやMPIに依存するものがあるためです。
特に、Type IIサブシステムではintelかgccをloadすることでより多くのmoduleを利用可能になります。
以下に例を示します。Type IIサブシステム用ログインノード上で実際に実行した出力結果を加工していますが、 今後のソフトウェアのバージョンアップによって表示内容が変わる可能性に注意してください。 詳細はHPCポータルに掲載されている各サブシステムの利用手引書やお知らせをご確認ください。
初期状態でmodule listを実行しても、何も読み込まれていません。
$ module list
No Modulefiles Currently Loaded.
初期状態でmodule availを実行すると、/home/center/opt/x86_64/modulefiles/CX/coreにあるmodulefileが見えます。
$ module avail
---- /home/center/opt/x86_64/modulefiles/CX/core ----
3d_avs_player/3.3(default) cuda/10.2.89_440.33.01(default)
以下省略
module load gccでgccのmoduleを読み込み、module listで確認してみると、OpenMPIのmoduleも読み込まれてMPIも使えるようになります。
$ module load gcc
$ module list
Currently Loaded Modulefiles:
1) openmpi/4.0.3 2) gcc/4.8.5
この状態でmodule availを実行すると、OpenMPIに依存するmodulefileが利用可能になっています。 (機械学習関係のアプリケーションは主にここに含まれています。)
bash@flow-cx02 ~ $ module avail
---- /home/center/opt/x86_64/modulefiles/CX/compiler/gcc/4.8.5 ----
chainer/7.4.0(default) impi/2019.5.281(default)
以下省略
---- /home/center/opt/x86_64/modulefiles/CX/core ----
3d_avs_player/3.3(default) cuda/10.2.89_440.33.01(default)
以下省略
module purgeでload済みのmoduleを全て破棄できます。
$ module purge
$ module list
No Modulefiles Currently Loaded.
改めてintelをloadすると、今度はIntelコンパイラやIntel MPIに依存するmodulefileが利用可能になっています。
$ module load intel
$ module list
Currently Loaded Modulefiles:
1) impi/2019.5.281 2) intel/2019.5.281
$ module avail
---- /home/center/opt/x86_64/modulefiles/CX/mpi/intel/2019.5.281/impi/2019.5.281 ----
frontflow_blue/8.1(default) parallel-netcdf/1.12.1(default)
以下省略
---- /home/center/opt/x86_64/modulefiles/CX/compiler/intel/2019.5.281 ----
R/3.6.3(default) metis/5.1.0(default)
以下省略
---- /home/center/opt/x86_64/modulefiles/CX/core ----
3d_avs_player/3.3(default) cuda/10.2.89_440.33.01(default)
以下省略
インストール済みアプリケーションの使い方 2(提供ツールについて)
富士通社や情報基盤センターが提供する幾つかのツール群が /home/center/local/bin に配置してあります。 必要に応じて環境変数PATHを設定してご利用ください。
また、/home/center/local/sample/xxxx にはsampleコマンドで閲覧可能なサンプル集も提供されています。
/home/center/local/bin/sample
コマンドで
利用可能なサンプルの一覧が表示されます。
一覧に挙げられたものを引数として追加すると、
該当のサンプルがカレントディレクトリにコピーされます。
(サンプル名と同じディレクトリが作られ、その中にファイルがコピーされます。)
プロセスとスレッドの適切な配置方法について
並列化されたプログラムの実行において、 プロセスやスレッドの適切な配置は性能に大きく影響します。
各サブシステムにてプロセスやスレッドを思い通りに配置してプログラムを実行するための資料を 基本マニュアルおよび関連資料にて公開していますので参考にしてください。
CUDA-Aware MPIに対応したMPIライブラリについて
利用手引書及び 基本マニュアルおよび関連資料の Type IIサブシステム向けのプロセス・スレッド配置方法をご確認ください。
Singularityの使い方
Singularityの使い方は基本マニュアルおよび関連資料でも紹介しています。あわせてご確認ください。
Type IIサブシステムにはsingularityがインストールされているため、 Dockerコンテナを持ち込んで利用することができます。 Docker Hubなどの外部リポジトリも利用できます。
Singularityを使う際は、システム側で幾つかの環境設定が必要なため、
ジョブ実行時に-L jobenv=singularity
を設定してください。
インタラクティブジョブで指定する場合の例はこのようになります。
(例: pjsub --interact -L rscgrp=cx-extra,jobenv=singularity
)
singularityコマンドに–nvオプションを付ければGPUも利用できます。
Singularityではコンテナ内からコンテナ外のファイルが容易に見えてしまう点にも注意してください。 (コンテナ内のファイルを参照するはずであったがコンテナ外のファイルを参照してしまっていた、というミスが起きやすいです。)
ジョブ実行例(Docker Hubからdockerイメージを拾ってきて、TensorFlowのチュートリアルを実行)
#!/bin/bash
#PJM -L rscunit=cx
#PJM -L rscgrp=cx-extra
#PJM -L node=1
#PJM -L elapse=1:00:00
#PJM -L jobenv=singularity
#PJM -j
#PJM -S
module load singularity
singularity exec --nv docker://tensorflow/tensorflow:latest-gpu python -c "import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)"
実行結果(チュートリアル実行結果の末尾)
Epoch 1/5
1875/1875 [==============================] - 2s 992us/step - loss: 0.2202 - accuracy: 0.9360
Epoch 2/5
1875/1875 [==============================] - 2s 962us/step - loss: 0.0970 - accuracy: 0.9712
Epoch 3/5
1875/1875 [==============================] - 2s 990us/step - loss: 0.0681 - accuracy: 0.9783
Epoch 4/5
1875/1875 [==============================] - 2s 999us/step - loss: 0.0542 - accuracy: 0.9829
Epoch 5/5
1875/1875 [==============================] - 2s 999us/step - loss: 0.0430 - accuracy: 0.9859
313/313 [==============================] - 0s 1ms/step - loss: 0.0623 - accuracy: 0.9806
JupyterLab (Jupyter Notebook) を使う方法
Type IIサブシステムとクラウドシステムではmoduleでJupyterLabが使えます。 Type IIではGPUも利用できるため高い性能を得られる可能性があります。 消費ポイントを節約したい場合はUNCAIを使うのもおすすめです。
Type IIサブシステムとクラウドシステムでJupyterLabを使う方法
Type IIサブシステムとクラウドシステムでは以下のとおりmoduleをloadすればJupyterLabが使えます。 Type IIサブシステムではGPUに対応したPythonモジュールを使えばGPUを利用することも可能です。
以下ではType IIサブシステムでJupyterLabを利用する例を示しますが、ノード名などを読み替えればクラウドシステムでも同様に利用可能です。
module load gcc/4.8.5 python/3.7.6 jupyterlab/2.1.5
または
module load gcc/8.4.0 python/3.9.2 jupyterlab/3.0.9
実際に計算ノードでJupyterLabを利用する例を紹介します。 始めにインタラクティブジョブで起動手順を確認したうえで、その後はバッチジョブとして実行するのがおすすめです。
まずインタラクティブジョブを起動し、上記のloadを行います。 続いてJupyterLabを起動するために
jupyter notebook --notebook-dir=${HOME} --ip='*' --port=8888 --no-browser --allow-root
というコマンドを実行します。
(ブラウザ上からホームディレクトリではなく/data/group1/側を参照したい場合は--noteboook-dir=/data/group1/${USER}
を指定してください。
ポート番号も8888から9000の間で自由に変更して構いません。特にcx-shareでは同じノードに複数ユーザが立ち上げると衝突するため、適当な数に変更して起動を試してください。8888以外のポートを使う場合は次のステップでsshポート転送の際に指定する番号も同様に変更してください。
)
起動すると以下のようなメッセージが出るため、
http://cx064:8888/~
の部分をみてSSHポート転送を設定し、ブラウザでアクセスすればJupyterLabが使えます。
この例であれば、例えば ssh -L 8888:cx064:8888 flow-cx.cc.nagoya-u.ac.jp
とすればローカルの8888番ポートがcx064の8888番ポートに転送されるため、
手元のPCのブラウザ上で最後のURL(この場合は http://127.0.0.1:8888/?token=f935c6bb79b91d1c951c179c1a6b084aa1dba255cb4acee5
)にアクセスすればJupyter Notebookが使えます。
To access the notebook, open this file in a browser:
file:///home/center/a49979a/.local/share/jupyter/runtime/nbserver-932-open.html
Or copy and paste one of these URLs:
http://cx064:8888/?token=f935c6bb79b91d1c951c179c1a6b084aa1dba255cb4acee5
or http://127.0.0.1:8888/?token=f935c6bb79b91d1c951c179c1a6b084aa1dba255cb4acee5
ちなみにパスワード設定を行いたい場合は
jupyter notebook password
コマンドを実行してください。 パスワードが設定されている場合、JupyterLab実行時にtokenの表示がなくなり、代わりにブラウザ上でパスワード入力が必要になります。
バッチジョブとして実行する場合は、例えば以下のようなジョブスクリプトを用意して実行し、 結果出力ファイルを見てSSHポート転送をすると良いでしょう。 elapse指定をしていないと打ち切り時間で強制終了してしまう点には注意してください。 途中で終了したい場合は、ジョブをpjdelする、またはブラウザ上でQuitボタンを押してください。 (Quitを押すとjupyterコマンドが終了するため、バッチジョブスクリプトが次の行に進んで終了します。)
#!/bin/bash
#PJM -L rscgrp=cx-share
module load gcc/8.4.0 python/3.9.2 jupyterlab/3.0.9
jupyter notebook --notebook-dir=${HOME} --ip='*' --port=8888 --no-browser --allow-root
Minicondaを利用し、JupyterLabをインストールして使う方法
バージョンの異なるJupyterLabを使いたいなどの場合はこちらの方法をお試しください。
手順としては、ログインノードまたはインタラクティブジョブでMinicondaをインストールし、その上でJupyterLlabをインストールします。
Minicondaのインストール方法はインストーラをWebから拾ってきて実行するだけです。 インストール時にインストール先ディレクトリを聞かれるため、必要に応じて変更してください。
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh ./Miniconda3-latest-Linux-x86_64.sh
インストールされたMinicondaを使うには、
eval "$(インスト-ル先ディレクトリ/bin/conda shell.bash hook)"
を実行する必要があります。 これでcondaコマンドが使えるようになるため、 適当な環境を構築してconda-forgeチャンネルからjupyterlabをインストールします。 コマンド例は以下のとおりです。 (この例ではPythonバージョンとして3.7を指定しているが、異なるバージョンでも良い。 testというのはユーザが任意で決められる環境の名前であり、好きな名前を付けて良い。)
conda create -n test pip python=3.7
conda activate test
conda install -c conda-forge jupyterlab
これでjupyterコマンドが利用可能になります。
あとはシステムにインストール済みのmoduleを使う場合と同様です。
上記のeval "$(インスト-ル先ディレクトリ/bin/conda shell.bash hook)"
コマンドとconda activate test
コマンドは
新しくシェルを開くたび(ログインし直したあと、インタラクティブジョブ開始後、バッチジョブの冒頭など)に行う必要がある点に注意してください。
例えばバッチジョブスクリプトはこのような感じになります。実行結果を見て接続先を確認し、SSHポート転送を行って利用してください。
#!/bin/bash
#PJM -L rscgrp=cx-share
eval "$(インスト-ル先ディレクトリ/bin/conda shell.bash hook)"
conda activate test
jupyter notebook --notebook-dir=${HOME} --ip='*' --port=8888 --no-browser --allow-root
上記の例ではcx-shareを使っていますが、cx-singleなどを利用すれば複数のGPUを使うことも可能です。 (実際に複数のGPUをしっかり活用できるかどうかは実行内容次第です。)
Jupyter Notebook上でTensorFlow-GPUを使う方法の具体例
Jupyter Notebook上のTensorFlowでGPUを使うには、Jupyter Notebookを起動する時点でGPUが使える状態にしておく必要があるようです。 具体的には以下のような手順を踏むことでJupyter Notebook上のTensorFlow-GPUでGPUを利用できることを確認しました。
- condaを用いてTensorFlow-GPUを導入しておく(前項も参照)
$ conda create -n tf2.4.1_cuda11 pip python=3.8 $ conda activate tf2.4.1_cuda11 (tf2.4.1_cuda11) $ pip3 install tensorflow-gpu==2.4.1
- 計算ノード上でjupyterlabやcudaのmoduleをloadし、condaのactivateを済ませ、Jupyter Notebookを起動する
ログインノード上でインタラクティブジョブを起動 $ pjsub --interact -L rscgrp=cx-share,elapse=1:00:00 さらにインタラクティブジョブ上でコマンドを事項 $ module load gcc/8.4.0 python/3.9.10 jupyterlab/3.0.9 cuda/11.2.1 cudnn/8.2.1 $ export LD_LIBRARY_PATH=/home/center/opt/x86_64/cores/hpc_sdk/Linux_x86_64/21.2/math_libs/11.0/lib64:${LD_LIBRARY_PATH} $ eval "$(~/miniconda3/bin/conda shell.bash hook)" $ conda activate tf2.4.1_cuda11 (tf2.4.1_cuda11) $ jupyter notebook --notebook-dir=${PWD} --ip='*' --port=8888 --no-browser --allow-root
- SSHポート転送を用いてブラウザで接続する
$ ssh -L 8888:cx064:8888 w49999a@flow-cx.cc.nagoya-u.ac.jp Webブラウザでhttps://127.0.0.1:8888/?token=... へアクセス
より細かい手順や実行例については最新の機械学習講習会の資料を参考にしてください。
UNCAIでJupyterLabを使う方法
UNCAIでもバッチジョブ実行とほぼ同様の方法でJupyterLabが利用可能です。
接続手順:以下の内容のファイルを~/.batch/以下にstart_scriptから始まる名前で保存し、
UNCAIで予約する際に「時刻指定バッチスクリプト」からそのファイルを指定する。
仮想ノードが利用可能になると~/.batch/以下にログファイルが生成されるため、
ファイルを開いて接続先情報 (http://127.0.0.1:8888/?token=トークン情報)
情報を確認する。
仮にUNCAIで起動したホストのIPアドレスが172.24.2.11、「不老」のユーザIDがw49999aだとした場合、
ローカルPCから ssh -L 8888:172.24.2.11:8888 w49999a@flow-cloud.cc.nagoya-u.ac.jp
のようにSSH接続とポート転送の設定を行う。
あとはローカルPC上でWebブラウザから (http://127.0.0.1:8888/?token=トークン情報)
にアクセスすればJupyterLabが利用できる。
#!/bin/bash
module load gcc/8.4.0 python/3.9.2 jupyterlab/3.0.9
jupyter notebook --notebook-dir=${HOME} --ip='*' --port=8888 --no-browser --allow-root
1つの仮想マシンで1ノードを占有しない使い方(テンプレートVS, VM, VL)の場合は他のユーザが同じポート番号8888を使っている可能性があり、
その場合は起動時にエラーメッセージが出てjupyterの起動に失敗します。
そのような場合は --port=8888
の部分の数字を変更(8888から9000の間の数字に増やす)してjupyterコマンドを手動実行してみてください。
sshポート転送時も例えば ssh -L 8888:172.24.2.11:8889 w49999a@flow-cloud.cc.nagoya-u.ac.jp
のようにコロンのあとの数字を変更する必要があります。
Type II サブシステムの消費ポイント算出方法について
Type IIサブシステムの消費ポイントは「実際にプログラムを実行したGPUの数」ではなく、 「確保したGPU数」に基づいて算出されています。
cx-shareリソースグループでは、「確保したGPU数」は常に1です。(cx-shareは1/4ノード実行専用のリソースグループであり、束ねて使うことができません。)
cx-share以外のリソースグループでは、「確保したGPU数」はノード数×4です。
利用ポイントを節約するには?
cx-shareやcl-shareは1/4ノード分ずつの利用ポイント消費になるため、うまく使えば利用ポイントの節約になります。
逆にいえば、1GPUしか使わない場合にcx-share以外のリソースグループを使ったり、 80コアまで性能がスケールしないのにcl-share以外のリソースグループを使うと、 利用ポイントの利用効率が低下する(もったいない)ことになります。 cx-singleやcl-singleはsingleの名前が付いていますが1ノードという意味でのsingleですので気を付けてご利用ください。
(本件については、わかりにくいというご意見もいただいています。 しかし、1GPUや1ソケットをsingleにしてしまうと、 今度はノード数を基準に考えたときにわかりにくくなります。 万人が勘違いしない名前を付けることは難しいということをご理解いただければ幸いです。)
クラウドシステムではUNCAIを使えば10コア、すなわち1/8ノード単位での実行も可能です。 もちろん利用ポイントの消費も10コア分だけになります。
出力したはずの文字列が出力されていない?
実行時間が指定時間を超過してジョブが終了してしまった場合などに、 printf関数やwrite関数などで文字列を出力しているはずなのに結果ファイルに書かれていない、 ということが起こる場合があります。 これはバッファに書き込まれた状態(バッファから出力先に吐き出されていない状態)でジョブが終了してしまっているために起きる問題です。 C言語であればfflush関数、Fortranであればflush関数を実行することで、 バッファに格納されているデータが吐き出されます。お試しください。
また、各MPIライブラリにはプロセス実行時に標準出力などへの出力を指定のファイルへの書き出しに変更する機能を有することが多いため、 これを用いることでトラブルの追及に役立つこともあるかもしれません。
IOに多くの時間がかかる場合は?
Type Iで1ノードから大量のIOを実行してしまったケース
Type Iサブシステムにおいて、1ノードに多数(例:40 MPIプロセス以上)の MPIを起動して同時のIO(同時のファイルオープンやファイルへの書き込み)を行うと、 IO性能が劇的に劣化する(例:100倍ほど遅くなる)ことがあります。
これを回避するためには、 1ノードから大量の同時IOを行わないことが重要です。 例えば、1ノードあたりのMPI起動数を減らし(例:20 MPIプロセス以下など)、 OpenMP等によるスレッド並列化を併用してプログラムを実行してください。
なお、Type Iサブシステムのハードウェアの観点からの推奨の実行形態は、 1ノード当たり4 MPI(1ソケット相当あたり1 MPI)、1 MPI当たり12 OpenMPスレッド 実行となります。
Type IIのSSDの活用
Type IIサブシステムにはSSDが搭載されており、 これを活用することでIOにかかる時間を短縮できる可能性があります。 多数のファイルを操作する場合やランダムなファイルアクセスをする場合などに 試してみてください。
SSDの使い方についてはHPCポータルに掲載されているType IIサブシステムの利用手引書を参照してください。
コンパイル時に「マルチバイトキャラクタを処理するためのロケール "" をセットできません」というエラーが生じる
一部のMac利用者に生じる問題のようで詳細が判明していませんが、プログラムをコンパイルする際に
マルチバイトキャラクタを処理するためのロケール "" をセットできません
というエラーが生じることがあるようです。
基本的にLC_CTYPE
などの環境変数に問題があるようで、以下のコマンドを実行することで改善した例が報告されています。
export C=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8
発生頻度が高くない(報告数が少ない)ため原因の特定と解決策の確立ができていませんが、
locate
コマンドで関係する環境変数の設定状況を見ると改善のヒントが得られるかもしれません。
利用成果等を発表する際の謝辞の記載のお願い
スーパーコンピュータ「不老」を利用した成果を公表する際には、 利用した旨を明記していただけますようよろしくお願いいたします。 以下に文例を示しますが、実際の状況に合わせて調整していただいて構いません。
文例
本研究は名古屋大学のスーパーコンピュータ「不老」の##利用制度##を利用して実施した。
The computation was carried out using the ##category## on supercomputer "Flow" at Information Technology Center, Nagoya University.
利用制度/categoryには例えば以下をご利用ください。
- 一般利用 / General Projects
- 名大HPCプロジェクト / Nagoya Univ. HPC Peoject
- HPCI利用制度 / HPCI Research Projects
- JHPCN利用制度 / JHPCN Joint Research Projects
- トライアルユース / Trial Use Projects
- 民間利用制度 / Industry Use Projects