コンテンツにスキップ

SIMULATIONS

Executable への引数

Executable に設定した評価プログラムがバッチファイル(拡張子 bat)または PowerShellスクリプト(拡張子 ps1)の場合は、プログラムへの引数に設計変数が設定されます。

例えば、設計変数 d1, d2 は以下の形式で引数に設定されます。

バッチファイル
executable.bat /d1 1.1 /d2 2.2
PowerShell スクリプト
executable.ps1 -d1 1.1 -d2 2.2

引数の取扱い

PowerShell スクリプトの引数取得

スクリプトの先頭で Parameter で引数を取得します。 以下の例は、4つの引数を、Double型の変数(Ts, R, L, Th)で参照します。

Param(
    [Parameter(Mandatory=$true)][Double] $Ts,
    [Parameter(Mandatory=$true)][Double] $R,
    [Parameter(Mandatory=$true)][Double] $L,
    [Parameter(Mandatory=$true)][Double] $Th
)

Note

バッチファイルや PowerShell スクリプトのサンプルがインストールされますので、ご参照ください。

入力値のフォーマット方法

Input File への設計変数の出力設定は、数値をフォーマットすることができません。
数値の書式(文字数・ゼロ埋め・指数表記など)が必要な場合は、OASIS AI から実行するバッチファイルや PowerShell スクリプトなどでフォーマットして設定してください。

例えば、次の条件で設計変数値をフォーマットしてファイルに出力したいとします。

  • 変数範囲を"-1.0~0.357"で設定した
  • 変数の出力を5カラムで固定したい
  • 負の値の場合も値の使用するカラム数を変更したくない

format_01

以下の PowerShell スクリプトは、input.txtファイルに4つの設計変数(Ts, R, L, Th)を5~10カラムに出力します。

function replase {
    param (
        [String] $line,
        [Double] $value
    )
    $in = "{0:F5}" -f $value
    $fixed = $in.Substring(0,5)
    $line1 = $line.Substring(0,5)
    $line2 = $line.Substring(10)
    $line0 = $line1 + $fixed + $line2
    return $line0
}

$txt = ".\input.txt"
$content = Get-Content -Path $txt
$content[0] = replase -line $content[0] -value $Ts
$content[1] = replase -line $content[1] -value $R
$content[2] = replase -line $content[2] -value $L
$content[3] = replase -line $content[3] -value $Th
Set-Content -Path $txt -Value $content

PowerShell 実行ポリシーの確認と設定

Executable で PowerShell スクリプトを使用する場合は、PowerShell スクリプトが実行できるように Windows で実行ポリシーを設定します。

以下のコマンドで現在の設定を確認します。

PowerShell スクリプトを実行するためには、いづれかのスコープに RemoteSigned 以上のポリシーが設定さてれている必要があります。

実行ポリシーの確認
Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

ローカルPCで手元にあるスクリプトを実行するには、以下のコマンドで実行ポリシーを設定します。

  • ポリシーは RemoteSigned を設定し、ローカルで作成したスクリプト、署名済み外部スクリプトのみを許可します。
  • スコープは CurrentUser を指定し、自分だけとします。
実行ポリシーの設定
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    Unrestricted

セキュリティのため、PowerShell 実行ポリシーの緩和は必要最小限に留めることをお勧めします。

シミュレーションの実行検証

外部シミュレーションによる最適化を行う前に、DESIGN VERIFICATION(検証ツール)で問題設定とシミュレーションの実行を検証することができます。

用意した設計値でシミュレーションを実行し、作業ディレクトリを確認できますので、実行や障害などの診断に利用できます。

  • シミュレーションなどのテストに使用できます
  • 任意の設計値で結果を評価後、 OPTIMIZERの[Continue]で最適化を継続できます

利用手順

  1. DESIGN VERIFICATION を開きます
  2. Value に値を入力します

    • 確認したい設計値を入力します

    verification_01

  3. [Add]で設計値を登録します

    • [View points]で登録した設計値を確認できます
    • 複数設定できます
  4. [Output]を選択します

    • [Evaluate]が有効になります

    verification_02

  5. [Evaluate]でシミュレーションを実行します

  6. VISUALIZE の RESULTS SHEET で値を確認できます

    verification_03

シミュレーションの終了コードと設定

OASIS AI から実行するシミュレーションが正常終了したときの戻り値を、Simulation Integration Configuration の Accepted Exit Codes に設定します。 Accepted Exit Codes に設定外の値が戻った場合に、OASIS AI はシミュレーションが失敗したと判断します。

設定方法

  1. Executable に実行するプログラムやバッチファイルを設定します
  2. Accepted Exit Codes で正常終了(非エラー)の戻り値を指定します
  3. 実行プログラムから戻り値を設定します
    • 例えばトレーニング演習1のPowerShellスクリプトは、35行目で”0”を戻し、正常終了を OASIS AI に知らせます

exit code 01 exit code 02

Linux HPC とジョブスケジューラーの使用例

評価計算で Linux HPC やジョブスケジューラーを使用する一例を紹介します。

想定環境

  • OASIS AI(Windows)の評価計算を Linux HPC でジョブスケジューラーを介して実行する
  • Linux HPC は SSHで使用。ログインサーバー(ssh.server.jp)からフロントエンドサーバー(frontend.server.jp)に接続してジョブ実行する(多段接続)
  • Slurm ジョブスケジューラーを使用
  • 作業ディレクトリ(~/work/)で評価計算を実行

使用ツール

  • PowerShell
  • Windows 標準コマンド ssh, scp, ssh-agent(OpenSSHクライアント)

事前準備

  • Linux 作業ディレクトリにヘルパースクリプト(run.sh, status.sh)を配置

処理の流れ

OASIS AI の評価計算を Linux HPC で実行する処理フローと実装方法の一例を示します。

  1. OASIS AI が更新した入力ファイルを Linux へ転送する
  2. SSH で Linux 作業ディレクトリの run.sh を実行する
  3. SSH で status.sh を実行し、ジョブの終了を確認する
  4. Linux から出力ファイルを取得する

ex-linux-hpc

入力ファイルの転送

scp -p $filePath [account]@ssh.server.jp:~/work/

ジョブ実行

ssh -o BatchMode=yes -J [account]@ssh.server.jp [account]@frontend.server.jp "cd ~/work && ./run.sh" 

Slurm が「Submitted batch job 2093161」と出力することを利用し、文字列からジョブIDを取得して .jobid ファイルに保存する。

run.sh
OUTPUT=$(sbatch << !JOB
;
# run your program
!JOB
)
echo $OUTPUT | awk {print $4} > .jobid

ジョブの終了確認

for ($i=0; $i -lt $RETRY_STAT; $i++) {
    ssh -o BatchMode=yes -J [account]@ssh.server.jp [account]@frontend.server.jp "cd ~/work && ./status.sh"
    $ret = $LastExitCode
    if ($ret -eq 0) {
        break
    }
    Start-Sleep -Seconds $WAIT
}

.jobid ファイルからジョブIDを取得し、ジョブリストにジョブIDが存在しない場合に実行終了とみなし、0を戻す。

status.sh
jobid=$(cat ./.jobid)
squeue | grep -q "$jobid" && echo 1 && exit 1 || echo 0 && exit 0

出力ファイルの取得

scp -p [account]@ssh.server.jp:~/work/ .

その他

  • SSH接続は、認証エージェントを使用(スクリプトにパスワードなどを記述しない)