Azure Quantum のジョブを処理する
Azure Quantum で量子プログラムを実行するときは、 jobを作成して実行します。 ジョブを作成して実行する手順は、ワークスペース用に構成するジョブの種類とプロバイダーと target によって異なります。
ジョブ プロパティ
すべてのジョブに共通する次のプロパティがあります。
プロパティ | 説明 |
---|---|
ID | ジョブの一意の識別子。 ワークスペース内で一意である必要があります。 |
プロバイダー | "誰" にジョブを実行させるか。 |
Target | "何" に対してジョブを実行するか。 たとえば、プロバイダーから提供される正確な量子ハードウェアや量子シミュレーターなどです。 |
名前 | ジョブの整理に役立つユーザー定義の名前。 |
パラメーター | targetsの省略可能な入力パラメーター。 使用可能なパラメーターの定義については、選択した target のドキュメントを参照してください。 |
ジョブを作成すると、その状態と実行履歴に関するさまざまなメタデータが使用できるようになります。
ジョブのライフサイクル
量子プログラムを作成したら、 target を選択してジョブを送信できます。
次の図は、ジョブを送信した後の基本的なワークフローを示しています:
まず Azure Quantum は、ワークスペースで構成した Azure Storage アカウントにジョブをアップロードします。 次に、ジョブに指定したプロバイダーのジョブがジョブキューに追加されます。 その後、Azure Quantum によってプログラムがダウンロードされ、プロバイダー用に変換されます。 プロバイダーはジョブを処理し、Azure Storage に出力を返します。この出力はダウンロードに使用できます。
ジョブの監視
ジョブを送信したら、ジョブの状態を監視できます。 ジョブの状態は次のとおりです:
状態 | Description |
---|---|
waiting | ジョブは実行を待機しています。 一部のジョブは、待機中の状態で前処理タスクを実行します。 waiting は常に最初の状態ですが、waiting で観察する前に、ジョブが executing の状態に移ることもあります。 |
executing | targetは現在ジョブを実行しています。 |
succeeded | ジョブは正常に完了し、出力を利用できます。 これは最終状態です。 |
failed | ジョブが失敗し、エラー情報が表示されます。 これは最終状態です。 |
取り消し済み | ユーザーがジョブの実行をキャンセルするように要求しました。 これは最終状態です。 詳細については、この記事の「Job Cancellation (ジョブのキャンセル)」を参照してください。 |
succeeded
、failed
、cancelled
の状態は、最終状態とみなされます。 ジョブがこれらの状態のいずれかになると、更新は行われず、対応するジョブ出力データも変更されません。
次の図は、ジョブの状態遷移の可能性を示しています:
ジョブが正常に完了すると、Azure Storage アカウントの出力データへのリンクが表示されます。 このデータにアクセスする方法は、ジョブの送信に使用した SDK またはツールによって異なります。
ジョブを監視する方法
Python、Azure portal、Azure CLI を使用してジョブを監視できます。
ジョブのすべてのプロパティには、 job.details
でアクセスできます。 たとえば、次のようにジョブ名、状態、ID にアクセスできます。
print(job.details)
print("\nJob name:", job.details.name)
print("Job status:", job.details.status)
print("Job ID:", job.details.id)
{'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...}
Job name: MyPythonJob
Job status: Succeeded
Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
ジョブの数
多数のジョブから結果のカウントを取得するには、Quantum Development Kit ツールのローカル インストールを実行する必要があります。 ローカル インストールを使用すると、ジョブ ID をローカルに格納できます。
次のコードをコピーして、ジョブとその結果の一覧を取得できます。
for job in workspace.list_jobs():
print(job.id, job.details.name, job.details.output_data_uri)
ジョブのキャンセル
ジョブがまだ最終的な状態になっていない場合 (例: succeeded
、failed
、cancelled
)、ジョブのキャンセルを要求することができます。 すべてのプロバイダーが waiting
状態にある場合は、ジョブを取り消します。 ただし、ジョブが executing
状態である場合、すべてのプロバイダーが取り消しをサポートするわけではありません。
Note
ジョブの実行を開始した後で取り消した場合、そのジョブの一部または全部の料金がアカウントに請求される可能性があります。 選択したプロバイダーの課金ドキュメントを参照してください