メインコンテンツへスキップ

ジョブの監視またはキャンセル

ワークロードの一覧は、ワークロードページで確認できます。

ジョブのステータスを確認する

ワークロードテーブルを開き、「Status」列でジョブが完了したか失敗したかを確認してください。

残り使用量を確認する

インスタンステーブルを開き、残り使用量を確認したいプランに対応するタブを選択してください。プランの合計使用時間と残り時間が表示されます。

送信されたジョブおよびワークロード数のメトリクスを確認する

アナリティクスページにアクセスすると、送信されたジョブの総数、バッチワークロードとセッションワークロードの件数を確認できます。アナリティクスページは、ご自身が所有または管理しているアカウントのみ表示可能です。

ジョブを監視する

ジョブインスタンスを使用して、適切なコマンドを呼び出すことでジョブのステータスを確認したり、結果を取得したりできます。

job.result()ジョブ完了直後に結果を確認します。ジョブの結果はジョブ完了後に利用可能になります。そのため、job.result() はジョブが完了するまでブロッキング呼び出しとなります。
job.job_id()そのジョブを一意に識別するIDを返します。後でジョブの結果を取得するにはジョブIDが必要です。そのため、後で取得する可能性のあるジョブのIDは保存しておくことをお勧めします。
job.status()ジョブのステータスを確認します。
job = service.job(<job_id>)以前に送信したジョブを取得します。この呼び出しにはジョブIDが必要です。

後でジョブ結果を取得する

service.job(\<job\_id>) を呼び出すことで、以前に送信したジョブを取得できます。ジョブIDが手元にない場合、または複数のジョブを一度に取得したい場合(廃止されたQPU(量子処理ユニット)のジョブを含む)は、代わりにオプションフィルターを指定して service.jobs() を呼び出してください。詳細は QiskitRuntimeService.jobs を参照してください。

非推奨のプロバイダーパッケージ

service.jobs() は、非推奨の qiskit-ibm-provider パッケージで実行されたジョブも返します。旧来の(同様に非推奨の)qiskit-ibmq-provider パッケージで送信されたジョブは、もはや利用できません。

この例では、my_backend で実行された最新の10件のランタイムジョブを返します。

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# This cell is hidden from users
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager

from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
import numpy as np

my_backend = "ibm_torino"
service = QiskitRuntimeService()
# backend = service.backend(my_backend)
backend = service.least_busy()

# Define two circuits, each with one parameter with two parameters.
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.ry(Parameter("a"), 0)
circuit.cx(0, 1)
circuit.h(0)
circuit.measure_all()

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
transpiled_circuit = pm.run(circuit)

params = np.random.uniform(size=(2, 3)).T

sampler_pub = (transpiled_circuit, params)

# Instantiate the new estimator object, then run the transpiled circuit
# using the set of parameters and observables.
sampler = SamplerV2(mode=backend)
job = sampler.run([sampler_pub], shots=4)
print(job.job_id())
d305ck0ocacs73ajagvg
result = job.result()

spans = job.result().metadata["execution"]["execution_spans"]
print(spans)
ExecutionSpans([DoubleSliceSpan(<start='2025-09-09 16:31:16', stop='2025-09-09 16:31:16', size=24>)])
params = np.random.uniform(size=(2, 3))
params
array([[0.2260416 , 0.8747859 , 0.44361995],
[0.94700856, 0.96826017, 0.98426562]])
mask = spans[0].mask(0)
mask
array([[[ True,  True,  True,  True],
[ True, True, True, True]],

[[ True, True, True, True],
[ True, True, True, True]],

[[ True, True, True, True],
[ True, True, True, True]]])
from qiskit_ibm_runtime import QiskitRuntimeService

# Initialize the account first.
service = QiskitRuntimeService()
# Use `limit` to retrieve a specific number of jobs. The default `limit` is 10.
service.jobs(backend_name=my_backend)

ジョブをキャンセルする

IBM Quantum Platformダッシュボードのワークロードページまたは特定のワークロードの詳細ページからジョブをキャンセルできます。ワークロードページでは、該当ワークロードの行末にあるオーバーフローメニューをクリックし、「Cancel」を選択してください。特定のワークロードの詳細ページにいる場合は、ページ上部の「Actions」ドロップダウンを使用して「Cancel」を選択してください。

Qiskitでは、job.cancel() を使用してジョブをキャンセルできます。

Samplerの実行スパンを確認する

Qiskit Runtimeで実行された SamplerV2 ジョブの結果には、メタデータに実行タイミング情報が含まれています。 このタイミング情報を使用することで、特定のショットがQPU上でいつ実行されたかについて、上限と下限のタイムスタンプ境界を設定できます。 ショットは ExecutionSpan オブジェクトにグループ化されており、各オブジェクトは開始時刻、終了時刻、およびそのスパン内で収集されたショットの仕様を示します。

実行スパンは、ExecutionSpan.mask メソッドを提供することで、そのウィンドウ内に実行されたデータを指定します。このメソッドは、任意の Primitive Unified Block(PUB) インデックスを与えると、そのウィンドウ内に実行されたすべてのショットに対して True となるブールマスクを返します。PUBはSamplerのrun呼び出しに渡された順番でインデックスが付けられます。たとえば、PUBのシェイプが (2, 3) で4ショット実行された場合、マスクのシェイプは (2, 3, 4) となります。詳細は execution_span APIページを参照してください。

例: 実行スパン情報を確認するには、SamplerV2 が返す結果のメタデータを参照してください。このメタデータは ExecutionSpans オブジェクトの形式で提供されます。このオブジェクトはリスト型のコンテナで、SliceSpan などの ExecutionSpan サブクラスのインスタンスを格納しています。

from qiskit.primitives import BitArray

# Get the mask of the 1st PUB for the 0th span.
mask = spans[0].mask(0)

# Decide whether the 0th shot of parameter set (1, 2) occurred in this span.
in_this_span = mask[2, 1, 0]

# Create a new bit array containing only the PUB-1 data collected during this span.
bits = result[0].data.meas
filtered_data = BitArray(bits.array[mask], bits.num_bits)

実行スパンは、インデックスで選択した特定のPUBに関する情報のみを含むようにフィルタリングできます。

# take the subset of spans that reference data in PUBs 0 or 2
spans.filter_by_pub([0, 2])
ExecutionSpans([DoubleSliceSpan(<start='2025-09-09 16:31:16', stop='2025-09-09 16:31:16', size=24>)])

実行スパンのコレクション全体に関するグローバル情報を確認します。

print("Number of execution spans:", len(spans))
print(" Start of the first span:", spans.start)
print(" End of the last span:", spans.stop)
print(" Total duration (s):", spans.duration)
Number of execution spans: 1
Start of the first span: 2025-09-09 16:31:16.320568
End of the last span: 2025-09-09 16:31:16.865858
Total duration (s): 0.54529

特定のスパンを取り出して確認します。

spans.sort()
print(" Start of first span:", spans[0].start)
print(" End of first span:", spans[0].stop)
print("#shots in first span:", spans[0].size)
Start of first span: 2025-09-09 16:31:16.320568
End of first span: 2025-09-09 16:31:16.865858
#shots in first span: 24
備考

異なる実行スパンで指定された時間ウィンドウが重複することがあります。これはQPUが同時に複数の実行を行っていたためではなく、量子実行と並行して発生する可能性のある特定のクラシカル処理に伴うアーティファクトです。保証されているのは、参照されたデータが報告された実行スパン内で確実に発生したということであり、時間ウィンドウの境界が可能な限り厳密であることを意味するものではありません。

次のステップ

おすすめ