1.1X Rescale CLI 応用
本アプリでは、デフォルトでSGE入力パーサーを使用して、実行スクリプトからRescaleの設定として使用する情報を解析し、入力送信スクリプト(ラッパースクリプトではない)内の不要なクラスタ固有の設定を解析して削除します。例えば、ユーザがsubmit.sh
という名前のスクリプトを持っていて、それが次のようなものだったとします。
#!/bin/bash #RESCALE_NAME="Hello World!" module load hello-worldsource /home/rescale/environments/hello_world/usr/lib64/openmpi/bin/mpirun echo "hello-world" > $(hostname)
パーサーは、クラスタ固有の行 module load… を確実に解析し、この行でスクリプトがエラーにならないようにします。次に、環境を変更するコマンドをすべて削除しようとします。この場合、source以降の行は、Rescaleの環境に干渉しないように解析されます。さらに、実行ファイルやバイナリへの絶対参照を削除します。実行ファイルがローカルクラスタとRescaleの同じ場所に存在しない可能性が高いからです。この場合、mpirunへの参照はRescale環境のPATH CLIディレクティブを通して参照されます。作成されたスクリプトはrun.shという名前のファイルに保存され、以下のようになります。
#!/bin/bash #RESCALE_NAME="Hello World!" #module load hello-world #source /home/rescale/environments/hello_world mpirun echo "hello-world" > $(hostname)
Rescaleの解析コマンドは、./run.shに設定されます。このスクリプトは、入力ファイルとともにRescaleにアップロードされます。
本アプリでは、サブミットスクリプト内でRescale固有のディレクティブを使用することで、ユーザーが思い通りにジョブを構成することができます。現在利用可能な変数を以下に示します。これらの変数が含まれていない場合、デフォルト値が使用されます。
#RESCALE_CORES=<integer>
{1|2|4|8|16|32|64|128|...}
使用するコアの数。コアの種類によって、許可される値はリストされたオプションのサブセットになります。このオプションのデフォルト値は、SGE #$ -peの値です。
#RESCALE_CORE_TYPE=<string>
{Marble|Nickel|Emerald|Iron|Gold|Obsidian|...}
使用するRescaleコアタイプ。このオプションに有効な値の一覧を取得する方法については、 このドキュメントのコマンドのセクションを参照してください。
#RESCALE_NAME=<string>
ジョブの名前です。このオプションのデフォルト値は、SGE #$ -Nの値です。
#RESCALE_PROJECT_ID=<project name>
会社のプラットフォーム設定で設定したプロジェクトに、ジョブを割り当てる必要がある場合に使用します。
#RESCALE_ANALYSIS=<string>
{abaqus|adina|aermod|ansys_cfx|ansys_fluent|...|user_included|...}
使用する解析。これは、Analysis “code “値に設定する必要があります。このオプションの有効な値のリストを取得する方法については、このドキュメントの「コマンド」セクションに説明があります。デフォルト値は、スクリプトのモジュールまたはソース行で指定された、解析可能な任意の解析名です。
#RESCALE_ANALYSIS_VERSION=<string>
選択した解析の特定のバージョンを使用する。これはオプション設定です。省略した場合は、最新のバージョンが使用されます。指定する場合は、特定の解析バージョンの “versionCode “値を設定する必要があります。このオプションに有効な値のリストを取得する方法については、本ドキュメントのコマンドのセクションに説明があります。
#RESCALE_EXISTING_FILES=<comma delimited list of strings>
例: #RESCALE_EXISTING_FILES=<file1-ID>,<file2-ID>,<file3-ID>
このフラグは、ファイルIDがすでにRescaleに保存されている場合、そのファイルIDをこのジョブに含めます。ファイルIDの取得は簡単ではなく、ユーザはAPIにアクセスする必要があります。Rescaleサポート(support-japan@rescale.com)にお問い合わせください。リストされたファイルIDが存在しない場合、ジョブはバリデーションで失敗します。このオプションにデフォルト値はありません。
#USE_RESCALE_LICENSE
解析コードには、Rescaleが提供するライセンスを使用します。すでにあるライセンスを使用する場合は、実行スクリプトを使用して、CLIディレクティブを使用して設定することができます。
#RESCALE_ENV_<varname>=<value>
Rescaleクラスター上のライセンスサーバー情報を設定するために使用します。CLIディレクティブ名で、ライセンス・サーバーの場所に置き換えます。たとえば、次のようになります。#RESCALE_ENV_RLM_LICENSE=8112@license-proxy.rescale.com は、8112@license-proxy.rescale.com に設定されたRLM_LICENSE CLIディレクティブをクラスタ・ノード上に作成します。
#RESCALE_WALLTIME=<# of hours>
このジョブの実行を許可する最大時間数を設定するために使用されるオプションの値です。この時間数を超えたジョブは終了されます。指定しない場合は、Rescaleのユーザアカウント設定にあるデフォルトのMax Job Hoursの値が使用されます。
#RESCALE_LOW_PRIORITY=<boolean>
{true, false}
ODEモードでジョブを実行するために使用されるオプションの値です。ODEを有効にすると、リソースが利用可能になるまで、ジョブは最初キュー状態になることがあります。このODEジョブは一度実行すると、最大1回まで終了と再開が可能です。この場合、ジョブは最大で2倍の実行時間を要することがあります。指定しない場合、デフォルト値はfalseとなり、ODPモードとなります。
RescaleクラスタのヘッドノードにSSHでアクセスできるようにするための高度な設定がいくつか用意されています。これはジョブの結果を調べたり修正したりするのに便利ですが、将来的にジョブをクローンして再実行する場合に、結果の再現性に悪影響を与えることを覚えておいてください。
現在のところ、CLI からヘッドノードの IP アドレスを取得する方法はありません。この情報を見つけるには、Web UI のジョブステータスページを使用する必要があります。
#RESCALE_INBOUND_SSH_CIDR=<string>
for example: #RESCALE_INBOUND_SSH_CIDR=50.123.22.112/32
RescaleクラスターのヘッドノードへのインバウンドSSHアクセスを許可するIPレンジを定義するために使用します。この値を省略した場合、Rescaleのユーザーアカウント設定に記載されているデフォルト値が使用されます。
#RESCALE_PUBLIC_KEY=<string>
for example: #RESCALE_PUBLIC_KEY=ssh-rsa AAAA...
Rescaleクラスタのヘッドノードのauthorized_keysファイルに追加される公開鍵を設定するために使用します。これにより、関連する秘密鍵を使ってRescaleクラスターのヘッドノードにSSHでアクセスできるようになります。この値を省略すると、Rescaleのユーザーアカウント設定に記載されているデフォルト値が使用されます。
SGEとRescaleの両方で動作するスクリプトの例は次のようになります(モジュールの行はコメントアウトされ、mpirunへの絶対参照は削除されています)。
#!/bin/bash #RESCALE_NAME="Converge Sample" #RESCALE_CORES=32 #RESCALE_CORE_TYPE=Nickel #RESCALE_ANALYSIS=converge_open_mpi module load converge/usr/bin/mpirun -np 32 converge-2.1.0
Rescaleでのみ動作するスクリプトの例は、以下のようなものです。コマンドラインのコマンドは、解析コード表(別添)に記載されています。
#!/bin/bash #RESCALE_NAME="Converge Sample" #RESCALE_CORES=32 #RESCALE_CORE_TYPE=Nickel #RESCALE_ANALYSIS=converge_open_mpi converge-mpi -n all -v 2.1