Rescale’s REST APIの使用

RescaleのREST APIを使用すると、入力ファイルのアップロード、ジョブの作成、既存のジョブのステータスの表示などを行うことができます。APIエンドポイントの全リストは、Rescale API Documentationを参照してください。

APIキーは、APIと対話する際に、お客様のアカウントを認証するために必要です。お客様のアカウントのAPIキーを生成するには、設定ページのAPIセクションに移動し、Generateボタンをクリックします。

generate api.e8fc6161

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