Quickstart Executor
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan 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
Mirip dengan primitif Sampler, Executor mengambil sampel register output dari eksekusi quantum circuit, tapi tidak memiliki error suppression atau mitigasi bawaan. Sebagai gantinya, ini adalah bagian dari model eksekusi terarah yang menyediakan bahan-bahan untuk menangkap niat desain di sisi klien, dan memindahkan pembuatan varian circuit yang mahal ke sisi server. Executor mengikuti direktif yang diberikan dalam anotasi dan opsi circuit, menghasilkan dan mengikat nilai parameter, mengeksekusi circuit yang terikat pada hardware, dan mengembalikan hasil eksekusi beserta metadata. Ia tidak membuat keputusan implisit apapun untukmu dan memberimu kontrol penuh serta transparansi.
Paket Qiskit belum memiliki kelas dasar untuk primitif Executor.
Sebelum kamu mulai
Beberapa contoh kode di halaman ini menggunakan samplex, yang merupakan bagian dari paket Samplomatic. Karena itu, sebelum menjalankan blok kode tersebut, kamu harus menginstal Samplomatic, seperti yang ditunjukkan di blok kode berikut. Untuk informasi lebih lanjut, lihat dokumentasi Samplomatic.
pip install samplomatic
# For visualization support, include the visualization dependencies.
# pip install samplomatic[vis]
Langkah-langkah menggunakan primitif Executor
1. Inisialisasi akun
Karena Qiskit Runtime adalah layanan terkelola, kamu perlu menginisialisasi akunmu terlebih dahulu. Kamu kemudian bisa memilih QPU yang ingin digunakan untuk menghitung nilai ekspektasi.
Ikuti langkah-langkah di Siapkan akun IBM Cloud®-mu jika kamu belum punya akun.
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. Buat dan transpile circuit
Kamu butuh setidaknya satu circuit untuk menggunakan primitif Executor. Circuit bisa secara opsional memiliki parameter.
# 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 diubah agar hanya menggunakan instruksi yang didukung QPU (disebut circuit instruction set architecture (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. Inisialisasi QuantumProgram
Inisialisasi QuantumProgram dengan beban kerjamu. QuantumProgram terdiri dari QuantumProgramItem. Biasanya, setiap item terdiri dari circuit, sekumpulan nilai parameter, dan mungkin samplex untuk mengacak konten circuit. Untuk detail lengkap, lihat Input dan output Executor.
Sel berikut menginisialisasi QuantumProgram dan menentukan untuk melakukan 25 shot. Selanjutnya, ia menambahkan circuit target yang sudah ditranspile.
# Initialize an empty program
program = QuantumProgram(shots=25)
# Append the circuit to the program
program.append_circuit_item(isa_circuit)
4. Opsional: Kelompokkan gate dan pengukuran ke dalam kotak beranotasi
Mengelompokkan instruksi ke dalam kotak dan memberikan anotasi adalah cara utama untuk menentukan niatmu. Dalam contoh berikut, kita menggunakan generate_boxing_pass_manager dan parameter twirling-nya untuk mengelompokkan gate dua-qubit dan pengukuran ke dalam kotak serta 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)
5. Opsional: Buat template circuit dan samplex, lalu tambahkan ke program
Selanjutnya, gunakan metode build Samplomatic untuk menghasilkan pasangan template circuit dan samplex. Template circuit secara struktural setara dengan circuit asli. Namun, gate single-qubit-nya digantikan oleh gate yang diparameterisasi untuk mengimplementasikan anotasi yang ditentukan (gate dan measurement twirling, dalam contoh ini). Samplex mengkodekan semua informasi yang diperlukan untuk menghasilkan parameter acak bagi template circuit.
Setelah menghasilkan pasangan template circuit dan samplex, gunakan metode append_samplex_item untuk menambahkan pasangan tersebut ke program.
Lihat dokumentasi API Samplomatic untuk detail lengkap tentang samplomatic.samplex.Samplex dan argumen-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. Jalankan Executor dan dapatkan hasil
Jalankan QuantumProgram pada backend IBM® menggunakan primitif Executor dengan opsi default. Lihat Opsi Executor untuk mempelajari opsi 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()
Hasilnya bertipe QuantumProgramResult. Lihat Input dan output Executor untuk mempelajari tentang objek hasil.
Langkah selanjutnya
- Coba beberapa contoh Executor.
- Pahami input dan output Executor.
- Pelajari tentang semantik broadcasting Executor.