Lewati ke konten utama

Performance Management: Sebuah Qiskit Function oleh Q-CTRL Fire Opal

Lihat referensi API

Catatan

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.

Visualisasi peningkatan runtime

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:

  1. Definisikan Circuit kamu (dan operator dalam kasus Estimator).
  2. Jalankan Circuit.
  3. 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.

Visualisasi pipeline penekanan error

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:

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.

ContohJumlah qubitAkurasiUkuran akurasiTotal waktu (dtk)Penggunaan runtime (dtk)Primitif (Mode)
Bernstein–Vazirani50Q100%Tingkat Keberhasilan (Persentase percobaan di mana jawaban yang benar adalah bitstring dengan jumlah terbanyak)108Sampler
Quantum Fourier Transform30Q100%Tingkat Keberhasilan (Persentase percobaan di mana jawaban yang benar adalah bitstring dengan jumlah terbanyak)108Sampler
Quantum Phase Estimation30Q99,9998%Akurasi sudut yang ditemukan: 1- abs(real_angle - angle_found)/pi108Sampler
Simulasi kuantum: model Ising (15 langkah)20Q99,775%AA (didefinisikan di bawah)60 (per langkah)15 (per langkah)Estimator
Simulasi kuantum 2: dinamika molekuler (20 titik waktu)34Q96,78%AmeanA_{mean} (didefinisikan di bawah)10 (per titik waktu)6 (per titik waktu)Estimator

Mendefinisikan akurasi pengukuran nilai ekspektasi — metrik AA didefinisikan sebagai berikut:

A=1ϵidealϵmeasϵmaxidealϵminideal,A = 1 - \frac{|\epsilon^{ideal} - \epsilon^{meas}|}{\epsilon^{ideal}_{max} - \epsilon^{ideal}_{min}},

di mana ϵideal\epsilon^{ideal} = nilai ekspektasi ideal, ϵmeas\epsilon^{meas} = nilai ekspektasi yang diukur, ϵmaxideal\epsilon^{ideal}_{max} = nilai maksimum ideal, dan ϵminideal\epsilon^{ideal}_{min} = nilai minimum ideal. AmeanA_{mean} adalah rata-rata nilai AA 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 AA 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")
Apakah fungsi ini mendukung semua backend IBM?

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)

Output of the previous code cell

Changelog

  • 2026-02-20: Pemberitahuan Deprecation - field metadata provider_job_ids akan di-deprecate dalam 30 hari pada versi 0.13.0. Pengguna bisa mengakses ID job melalui method job_id() dari runtime service.

  • 2026-02-11: Kami sekarang mendukung ibm_miami, dan menambahkan metadata eksekusi ke PubResult.

Dapatkan Dukungan

Untuk pertanyaan atau masalah apa pun, hubungi Q-CTRL.

Langkah Selanjutnya

Rekomendasi