Performance Management: Sebuah Qiskit Function oleh Q-CTRL Fire Opal
Lihat referensi API
Qiskit Functions adalah fitur eksperimental yang hanya tersedia untuk pengguna IBM Quantum® Premium Plan, Flex Plan, dan On-Prem (melalui IBM Quantum Platform API) Plan. Fitur ini dalam status rilis pratinjau dan dapat berubah sewaktu-waktu.
Versi paket
Kode pada halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.1
qiskit-ibm-runtime~=0.45.1
Gambaran Umum
Fire Opal Performance Management memudahkan siapa saja untuk mendapatkan hasil yang berarti dari komputer kuantum dalam skala besar tanpa perlu menjadi ahli hardware kuantum. Saat menjalankan Circuit dengan Fire Opal Performance Management, teknik penekanan error berbasis AI diterapkan secara otomatis, sehingga memungkinkan penskalaan masalah yang lebih besar dengan lebih banyak Gate dan qubit. Pendekatan ini mengurangi jumlah shot yang dibutuhkan untuk mencapai jawaban yang benar, tanpa tambahan overhead — menghasilkan penghematan signifikan baik dalam waktu komputasi maupun biaya.
Performance Management menekan error dan meningkatkan probabilitas mendapatkan jawaban yang benar di hardware yang berisik. Dengan kata lain, ia meningkatkan rasio sinyal-terhadap-noise. Gambar berikut menunjukkan bagaimana akurasi yang lebih tinggi yang dimungkinkan oleh Performance Management dapat mengurangi kebutuhan shot tambahan dalam kasus algoritma Quantum Fourier Transform 10-Qubit. Dengan hanya 30 shot, Q-CTRL mencapai ambang kepercayaan 99%, sedangkan metode default (QiskitRuntime Sampler, optimization_level=3 dan resilience_level=1, ibm_sherbrooke) memerlukan 170.000 shot. Dengan mendapatkan jawaban yang benar lebih cepat, kamu menghemat waktu komputasi yang signifikan.
Fungsi Performance Management bisa digunakan dengan algoritma apa pun, dan kamu bisa dengan mudah menggunakannya sebagai pengganti primitif IBM Quantum standar. Di balik layar, beberapa teknik penekanan error bekerja bersama untuk mencegah error terjadi saat runtime. Semua metode pipeline Fire Opal sudah dikonfigurasi sebelumnya dan bersifat agnostik terhadap algoritma, artinya kamu selalu mendapatkan performa terbaik tanpa perlu konfigurasi tambahan.
Untuk mendapatkan akses ke Performance Management, hubungi Q-CTRL.
Deskripsi
Fire Opal Performance Management memiliki dua opsi eksekusi yang mirip dengan primitif IBM Quantum, sehingga kamu bisa dengan mudah beralih ke Sampler dan Estimator Q-CTRL. Alur kerja umum untuk menggunakan fungsi Performance Management adalah:
- Definisikan Circuit kamu (dan operator dalam kasus Estimator).
- Jalankan Circuit.
- Ambil hasilnya.
Untuk mengurangi noise hardware, Fire Opal menggunakan berbagai teknik penekanan error berbasis AI seperti yang digambarkan pada gambar berikut. Dengan Fire Opal, seluruh pipeline sepenuhnya otomatis tanpa perlu konfigurasi sama sekali.
Pipeline Fire Opal menghilangkan kebutuhan akan overhead tambahan, seperti peningkatan waktu runtime kuantum atau qubit fisik ekstra. Perlu dicatat bahwa waktu pemrosesan klasik tetap menjadi faktor (lihat bagian Benchmark untuk estimasi, di mana "Total time" mencerminkan pemrosesan klasik dan kuantum). Berbeda dengan mitigasi error yang memerlukan overhead dalam bentuk sampling, penekanan error Fire Opal bekerja di level Gate dan pulse untuk mengatasi berbagai sumber noise dan mencegah kemungkinan terjadinya error. Dengan mencegah error, kebutuhan akan post-processing yang mahal pun dihilangkan.
Gambar berikut menggambarkan metode penekanan error yang diotomatisasi oleh Fire Opal Performance Management.
Fungsi ini menawarkan dua primitif, Sampler dan Estimator, dan input serta output keduanya memperluas spesifikasi yang diimplementasikan untuk primitif IBM Quantum V2.
Benchmark
Hasil benchmarking algoritmik yang dipublikasikan menunjukkan peningkatan performa yang signifikan di berbagai algoritma, termasuk Bernstein-Vazirani, quantum Fourier transform, pencarian Grover, quantum approximate optimization algorithm, dan variational quantum eigensolver. Sisa bagian ini memberikan detail lebih lanjut tentang jenis algoritma yang bisa kamu jalankan, serta performa dan runtime yang diharapkan.
Studi-studi independen berikut menunjukkan bagaimana Performance Management Q-CTRL memungkinkan penelitian algoritmik dalam skala yang memecahkan rekor:
- Parametrized Energy-Efficient Quantum Kernels for Network Service Fault Diagnosis - pembelajaran kernel kuantum hingga 50 qubit
- Tensor-based quantum phase difference estimation for large-scale demonstration - estimasi fase kuantum hingga 33 qubit
- Hierarchical Learning for Quantum ML: Novel Training Technique for Large-Scale Variational Quantum Circuits - pemuatan data kuantum hingga 21 qubit
Tabel berikut memberikan panduan kasar mengenai akurasi dan runtime dari benchmark sebelumnya di ibm_fez. Performa di perangkat lain bisa berbeda. Waktu penggunaan berdasarkan asumsi 10.000 shot per Circuit. "Jumlah qubit" yang ditunjukkan bukan merupakan batasan keras, melainkan ambang batas perkiraan di mana kamu bisa mengharapkan akurasi solusi yang sangat konsisten. Ukuran masalah yang lebih besar telah berhasil dipecahkan, dan kamu dianjurkan untuk menguji di luar batas tersebut.
| Contoh | Jumlah qubit | Akurasi | Ukuran akurasi | Total waktu (dtk) | Penggunaan runtime (dtk) | Primitif (Mode) |
|---|---|---|---|---|---|---|
| Bernstein–Vazirani | 50Q | 100% | Tingkat Keberhasilan (Persentase percobaan di mana jawaban yang benar adalah bitstring dengan jumlah terbanyak) | 10 | 8 | Sampler |
| Quantum Fourier Transform | 30Q | 100% | Tingkat Keberhasilan (Persentase percobaan di mana jawaban yang benar adalah bitstring dengan jumlah terbanyak) | 10 | 8 | Sampler |
| Quantum Phase Estimation | 30Q | 99,9998% | Akurasi sudut yang ditemukan: 1- abs(real_angle - angle_found)/pi | 10 | 8 | Sampler |
| Simulasi kuantum: model Ising (15 langkah) | 20Q | 99,775% | (didefinisikan di bawah) | 60 (per langkah) | 15 (per langkah) | Estimator |
| Simulasi kuantum 2: dinamika molekuler (20 titik waktu) | 34Q | 96,78% | (didefinisikan di bawah) | 10 (per titik waktu) | 6 (per titik waktu) | Estimator |
Mendefinisikan akurasi pengukuran nilai ekspektasi — metrik didefinisikan sebagai berikut:
di mana = nilai ekspektasi ideal, = nilai ekspektasi yang diukur, = nilai maksimum ideal, dan = nilai minimum ideal. adalah rata-rata nilai dari beberapa pengukuran.
Metrik ini digunakan karena tidak berubah terhadap pergeseran global dan penskalaan dalam rentang nilai yang dapat dicapai. Dengan kata lain, terlepas dari apakah kamu menggeser rentang nilai ekspektasi yang mungkin ke atas atau ke bawah atau memperlebar sebarannya, nilai harus tetap konsisten.
Memulai
Fire Opal Performance Management menggunakan Qiskit v2.0.0, yang merupakan versi yang direkomendasikan. Versi yang didukung adalah Qiskit >=v2.0.0.
Autentikasi menggunakan kunci API IBM Quantum Platform, dan pilih Qiskit Function sebagai berikut. (Cuplikan ini mengasumsikan kamu sudah menyimpan akun ke lingkungan lokalmu.)
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-catalog qiskit-ibm-runtime
# This cell is hidden from users. It hides the "...You have imported samplomatic..." warning.
import warnings
warnings.filterwarnings("ignore", message=".*You have imported samplomatic*")
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# verify that you have access to the function
catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
# Access Function
perf_mgmt = catalog.load("q-ctrl/performance-management")
Jika kamu ingin menggunakan backend yang saat ini tidak didukung oleh fungsi ini, hubungi Q-CTRL untuk menambahkan dukungan.
Primitif Estimator
Contoh Estimator
Gunakan primitif Estimator Fire Opal Performance Management untuk menentukan nilai ekspektasi dari sepasang Circuit-observable tunggal.
Selain paket qiskit-ibm-catalog dan qiskit, kamu juga akan menggunakan paket numpy untuk menjalankan contoh ini. Kamu bisa menginstal paket ini dengan menghapus komentar pada cell berikut jika kamu menjalankan contoh ini di notebook menggunakan kernel IPython.
# %pip install numpy
1. Buat Circuit
Sebagai contoh, buat operator Hermitian acak dan observable untuk dimasukkan ke fungsi Performance Management.
import numpy as np
from qiskit.circuit.library import iqp
from qiskit.quantum_info import random_hermitian, SparsePauliOp
n_qubits = 50
# Generate a random circuit
mat = np.real(random_hermitian(n_qubits, seed=1234))
circuit = iqp(mat)
circuit.measure_all()
# Define observables as a string
observable = SparsePauliOp("Z" * n_qubits)
# Create PUB tuple
estimator_pubs = [(circuit, observable)]
2. Jalankan Circuit
Jalankan Circuit dan secara opsional tentukan Backend dan jumlah shot.
# This cell is hidden from users
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend_name = service.least_busy().name
# Run the circuit using Estimator
qctrl_estimator_job = perf_mgmt.run(
primitive="estimator",
pubs=estimator_pubs,
backend_name=backend_name,
)
Kamu bisa menggunakan Qiskit Serverless APIs yang sudah familiar untuk memeriksa status workload Qiskit Function kamu:
qctrl_estimator_job.status()
'QUEUED'
3. Ambil hasilnya
# Retrieve the counts from the result list
result = qctrl_estimator_job.result()
Hasilnya memiliki format yang sama dengan hasil Estimator:
import numpy
result_str = str(result)
with numpy.printoptions(threshold=200):
print(
f"The result of the submitted job had {len(result)} PUB "
f"and has a value:\n {result[0]}\n"
)
print("The associated PubResult of this job has the following DataBins:")
print(f"{result[0].data}\n")
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print("The expectation values measured from this PUB are:")
print(f"{result[0].data.evs}")
The result of the submitted job had 1 PUB
The result of the submitted job had 1 PUB and has a value:
PubResult(data=DataBin(evs=0.0195, stds=0.9998098569228051), metadata={'precision': None})
The associated PubResult of this job has the following DataBins:
DataBin(evs=0.0195, stds=0.9998098569228051)
And this DataBin has attributes: dict_keys(['evs', 'stds'])
The expectation values measured from this PUB are:
0.0195
Primitif Sampler
Contoh Sampler
Gunakan primitif Sampler Fire Opal Performance Management untuk menjalankan Circuit Bernstein-Vazirani. Algoritma ini, yang digunakan untuk menemukan string tersembunyi dari output fungsi kotak hitam, adalah algoritma benchmarking yang umum karena hanya ada satu jawaban yang benar. 1. Buat Circuit
Definisikan jawaban yang benar untuk algoritma, bitstring tersembunyi, dan Circuit Bernstein-Vazirani. Kamu bisa menyesuaikan lebar Circuit hanya dengan mengubah circuit_width.
import qiskit
circuit_width = 35
hidden_bitstring = "1" * circuit_width
# Create circuit, reserving one qubit for BV oracle
bv_circuit = qiskit.QuantumCircuit(circuit_width + 1, circuit_width)
bv_circuit.x(circuit_width)
bv_circuit.h(range(circuit_width + 1))
for input_qubit, bit in enumerate(reversed(hidden_bitstring)):
if bit == "1":
bv_circuit.cx(input_qubit, circuit_width)
bv_circuit.barrier()
bv_circuit.h(range(circuit_width + 1))
bv_circuit.barrier()
for input_qubit in range(circuit_width):
bv_circuit.measure(input_qubit, input_qubit)
# Create PUB tuple
sampler_pubs = [(bv_circuit,)]
2. Jalankan Circuit
Jalankan Circuit dan secara opsional tentukan Backend dan jumlah shot.
# Run the circuit using Sampler
qctrl_sampler_job = perf_mgmt.run(
primitive="sampler",
pubs=sampler_pubs,
backend_name=backend_name,
)
Periksa status workload Qiskit Function kamu atau ambil hasil sebagai berikut:
# Print the ID so you can use it later, if necessary
print(qctrl_sampler_job.job_id)
qctrl_sampler_job.status()
60fe2fa1-a860-43e4-8615-c6ac4180f93b
'QUEUED'
3. Ambil hasilnya
# Retrieve the job results
sampler_result = qctrl_sampler_job.result()
# Get results for the first (and only) PUB
pub_result = sampler_result[0]
counts = pub_result.data.c.get_counts()
print("Counts for the meas output register (limited to 30 results):")
for i, (bitstring, count) in enumerate(counts.items()):
if i >= 50:
print(f" ... ({len(counts) - 30} more items)")
break
print(f" {bitstring}: {count}")
Counts for the meas output register (limited to 30 results):
11111111111111111111111111111111111: 1661
11111111111111111111111111110111111: 60
11111111111111111111111111111101111: 54
11111111111111111111111111111110111: 54
11111111111111011111111111111111111: 46
11111111111111111110111111111111111: 44
11111111111111111111111101111111111: 42
11111111111111111111111110111111111: 42
11111111111111110111111111111111111: 41
11111111111111111111111111111111101: 39
11111111111111111111101111111111111: 38
11111111111111111111110111111111111: 38
11111111111111111111111111101111111: 37
11111111111111111111111111111111110: 36
11111111111110111111111111111111111: 35
11111111111111111111111111111011111: 32
11111111111111101111111111111111111: 32
01111111111111111111111111111111111: 27
11111111111111111011111111111111111: 23
11111111101111111111111111111111111: 22
11111111111111111111111111111111011: 21
11111111011111111111111111111111111: 20
00000000000000011111111111111111111: 18
11111111111111111111110101111111111: 18
00000001111111111111111111111111111: 17
11111111001111111111111111111111111: 16
11101111111111111111111111111111111: 16
11111111111101111111111111111111111: 16
00000101111111111111111111111111111: 13
11111111111111111111111011111111111: 13
11111111111111111111111110101111111: 13
11111111111111111101111111111111111: 12
10111111111111111111111111111111111: 12
11111111111111111111111110001111111: 12
00000000000000000011111111111111111: 11
11111111111111111111111111111110110: 10
00000000000000000000000001111111111: 10
11111111111011111111111111111111111: 9
11111111111111101011111111111111111: 9
00000000011111111111111111111111111: 8
10101111111111111111111111111111111: 8
00000000000000000000000001011111111: 8
11111111111111111111111111111111001: 8
00000111111111111111111111111111111: 7
11111111111111111111111111111101110: 7
11111111110111111111111111111111111: 7
00000000000001011111111111111111111: 6
00000000000000001111111111111111111: 6
00000000000000000001011111111111111: 6
11111111111111111111111111011111111: 6
... (1050 more items)
3. Plot bitstring teratas
Plot bitstring dengan jumlah tertinggi untuk melihat apakah bitstring tersembunyi adalah modus.
import matplotlib.pyplot as plt
def plot_top_bitstrings(counts_dict, hidden_bitstring=None):
# Sort and take the top 100 bitstrings
top_100 = sorted(counts_dict.items(), key=lambda x: x[1], reverse=True)[
:100
]
if not top_100:
print("No bitstrings found in the input dictionary.")
return
# Unzip the bitstrings and their counts
bitstrings, counts = zip(*top_100)
# Assign colors: purple if the bitstring matches hidden_bitstring,
# otherwise gray
colors = [
"#680CE9" if bit == hidden_bitstring else "gray" for bit in bitstrings
]
# Create the bar plot
plt.figure(figsize=(15, 8))
plt.bar(
range(len(bitstrings)), counts, tick_label=bitstrings, color=colors
)
# Rotate the bitstrings for better readability
plt.xticks(rotation=90, fontsize=8)
plt.xlabel("Bitstrings")
plt.ylabel("Counts")
plt.title("Top 100 Bitstrings by Counts")
# Show the plot
plt.tight_layout()
plt.show()
Bitstring tersembunyi disorot dengan warna ungu, dan seharusnya menjadi bitstring dengan jumlah count tertinggi.
plot_top_bitstrings(counts, hidden_bitstring)

Changelog
-
2026-02-20: Pemberitahuan Deprecation - field metadata
provider_job_idsakan di-deprecate dalam 30 hari pada versi 0.13.0. Pengguna bisa mengakses ID job melalui methodjob_id()dari runtime service. -
2026-02-11: Kami sekarang mendukung
ibm_miami, dan menambahkan metadata eksekusi kePubResult.
Dapatkan Dukungan
Untuk pertanyaan atau masalah apa pun, hubungi Q-CTRL.
Langkah Selanjutnya
-
Minta akses ke Q-CTRL Performance Management.
-
Kunjungi referensi API untuk Qiskit Function ini.
-
Coba tutorial Transverse-Field Ising Model with Q-CTRL's Performance Management.
-
Coba tutorial Quantum Phase Estimation with Q-CTRL's Qiskit Functions
-
Tinjau studi kasus BlueQubit.