設計最適化とモデルベース開発に向けたPersistent ClusterのAPI操作

Takahisa Shiratori
5 min readMar 16, 2020

--

本記事は、2018年9月24日にQiitaで公開した記事を移行したものです。検証結果やスクリーンショット等は当時のものです

To read in English, click here.

背景

最適化アルゴリズムとCAEを組み合わせた設計最適化や、製品中の部品や要素をモデル化して製品全体を設計するモデルベース開発(Model Based Development, MBD)が、特に製造業において使われるようになりました。これらの手法においては、複数条件のCAE解析を同時に実行する必要があるため、クラウドの利用が効果的です。一方、小さめ(計算時間があまり長くない)の解析ジョブをたくさん実行し、試行錯誤のサイクルを早く回すことが重要になります

この記事でやることの目的

上記の要求をRescaleを使って実現しようとすると、クラスタの起動に要する時間を無視できなくなります。Rescaleの標準的な動作では、ジョブを投入するとそのジョブ専用のクラスタがクラウド上でLaunch(起動)されますが、これに2~3分程度要します。またTerminate(終了)にも同程度の時間を要します。ジョブが1つあたり数分で終わる規模で、かつ条件を変えて繰り返しジョブを実行する場合、これらのロスが蓄積して解析フロー全体のかなりの割合を占めてしまいます。

そこで、このLaunchとTerminateにかかる時間を節約することを目的として、Persistent Cluster(Documentation, 日本語Blog)という機能を使用します。この機能を使うと、ジョブ完了後もクラスタが残り、別のジョブを投入することができます

また、設計最適化やMBDのツールからRescaleへジョブを投入するには、APIを使用する必要があります。以下では、RescaleのREST APIを使用して、スクリプト(Python)からPersistent Clusterを起動してジョブを投入します

やってみる

サンプルコードと関連ファイルをこちら(GitHubGist)に公開してあります。以下の4つのファイルを使用します

persistentClusterSample.py: メインスクリプト

testCluster.json: 起動するクラスタの設定を記述したjson

firstJob.json: 実行するする1つ目のジョブの設定を記述したjson

secondJob.json: 実行するする2つ目のジョブの設定を記述したjson

これらのファイルを同一ディレクトリに保存します。persistentClusterSample.pyの中の"your-api-token"の部分を、RescaleのAPI Keyに置き換えます。最後にpersistentClusterSample.pyを実行します。Amazon Linux 2(ami-04681a1dbd79675a5, us-east-1)で実行したときの標準出力の例を以下に示します

$ ls
firstJob.json persistentClusterSample.py secondJob.json testCluster.json
$ vim persistentClusterSample.py
$ python persistentClusterSample.py
Cluster ID: fWrPdb
Status date: 2018-09-23T14:37:11.198000Z, Status: Starting
Status date: 2018-09-23T14:37:07.983010Z, Status: Queued
Status date: 2018-09-23T14:37:07.608333Z, Status: Pending
Status date: 2018-09-23T14:37:06.513055Z, Status: Not Started
Job ID: wsGjp
Job ID: uaOxd
Job wsGjp is submitted to the cluster fWrPdb
Job uaOxd is submitted to the cluster fWrPdb
[2018/09/23 14:50:19] First Job: Completed, Second Job: Completed
Status date: 2018-09-23T14:50:20.684000Z, Status: Stopping
Done

RescaleのWeb UIでは、Clusterのステータスの変化を以下のような表示で確認できます

これによると

  • クラスタの起動に2分要した(Cluster — Starting)
  • 1つ目のジョブに5分要した(First Job — Executing)
  • 1つ目のジョブの終了後、すぐに2つ目のジョブが開始された
  • 2つ目のジョブに5分要した(Second Job — Executing)

ということが確認できます。ジョブごとにクラスタをLaunchすることなく、複数のジョブを実行することができました

--

--

Takahisa Shiratori

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