Skip to main content
IBM Quantum Platform

Executor クイックスタート

  • このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。

    qiskit[all]~=2.4.0
    qiskit-ibm-runtime~=0.46.1
    samplomatic~=0.18.0
    

Sampler プリミティブと同様に、Executorは量子回路の実行から出力レジスタをサンプリングしますが、組み込みのエラー抑制や軽減機能は備えていません。 むしろ、これはクライアント側で設計意図を捉えるための要素を提供し、コストのかかる回路バリエーションの生成をサーバー側に移行させる、 指向性実行モデルの一部である。 Executorは、回路の注釈やオプションで指定された指示に従い、パラメータ値を生成してバインドし、バインドされた回路をハードウェア上で実行し、実行結果とメタデータを返します。 このシステムは、ユーザーに代わって暗黙の判断を下すことはなく、ユーザーに完全な制御権と透明性を提供します。

Note

Qiskit パッケージには、現時点では Executor プリミティブ用の基底クラスが用意されていません。


開始前に

samplexこのページにあるコード例の一部では、Samplomatic パッケージに含まれる を使用しています。 したがって、これらのコードブロックを実行する前に、次のコードブロックに示すように、Samplomaticをインストールする必要があります。 詳細については、 Samplomaticのドキュメントを参照してください。

pip install samplomatic

# For visualization support, include the visualization dependencies.
# pip install samplomatic[vis]

Executorプリミティブの使用手順

1. アカウントを初期化する

IBM Quantum Compute Service はマネージド サービスであるため、まずアカウントを初期化する必要があります。 その後、期待値の計算に使用するQPUを選択できます。

まだアカウントをお持ちでない場合は、「 IBM Cloud® アカウントの設定」の手順に従ってください。

from qiskit_ibm_runtime import QiskitRuntimeService, Executor
from qiskit_ibm_runtime.quantum_program import QuantumProgram
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from samplomatic.transpiler import generate_boxing_pass_manager
from samplomatic import build

# Initialize the service and choose a backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend)

Output:

<IBMBackend('ibm_fez')>

2. 回路を作成し、トランスパイルする

Executorプリミティブを使用するには、少なくとも1つの回路が必要です。 必要に応じてパラメータを指定できます。

# Generate the circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.h(1)
circuit.cz(0, 1)
circuit.h(1)

# Using `measure_all` automatically creates the necessary
# classical registers.
circuit.measure_all()

この回路は、QPUがサポートする命令のみを使用するように変換する必要があります( これは命令セットアーキテクチャ(ISA) 回路と呼ばれます)。 これを行うには、トランスパイラーを使用してください。

# Transpile the circuit
preset_pass_manager = generate_preset_pass_manager(
    backend=backend, optimization_level=0
)
isa_circuit = preset_pass_manager.run(circuit)

3. QuantumProgram を初期化する

ワークロードに合わせて を QuantumProgram 初期化してください。 QuantumProgramItemsA QuantumProgram は で構成されています。 通常、各項目は回路、一連のパラメータ値、および場合によっては回路の内容をランダム化する機能 samplex で構成されます。 詳細については、 「Executorの入力と出力」 を参照してください。

次のセルでは、 を QuantumProgram 初期化し、25回の発射を行うよう指定しています。 次に、トランスパイルされたターゲット回路を追加します。

# Initialize an empty program
program = QuantumProgram(shots=25)

# Append the circuit to the program
program.append_circuit_item(isa_circuit)

4. 任意:ゲートと測定値を注釈付きボックスにまとめる

命令をボックスにまとめ、注釈を付けることが、意図を明確にする主な方法です。 次の例では、およびそのツイリングパラメータを使用して generate_boxing_pass_manager 、2量子ビットゲートと測定をボックスにグループ化し、ツイリング注釈を適用します。

# Generate a boxing pass manager to group gates
# and measurements into boxes and add
# a`Twirl` annotation.
boxes_pm = generate_boxing_pass_manager(
    # Add gate twirling
    enable_gates=True,
    # Add measurement twirling
    enable_measures=True,
)

boxed_circuit = boxes_pm.run(isa_circuit)
boxed_circuit.draw("mpl", idle_wires=False)

Output:

Output of the previous code cell

5. 任意:テンプレート回路とsamplexを作成し、プログラムに追加する

次に、Samplomatic のビルド手法を使用して、 テンプレート回路samplex ペアを生成します。 このテンプレート回路は、元の回路と構造的に同等です。 ただし、所定の注釈(この例ではゲートおよび測定のツイリング)を実装するために、その単一量子ビットゲートはパラメータ化ゲートに置き換えられている。 このサンプレックスには、テンプレート回路のランダム化されたパラメータを生成するために必要なすべての情報がエンコードされています。

テンプレート回路とサンプルクス・ペアを生成したら、 append_samplex_item method を使用してそのペアをプログラムに追加します。

およびその引数に関する samplomatic.samplex.Samplex 詳細については、Samplomatic API ドキュメントを参照してください。

# Build the template circuit and the samplex
template_circuit, samplex = build(boxed_circuit)

# Append the template circuit and samplex as a `samplex_item`
program.append_samplex_item(
    template_circuit,
    samplex=samplex,
    shape=(num_randomizations := 20,),
)

6. Executorを呼び出して結果を取得する

IBM® バックエンド上で、デフォルトオプションを Executor 指定して プリミティブを実行します QuantumProgram 。 利用可能なオプションについては、 「Executor オプション」 を参照してください。

# Initialize an Executor with the default options
executor = Executor(mode=backend)

# Submit the job
job = executor.run(program)
job

Output:

<RuntimeJobV2('d8286580bvlc73d1vmsg', 'executor')>
# Retrieve the result
result = job.result()

QuantumProgramResult結果は 型です。 結果オブジェクトの詳細については、 「Executor の入力と出力 」を参照してください。


次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。