Executor クイックスタート
このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。
qiskit[all]~=2.4.0 qiskit-ibm-runtime~=0.46.1 samplomatic~=0.18.0
Sampler プリミティブと同様に、Executorは量子回路の実行から出力レジスタをサンプリングしますが、組み込みのエラー抑制や軽減機能は備えていません。 むしろ、これはクライアント側で設計意図を捉えるための要素を提供し、コストのかかる回路バリエーションの生成をサーバー側に移行させる、 指向性実行モデルの一部である。 Executorは、回路の注釈やオプションで指定された指示に従い、パラメータ値を生成してバインドし、バインドされた回路をハードウェア上で実行し、実行結果とメタデータを返します。 このシステムは、ユーザーに代わって暗黙の判断を下すことはなく、ユーザーに完全な制御権と透明性を提供します。
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:
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)
jobOutput:
<RuntimeJobV2('d8286580bvlc73d1vmsg', 'executor')>
# Retrieve the result
result = job.result()QuantumProgramResult結果は 型です。 結果オブジェクトの詳細については、 「Executor の入力と出力 」を参照してください。
次のステップ
- Executorのサンプルを試してみてください。
- 実行者の入力と出力を理解する。
- Executorのブロードキャストの動作について学びましょう。