Rescale’s REST APIの使用
RescaleのREST APIを使用すると、入力ファイルのアップロード、ジョブの作成、既存のジョブのステータスの表示などを行うことができます。APIエンドポイントの全リストは、Rescale APIApplication program interface (API) is a set of routines, pr... Documentationを参照してください。
APIキーは、APIと対話する際に、お客様のアカウントを認証するために必要です。お客様のアカウントのAPIキーを生成するには、設定ページのAPIセクションに移動し、Generateボタンをクリックします。
Rescale APIによるジョブの実行
この例では、cURLとpythonの両方を使用して、APIからLS-DYNAのジョブを設定する方法を紹介します。
まず、入力ファイル(input.zip)のあるディレクトリに移動し、コマンドを使ってアップロードします。
curl -X POST -H 'Content-Type:multipart/form-data' \-H 'Authorization: Token <api-token>' \-F "file=@input.zip" \https://platform.rescale.com/api/v2/files/contents/
以下のように返ってくるはずです。
{ "pathParts":{ "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "container":"prod-rescale-platform" }, "typeId":1, "name":"input.zip", "dateUploaded":"2016-11-11T18:50:54.078468Z", "relativePath":"input.zip", "storage":{ "storageType":"S3Storage", "id":"pCTMk", "connectionSettings":{ "region":"us-east-1" }, "encryptionType":"default" }, "decryptedSize":10391660, "downloadUrl":"https://platform.rescale.com/api/v2/files/yMqdxd/contents/", "sharedWith":[ ], "encodedEncryptionKey":"N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=", "owner":"demo@example.com", "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "isUploaded":true, "viewInBrowser":false, "id":"yMqdxd", "isDeleted":false, "md5":"159bb1cdd01987f9122f5ec673958eaf"}
次に、解析ソフトを選択する必要があります。解析ソフトの全リストは、curl -H "Authorization: Token <api-token>" https://platform.rescale.com/api/v2/analyses/
.抽出すべき重要な情報は、"code":"..."
の下に示されている、使用したいソフトウェアのコードです。
また、コアタイプの情報も必要です。これはcurl -H "Authorization:Token " https://platform.rescale.com/api/v2/coretypes/
で取得できます。ウェブUI に表示されるコアタイプの名前は、各エントリの "name":"…
の下に格納されています。同様に、"code":"… "
の下に表示されている、コアタイプのコードを抽出する必要があります。
現在のディレクトリと同じディレクトリに、ジョブの設定と情報をJSON化したデータファイルを作成します。入力ファイルのIDは、入力ファイルをアップロードしたときのレスポンスに記載されています。例えば以下のようなものです。
cat <<EOF > data.json{ "name": "LS-DYNA cURL API Setup", "jobanalyses": [ { "useRescaleLicense":true, "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single", "analysis": { "code": "ls_dyna", "version": "9.0.0" }, "hardware": { "coresPerSlot": 2, "slots": 1, "coreType": "hpc-3" }, "inputFiles": [ { "id": "yMqdxd" } ] } ]}EOF
コマンドオプションの全リストとそのデフォルトは、こちらをご覧ください。
次に、先ほど作成したデータファイルに基づいて、Rescaleジョブを設定するコマンドを実行します。
curl -X POST --data @data.json \-H "Authorization: Token <api-token>" \-H "Content-Type: application/json" \https://platform.rescale.com/api/v2/jobs/
以下のようなレスポンスが返ってくるはずです。
{ "monteCarloIterations":null, "paramFile":null, "name":"LS-DYNA cURL API Setup", "includeNominalRun":false, "jobanalyses":[ { "envVars":{ }, "preProcessScriptCommand":"", "postProcessScriptCommand":"", "postProcessScript":null, "useRescaleLicense":true, "templateTasks":[ ], "analysis":{ "version":"9.0.0", "code":"ls_dyna", "name":"LS-DYNA", "versionName":"R9.0.0" }, "hardware":{ "coresPerSlot":2, "coreType":"hpc-3", "coreSummary":{ "storagePerNode":80000, "gpusPerNode":0, "numberOfNodes":1.0, "memoryPerNode":7500 }, "slots":1, "type":"compute", "walltime":750 }, "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single", "preProcessScript":null, "flags":{ }, "inputFiles":[ { "pathParts":{ "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "container":"prod-rescale-platform" }, "typeId":1, "name":"input.zip", "dateUploaded":"2016-11-11T18:50:54.078468Z", "relativePath":"input.zip", "storage":{ "storageType":"S3Storage", "id":"pCTMk", "connectionSettings":{ "region":"us-east-1" }, "encryptionType":"default" }, "decryptedSize":10391660, "downloadUrl":"https://platform.rescale.com/api/v2/files/yMqdxd/contents/", "sharedWith":[ ], "encodedEncryptionKey":"N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=", "owner":"demo@rescale.com", "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "isUploaded":true, "viewInBrowser":false, "id":"yMqdxd", "isDeleted":false, "md5":"159bb1cdd01987f9122f5ec673958eaf" } ] } ], "projectId":null, "resourceFilters":[ ], "remoteVizConfig":null, "jobvariables":[ ], "sshPort":22, "expectedRuns":null, "caseFile":null, "isLowPriority":false, "owner":"demo@rescale.com", "isTemplateDryRun":false, "autoTerminateCluster":true, "id":"RcAFeb", "archiveFilters":[]}
これでジョブが保存され、Rescale Web UIに表示されるようになります。最後に、コマンドを使用してジョブを投入する必要があります。
curl -X POST -H 'Authorization: Token <api-token>' \https://platform.rescale.com/api/v2/jobs/RcAFeb/submit/
注:ジョブIDは前レスポンスに記載されています。
ジョブの状態を監視したい場合は、コマンドを使用します。
curl -H 'Authorization: Token <api-token>' \https://platform.rescale.com/api/v2/jobs/RcAFeb/statuses/
以下のようなレスポンスが返ってくるはずです。
{ "count":6, "previous":null, "results":[ { "status":"Completed", "statusDate":"2016-11-15T19:01:13.948641Z", "id":"KNwnm", "statusReason":"Completed successfully" }, { "status":"Executing", "statusDate":"2016-11-15T18:47:05.530000Z", "id":"ePisa", "statusReason":null }, { "status":"Validated", "statusDate":"2016-11-15T18:41:23.929000Z", "id":"Yfcem", "statusReason":null }, { "status":"Started", "statusDate":"2016-11-15T18:41:23.629000Z", "id":"KDisa", "statusReason":null }, { "status":"Queued", "statusDate":"2016-11-15T18:41:21.577545Z", "id":"ircem", "statusReason":null }, { "status":"Pending", "statusDate":"2016-11-15T18:40:56.465755Z", "id":"UOisa", "statusReason":null } ], "next":null}
ジョブはPythonスクリプトで設定することもできます。この例では、LS-DYNAジョブのセットアップと実行に使用できるサンプルPythonコードのチャンクを提供します。
注:この方法はrequests
ライブラリを使用するため、コードの先頭でimport requests
を実行する必要があります。
まず、ファイルをZIPで圧縮し、Rescaleにアップロードしてください。
file_upload = requests.post( 'https://platform.rescale.com/api/v2/files/contents/', data=None, files={'file': open('input.zip','rb')}, headers={'Authorization': 'Token <api-token>'} )print file_upload.content
なお、ファイル(input.zip)は、スクリプトと同じディレクトリに置く必要があります。
以下のようなレスポンスが返ってくるはずです。
{ "pathParts":{ "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip", "container":"prod-rescale-platform" }, "typeId":1, "name":"input.zip", "dateUploaded":"2016-11-14T22:58:35.729270Z", "relativePath":"input.zip", "storage":{ "storageType":"S3Storage", "id":"pCTMk", "connectionSettings":{ "region":"us-east-1" }, "encryptionType":"default" }, "decryptedSize":10391660, "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/", "sharedWith":[ ], "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=", "owner":"demo@rescale.com", "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip", "isUploaded":true, "viewInBrowser":false, "id":"FDXpJd", "isDeleted":false, "md5":"159bb1cdd01987f9122f5ec673958eaf"}
次に、ジョブのセットアップが必要です。そのためには、解析用のソフトウェアとハードウェアの情報を取得する必要があります。
解析用:
requests.get( 'https://platform.rescale.com/api/v2/analyses/', headers={'Authorization': 'Token <api-token>'} )
Coretype用:
requests.get( 'https://platform.rescale.com/api/v2/coretypes/', headers={'Authorization': 'Token <api-token>'} )
いずれの場合も、"code":"… "
の下に表示されるコードを取得する必要があります。
ジョブ設定の例としては、次のようなものがあります。
job_setup = requests.post( 'https://platform.rescale.com/api/v2/jobs/', json = { "name": "LS-DYNA Python API Setup", "jobanalyses": [ { "useRescaleLicense":True, "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single", "analysis": { "code": "ls_dyna", "version": "9.0.0" }, "hardware": { "coresPerSlot": 2, "slots": 1, "coreType": "hpc-3" }, "inputFiles": [ { "id": "FDXpJd" } ] } ] }, headers={'Authorization': 'Token <api-token>'} )print job_setup.content
注:入力ファイルのIDは、前回の出力(ファイルのアップロード)から確認できます
以下のような出力になります。
{ "monteCarloIterations":null, "paramFile":null, "name":"LS-DYNA Python API Setup", "includeNominalRun":false, "jobanalyses":[ { "envVars":{ }, "preProcessScriptCommand":"", "postProcessScriptCommand":"", "postProcessScript":null, "useRescaleLicense":true, "templateTasks":[ ], "analysis":{ "version":"9.0.0", "code":"ls_dyna", "name":"LS-DYNA", "versionName":"R9.0.0" }, "hardware":{ "coresPerSlot":2, "coreType":"hpc-3", "coreSummary":{ "storagePerNode":80000, "gpusPerNode":0, "numberOfNodes":1.0, "memoryPerNode":7500 }, "slots":1, "type":"compute", "walltime":750 }, "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single", "preProcessScript":null, "flags":{ }, "inputFiles":[ { "pathParts":{ "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip", "container":"prod-rescale-platform" }, "typeId":1, "name":"input.zip", "dateUploaded":"2016-11-14T22:58:35.729270Z", "relativePath":"input.zip", "storage":{ "storageType":"S3Storage", "id":"pCTMk", "connectionSettings":{ "region":"us-east-1" }, "encryptionType":"default" }, "decryptedSize":10391660, "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/", "sharedWith":[ ], "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=", "owner":"demo@rescale.com", "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip", "isUploaded":true, "viewInBrowser":false, "id":"FDXpJd", "isDeleted":false, "md5":"159bb1cdd01987f9122f5ec673958eaf" } ] } ], "projectId":null, "resourceFilters":[ ], "remoteVizConfig":null, "jobvariables":[ ], "sshPort":22, "expectedRuns":null, "caseFile":null, "isLowPriority":false, "owner":"demo@rescale.com", "isTemplateDryRun":false, "autoTerminateCluster":true, "id":"ASwPT", "archiveFilters":[ ]}
これでジョブが保存され、Rescale Web UIに表示されるようになります。最後に、コマンドを使用してジョブを投入する必要があります。
requests.post( 'https://platform.rescale.com/api/v2/jobs/ASwPT/submit/', headers={'Authorization': 'Token <api-token>'} )
ジョブを監視したい場合は、以下のコマンドで実行することができます。
job_status = requests.get( 'https://platform.rescale.com/api/v2/jobs/ASwPT/statuses/', headers={'Authorization': 'Token <api-token>'} )print job_status.content