RescaleでOpenFOAMのBuoyant Cavityを実行するTutorial

Takahisa Shiratori
16 min readMar 26, 2020

--

本記事は、Qiitaで公開していた記事(最終更新 2019年6月15日)を移行したものです。内容は当時のものです

はじめに

Rescale ScaleX Platformは、Webブラウザからの操作で利用できるクラウドHPCプラットフォームです。Webサイトからサインアップ・ログインすることで、約300種類のアプリケーションが動作するHPC環境をすぐに利用可能です。バックエンドでは、AWSやMicrosoft Azureなどのパブリッククラウドや、国内外の学術系計算基盤(一部申請制)を利用してジョブが実行されます。法人でのご利用はもちろん、メールアドレスとクレジットカードがあれば個人でも利用可能です
このチュートリアルでは、OpenFOAMのBuoyant Cavityを題材として、Rescaleへのジョブ投入を体験できます。全体構成は以下の通りです

(1) GUIによるジョブ投入: ブラウザから手で操作することでジョブを投入します

(1–1) 基本(Basic)ジョブ: 1つの条件の解析を行います-

(1–2) 実験計画法(DOE)ジョブ: 複数条件の解析を同時に実行します

(2) REST APIによるジョブ投入: プログラムからジョブを投入します

RescaleのGUIは常にアップデートされるため、記事中のスクリーンショットと実際の画面が異なる場合があります。ご了承ください

本記事は、オープンCAEシンポジウム2018で行った「Rescale ScaleX を用いたクラウドシミュレーション体験」(主催: HPCシステムズ株式会社 様)の資料を、一部編集して公開したものです。また、記事中のBuoyant Cavityの解析は、オープンCAEトレーニングで提供・使用されたものを基にしています

サインアップとログイン

サインアップ

Rescaleのアカウントをお持ちでない場合は、以下の手順により、サインアップしてアカウントを作成してください

(1) サインアップページに必要情報を入力してサインアップします

(2) メールアドレスの有効性を確認するメールが届くので、メール中のリンクをクリックしてログインし、アカウントを有効化します

ログイン

(1) ブラウザからログインページにアクセスします

(2) “Email” および “Password” に、Rescaleのアカウント情報を入力してログインします

以下のような、ジョブ一覧画面が表示されればログイン成功です(表示されるジョブの具体的な内容は、アカウントにより異なります。また、新規作成したアカウントの場合、ジョブの一覧は表示されません)

GUI編

基本(Basic)ジョブ

ジョブの設定と実行

(1) ログインした状態で、サンプルジョブにアクセスします

(2) 画面右上の “Clone” ボタンをクリックします。 共有を受けたジョブを自分のジョブとして複製(Clone)することで、設定を変更したり、ジョブを投入したりできるようになります

(3) 入力ファイルの設定画面が開きます。このサンプルジョブでは、OpenFOAMのBuoyant Cavityの実行に必要なファイルを、zip化して入力ファイルとして使用しています。zipファイルの内容を確認するには “Download” ボタンをクリックし、手元の端末で解凍します。 次のステップに進むには “Next” をクリックします。 “Decompress”にチェックが入っている圧縮ファイルは、ジョブ実行時に自動的に解凍されます

(4) ソフトウェアの設定画面が開きます。ここで、使用するソフトウェアを選択します。OpenFOAM v1712が選択されていること、Command欄にコマンドが入力されていることを確認し、 “Next”をクリックします

(5) ハードウェアの設定画面が開きます。ここで使用するハードウェアを選択し、コア数を決定します。今回はOnyxが選択されていることを確認し、 “Next”をクリックします

(6) Post Processing の設定画面が開きます。この機能は次章の「実験計画法(DOE)ジョブの実行」で紹介します。ここでは使用しないため “Next” をクリックします

(7) ジョブの設定内容を確認する画面が開きます。設定が正しいことを確認し、 “Submit”ボタンをクリックします (”Submit”ボタンは2箇所ありますが、どちらでも同じ動作をします)。

(8) ジョブのステータスを示す画面が開きます。ジョブのステータスが Validating, Starting, Running, Stoppingと遷移していく様子を確認できます。 “Live Tailing”のセクション では、現在のファイルの中身を見ることができます。ログファイルを開いて計算の進捗を確認するときなどに便利です。 “SSH”のセクション では、ジョブを実行中のクラスタへSSH接続をして、コマンドを実行できます。デバックなどに便利です。 Runningの状態になってから10~20分程度でジョブが完了します

ジョブの結果の閲覧

(1) ジョブの完了後、ステータス画面で “Results”(結果)ボタンをクリックします

(2) ファイル(入力ファイルと出力ファイル)の一覧が表示されます。 View ボタンをクリックすると、ファイルの内容をブラウザ上で確認できます。 Download ボタンをクリックすると、ファイルをダウンロードできます。 Make this file available as input file ボタンをクリックすると、そのファイルを他のジョブの入力ファイルとして選択できるようになります。 Delete ボタンをクリックすると、そのファイルはRescale上から削除されます

buoyantCavity/3000/T を View ボタンで開いた例を以下に示します

buoyantCavity/validation/mergedImg.png を View ボタンで開いた例を以下に示します

実験計画法(DOE)ジョブ

ジョブの設定と実行

(1) Rescaleにログインした状態で、サンプルジョブにアクセスします

(2) 画面右上の “Clone” ボタンをクリックします。

(3) 入力ファイルの設定画面が開きます。このサンプルジョブでは、基本(Basic)ジョブと同一のzipファイルを入力ファイルとして使用しています。 次のステップに進むには “Next” をクリックします

(4) 並列設定の画面が開きます。ここで、各ジョブに引き渡すパラメータの設定をします。このチュートリアルでは、Buoyant Cavityの高温壁と低温壁の温度を変えた複数のジョブを同時に実行します。Saved Variables欄で設定されている通り、高温壁の温度(hotT)は300K~310K, 低温壁の温度(coldT)は280K~290Kの範囲で、2K刻みで変化させます。それぞれ6条件あるため、全体では6×6=36通りの条件のジョブが実行されます。他に変数を設定する場合は Add a Variable 欄から入力します。hotT と coldT が設定されていることを確認して、 “Next”をクリックします

(5) テンプレートの設定画面が開きます。先ほど設定したパラメータを書き込むファイルのテンプレートを、ここで設定します。今回は壁面温度をパラメータとして変化させるため buoyantCavity/0/T 用のテンプレートを設定します。テンプレートファイルの中身は View ボタンをクリックすると確認できます。 次のステップに進むには “Next” をクリックします

(6) ソフトウェアの設定画面が開きます。ここで、使用するソフトウェアを選択します。OpenFOAM v1712が選択されていること、Command欄にコマンドが入力されていることを確認し、 “Next”をクリックします

(7) ハードウェアの設定画面が開きます。基本(Basic)ジョブと同じ設定項目に加え、実験計画法(DOE)ではNumber of Task Slots(スロット数)を設定します。全解析条件(今回は36条件)のうち、同時に実行させる数を設定します。今回は、スロット数を36に設定し “Next”をクリックします。 こうすることで36条件の解析が全て同時に実行されます

(8) Post Processing の設定画面が開きます。各条件の解析が終わった後に行う処理(後処理, Post Processing)を設定できます。Post Processingはスクリプトとコマンドで実行することができます。またPost Processingの中で、 format1 に示す書式で標準出力をすると、ジョブの一覧表示に解析結果として表示させたり、グラフを描画したりすることができます(詳細は後述)。 View ボタンをクリックすると、Post Processing Scriptの中身を見ることができます。このチュートリアルのProcessing Scriptでは、最終タイムステップでの、y = 0.5 におけるx方向の温度分布を標準出力します(Key: x座標, Value: 温度) 次のステップに進むには "Next" をクリックします

format1

${Key1}\t${Value1}
${Key2}\t${Value2}

(9) ジョブの設定内容を確認する画面が開きます。設定が正しいことを確認し、 “Submit”ボタンをクリックします

(10) ジョブのステータスを示す画面が開きます。 Runningの状態になってから30~40分程度でジョブが完了します

ジョブの結果の閲覧

(1) ジョブの完了後、ステータス画面で “Results”(結果)ボタンをクリックします

(2) Child Runsの一覧が表示されます。DOEで実行した各条件における解析は、runという単位で管理されます(今回は36条件実行したので、36個のrunがあるということです)。この画面では、デフォルトでは10個のrunしか表示されないため、36条件すべてを表示されるには Show 50(またはShow 100)をクリックします。 各runの詳細を見るには、 最も左の列にあるRun番号をクリックします

(3) ファイル(入力ファイルと出力ファイル)の一覧と、Post Processingで出力した結果が表示されます。ファイルについては、基本(Basic)ジョブと同じく, View, Download, Make this file available as input file, Deleteの操作ができます

グラフの表示

(1) ジョブのステータス画面で “Charts”ボタンをクリックします

(2) Chart typeSeries Selection を設定して、グラフを描くことができます。一例を以下に示します

REST API編

RescaleにはREST APIが備わっています(APIドキュメント)。これを使うと、Rescaleをプログラムから操作することができます。このAPIを使用するには、HTTPリクエストを送ることができる必要があります。ここではPythonのRequestsライブラリを使用して、PythonのスクリプトからRescaleを操作します
RescaleのAPIは “ScaleX Developer” および “ScaleX Enterprise” のみで提供されています。現在 “ScaleX Pro” をご利用で、APIの使用を希望される場合は、Rescale Japanサポートまでご連絡ください(詳細

API Keyの取得

(1) Rescaleにログインした状態で、 画面右上のメールアドレスから Account をクリックします

(2) 左側のメニューからAPIを選択します

(3) “Generate” (または “Regenerate”) ボタンをクリックします

(4) API Key(40文字の英数字の混合文字列)が発行されるので、 コピーしておきます 。API Keyを知っているとRescaleを自由に操作できるため、第三者に知られないようご注意ください

echoとsleepのジョブを投入する

まずは簡単なジョブとして、計算ノードでechoとsleepだけを実行するジョブを投入してみます。こちらの手順は、Pythonを実行できる環境で行う必要があります

(1) こちらで “Download ZIP”をクリックし、Pythonスクリプトを入手します( rescale_rest_api_com.py, rescale_rest_api_jp.py または rescale_rest_api_kr.py

(2) スクリプト中の4行目、 api_token = "a0************************************4b" の部分に先ほど取得したAPI Keyを入力します

(3) Pythonを実行できる環境で、上記のPythonスクリプトを実行します。ジョブIDが表示されます。Rescaleにログインすると、”Example Job from API”という名前のジョブが実行されていることを確認できます

$ python rescale_rest_api_jp.py
Job ID: rVFSc
Done!!

Buoyant Cavityのジョブを投入する

次に、実践的なジョブとして、Buoyant Cavityを実行するジョブを投入してみます。ファイルのアップロードには、最も高速にアップロードできる手段であるRescale CLIを使用します。Rescale CLIはJavaアプリケーション(jarファイル)であるため、こちらの手順はPythonに加えてJavaを実行できる環境で行う必要があります(CLIと比べるとアップロード性能は劣りますが、REST APIにもUpload Fileアクションは用意されています)。

(1) こちらで “Download ZIP”をクリックし、必要なファイルを入手します

(2) api_token = "a0************************************4b" の部分に先ほど取得したAPI Keyを入力します

(3) PythonとJavaを実行できる環境で openfoam_jobsubmit_com.py, openfoam_jobsubmit_jp.py, または openfoam_jobsubmit_kr.py を実行します。Pythonスクリプトが自動的に、ファイルのアップロード、ジョブの投入、ジョブのステータスのポーリングを行います。ジョブが完了するとPythonスクリプトも終了します。全て成功すると以下のような表示になります

$ python openfoam_jobsubmit_jp.py
# Uploading buoyantCavity.zip
- File ID: sWsMjf
# Creating Job
- Job ID: DKKbT
# Submitting the Job
# Executing the Job
- [2018/12/18 12:08:06] Job Status: Completed
# Done!!

--

--

Takahisa Shiratori

Interested in cloud computing and fluid dynamics, Ph.D. in Engineering, My opinions are my own