Langkau ke kandungan utama

Mula pantas Executor

Versi pakej

Kod di halaman ini dibangunkan menggunakan keperluan berikut. Kami syorkan menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
samplomatic~=0.18.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime samplomatic

Seperti primitif Sampler, Executor menyampel daftar output daripada pelaksanaan Circuit kuantum, tetapi ia tidak mempunyai sebarang penindasan atau pengurangan ralat terbina dalam. Sebaliknya, ia adalah sebahagian daripada model pelaksanaan berarah yang menyediakan bahan-bahan untuk menangkap niat reka bentuk di sisi klien, dan mengalihkan penjanaan variasi Circuit yang mahal ke sisi pelayan. Executor mengikuti arahan yang diberikan dalam anotasi Circuit dan pilihan, menjana dan mengikat nilai parameter, melaksanakan Circuit yang terikat pada perkakasan, dan mengembalikan keputusan pelaksanaan dan metadata. Ia tidak membuat sebarang keputusan implisit untuk anda dan memberikan anda kawalan dan ketelusan penuh.

nota

Pakej Qiskit belum mempunyai kelas asas untuk primitif Executor.

Sebelum anda mulakan

Sesetengah contoh kod di halaman ini menggunakan samplex, yang merupakan sebahagian daripada pakej Samplomatic. Oleh itu, sebelum menjalankan blok kod tersebut, anda mesti memasang Samplomatic, seperti yang ditunjukkan dalam blok kod berikut. Untuk maklumat lanjut, lihat dokumentasi Samplomatic.

pip install samplomatic

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

Langkah-langkah untuk menggunakan primitif Executor

1. Mulakan akaun

Kerana Qiskit Runtime adalah perkhidmatan terurus, anda perlu memulakan akaun anda terlebih dahulu. Anda kemudian boleh memilih QPU yang ingin anda gunakan untuk mengira nilai jangkaan.

Ikuti langkah-langkah dalam Sediakan akaun IBM Cloud® anda jika anda belum mempunyai akaun.

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)
<IBMBackend('ibm_fez')>

2. Cipta dan transpail Circuit

Kamu memerlukan sekurang-kurangnya satu Circuit untuk menggunakan primitif Executor. Ia boleh mempunyai parameter secara pilihan.

# 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()

Circuit perlu ditransformasi untuk hanya menggunakan arahan yang disokong oleh QPU (dirujuk sebagai Circuit set seni bina arahan (ISA)). Gunakan Transpiler untuk melakukan ini.

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

3. Mulakan QuantumProgram

Mulakan QuantumProgram dengan beban kerja anda. QuantumProgram terdiri daripada QuantumProgramItems. Biasanya, setiap item terdiri daripada Circuit, set nilai parameter, dan mungkin samplex untuk merawakkan kandungan Circuit. Untuk butiran penuh, lihat Input dan output Executor.

Sel berikut memulakan QuantumProgram dan menentukan untuk melakukan 25 tembakan. Seterusnya, ia menambahkan Circuit sasaran yang telah ditransail.

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

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

4. Pilihan: Kumpulkan gate dan ukuran ke dalam kotak beranotasi

Mengumpulkan arahan ke dalam kotak dan membuat anotasi adalah cara utama untuk menentukan niat anda. Dalam contoh berikut, kita menggunakan generate_boxing_pass_manager dan parameter twirling-nya untuk mengumpulkan gate dua-Qubit dan ukuran ke dalam kotak dan menerapkan anotasi twirling.

# 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 of the previous code cell

5. Pilihan: Bina Circuit templat dan samplex, dan tambahkan ke program

Seterusnya, gunakan kaedah Samplomatic build untuk menjana pasangan Circuit templat dan samplex. Circuit templat adalah bersamaan secara struktur dengan Circuit asal. Walau bagaimanapun, gate satu-Qubitnya digantikan dengan gate berparameter untuk melaksanakan anotasi yang ditetapkan (twirling gate dan ukuran, dalam contoh ini). Samplex mengenkod semua maklumat yang diperlukan untuk menjana parameter rawak bagi Circuit templat.

Setelah menjana pasangan Circuit templat dan samplex, gunakan kaedah append_samplex_item untuk menambahkan pasangan ke program.

Lihat dokumentasi API Samplomatic untuk butiran penuh tentang samplomatic.samplex.Samplex dan argumennya.

# 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. Panggil Executor dan dapatkan keputusan

Jalankan QuantumProgram pada Backend IBM® menggunakan primitif Executor dengan pilihan lalai. Lihat Pilihan Executor untuk mengetahui tentang pilihan yang tersedia.

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

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

Keputusan adalah dari jenis QuantumProgramResult. Lihat Input dan output Executor untuk mengetahui tentang objek keputusan.

Langkah seterusnya

Cadangan