Performance Management: Isang Qiskit Function ng Q-CTRL Fire Opal
Tingnan ang API reference
Ang Qiskit Functions ay isang experimental na feature na available lamang sa mga gumagamit ng IBM Quantum® Premium Plan, Flex Plan, at On-Prem (sa pamamagitan ng IBM Quantum Platform API) Plan. Nasa preview release status ang mga ito at maaaring magbago.
Package versions
Ang code sa pahinang ito ay binuo gamit ang mga sumusunod na kinakailangan. Inirerekomenda naming gamitin ang mga bersyon na ito o mas bago.
qiskit[all]~=2.3.1
qiskit-ibm-runtime~=0.45.1
Pangkalahatang-ideya
Ginagawa ng Fire Opal Performance Management na simple para sa sinuman na makamit ang makabuluhang resulta mula sa mga quantum computer sa malaking sukat nang hindi kailangang maging eksperto sa quantum hardware. Kapag nagpapatakbo ng mga circuit gamit ang Fire Opal Performance Management, awtomatikong inilalapat ang mga AI-driven na teknik ng error suppression, na nagbibigay-daan sa pag-scale ng mas malalaking problema na may mas maraming gate at qubit. Binabawasan ng approach na ito ang bilang ng mga shot na kailangan para makamit ang tamang sagot, nang walang dagdag na overhead — na nagresulta sa malaking tipid sa oras ng computation at gastos.
Sinusupress ng Performance Management ang mga error at pinapataas ang posibilidad na makuha ang tamang sagot sa maingay na hardware. Sa madaling salita, pinapataas nito ang signal-to-noise ratio. Ipinapakita ng sumusunod na larawan kung paano maaaring bawasan ng mas mataas na katumpakan na pinapagana ng Performance Management ang pangangailangan para sa karagdagang mga shot sa kaso ng isang 10-qubit Quantum Fourier Transform algorithm. Sa 30 shot lamang, naabot ng Q-CTRL ang 99% confidence threshold, samantalang ang default (QiskitRuntime Sampler, optimization_level=3 at resilience_level=1, ibm_sherbrooke) ay nangangailangan ng 170,000 shot. Sa pamamagitan ng pagkuha ng tamang sagot nang mas mabilis, makakatipid ka ng malaking oras ng computation.
Maaaring gamitin ang Performance Management function sa anumang algorithm, at madali mo itong magagamit bilang kapalit ng mga standard na IBM Quantum primitives. Sa likod ng eksena, maraming teknik ng error suppression ang nagtatrabaho nang sabay-sabay upang maiwasan ang mga error sa runtime. Lahat ng Fire Opal pipeline method ay pre-configured at algorithm-agnostic, ibig sabihin palagi kang makakakuha ng pinakamahusay na performance nang walang karagdagang configuration.
Para makakuha ng access sa Performance Management, makipag-ugnayan sa Q-CTRL.
Paglalarawan
Ang Fire Opal Performance Management ay may dalawang opsyon para sa pagpapatakbo na katulad ng mga IBM Quantum primitives, kaya madali mong mapapalitan ng Q-CTRL Sampler at Estimator. Ang pangkalahatang workflow para sa paggamit ng Performance Management function ay:
- Tukuyin ang iyong circuit (at mga operator sa kaso ng Estimator).
- Patakbuhin ang circuit.
- Kunin ang mga resulta.
Para bawasan ang ingay ng hardware, gumagamit ang Fire Opal ng iba't ibang AI-driven na teknik ng error suppression na ipinapakita sa sumusunod na larawan. Sa Fire Opal, ang buong pipeline ay ganap na automated nang walang pangangailangan para sa configuration.
Inaalis ng pipeline ng Fire Opal ang pangangailangan para sa karagdagang overhead, tulad ng karagdagang quantum runtime o dagdag na pisikal na qubit. Tandaan na ang classical processing time ay nananatiling isang salik (sumangguni sa seksyon ng Mga Benchmark para sa mga pagtatantya, kung saan ang "Total time" ay sumasalamin sa parehong classical at quantum processing). Kumpara sa error mitigation, na nangangailangan ng overhead sa anyo ng sampling, ang error suppression ng Fire Opal ay gumagana sa parehong gate at pulse na antas upang tugunan ang iba't ibang pinagkukunan ng ingay at upang maiwasan ang posibilidad ng paglitaw ng error. Sa pamamagitan ng pag-iwas sa mga error, naaalis ang pangangailangan para sa mahal na post-processing.
Ipinapakita ng sumusunod na larawan ang mga paraan ng error suppression na na-automate ng Fire Opal Performance Management.
Nag-aalok ang function ng dalawang primitive, Sampler at Estimator, at ang mga input at output ng pareho ay nagpapalawak ng implemented spec para sa IBM Quantum V2 primitives.
Mga Benchmark
Ang mga resulta ng nai-publish na algorithmic benchmarking ay nagpapakita ng makabuluhang pagpapabuti ng performance sa iba't ibang algorithm, kabilang ang Bernstein-Vazirani, quantum Fourier transform, Grover's search, quantum approximate optimization algorithm, at variational quantum eigensolver. Ang natitirang bahagi ng seksyong ito ay nagbibigay ng karagdagang detalye tungkol sa mga uri ng algorithm na maaari mong patakbuhin, pati na rin ang inaasahang performance at mga runtime.
Ang mga sumusunod na independyenteng pag-aaral ay nagpapakita kung paano pinapagana ng Performance Management ng Q-CTRL ang algorithmic na pananaliksik sa record-breaking na sukat:
- Parametrized Energy-Efficient Quantum Kernels for Network Service Fault Diagnosis - hanggang 50-qubit quantum kernel learning
- Tensor-based quantum phase difference estimation for large-scale demonstration - hanggang 33-qubit quantum phase estimation
- Hierarchical Learning for Quantum ML: Novel Training Technique for Large-Scale Variational Quantum Circuits - hanggang 21-qubit quantum data loading
Ang sumusunod na talahanayan ay nagbibigay ng magaspang na gabay sa katumpakan at mga runtime mula sa mga nakaraang benchmarking run sa ibm_fez. Ang performance sa ibang device ay maaaring magkaiba. Ang oras ng paggamit ay batay sa assumption na 10,000 shot bawat circuit. Ang "Bilang ng mga qubit" na ipinahiwatig ay hindi isang mahigpit na limitasyon kundi kumakatawan sa tantiyang mga threshold kung saan maaari kang umasa ng napaka-consistent na katumpakan ng solusyon. Matagumpay na nalutas ang mas malalaking sukat ng problema, at hinihikayat ang pagsubok na higit pa sa mga limitasyong ito.
| Halimbawa | Bilang ng qubit | Katumpakan | Sukatan ng katumpakan | Kabuuang oras (s) | Paggamit ng runtime (s) | Primitive (Mode) |
|---|---|---|---|---|---|---|
| Bernstein–Vazirani | 50Q | 100% | Success Rate (Porsyento ng mga run kung saan ang tamang sagot ang bitstring na may pinakamataas na bilang) | 10 | 8 | Sampler |
| Quantum Fourier Transform | 30Q | 100% | Success Rate (Porsyento ng mga run kung saan ang tamang sagot ang bitstring na may pinakamataas na bilang) | 10 | 8 | Sampler |
| Quantum Phase Estimation | 30Q | 99.9998% | Katumpakan ng nahanap na anggulo: 1- abs(real_angle - angle_found)/pi | 10 | 8 | Sampler |
| Quantum simulation: Ising model (15 hakbang) | 20Q | 99.775% | (tinukoy sa ibaba) | 60 (bawat hakbang) | 15 (bawat hakbang) | Estimator |
| Quantum simulation 2: molecular dynamics (20 time point) | 34Q | 96.78% | (tinukoy sa ibaba) | 10 (bawat time point) | 6 (bawat time point) | Estimator |
Pagtukoy ng katumpakan ng pagsukat ng expectation value — ang metric na ay tinukoy tulad ng sumusunod:
kung saan ang = ideal na expectation value, = nasukat na expectation value, = ideal na maximum value, at = ideal na minimum value. Ang ay simpleng average ng halaga ng sa maraming pagsukat.
Ginagamit ang metric na ito dahil ito ay invariant sa mga global shift at scaling sa hanay ng mga maaabot na halaga. Sa madaling salita, anuman ang itaas o ibaba mo ang hanay ng mga posibleng expectation value o palawakin ang pagkakalat, dapat manatiling consistent ang halaga ng .
Magsimula
Gumagamit ang Fire Opal Performance Management ng Qiskit v2.0.0, na siyang inirerekomendang bersyon. Ang mga sinusuportahang bersyon ay Qiskit >=v2.0.0.
Mag-authenticate gamit ang iyong IBM Quantum Platform API key, at piliin ang Qiskit Function tulad ng sumusunod. (Ipinapalagay ng snippet na ito na na-save mo na ang iyong account sa iyong lokal na kapaligiran.)
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"matplotlib": "matplotlib", "numpy": "numpy", "qiskit": "qiskit", "qiskit_ibm_catalog": "qiskit-ibm-catalog", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
# 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")
Kung gusto mong gumamit ng backend na hindi pa sinusuportahan ng function na ito, makipag-ugnayan sa Q-CTRL para magdagdag ng suporta.
Primitive na Estimator
Halimbawa ng Estimator
Gamitin ang Estimator primitive ng Fire Opal Performance Management para matukoy ang expectation value ng isang circuit-observable pair.
Bukod sa mga package na qiskit-ibm-catalog at qiskit, gagamitin mo rin ang numpy package para patakbuhin ang halimbawang ito. Maaari mong i-install ang package na ito sa pamamagitan ng pag-uncomment ng sumusunod na cell kung pinapatakbo mo ang halimbawang ito sa isang notebook gamit ang IPython kernel.
# %pip install numpy
1. Gumawa ng circuit
Bilang halimbawa, gumawa ng random na Hermitian operator at isang observable para i-input sa Performance Management function.
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. Patakbuhin ang circuit
Patakbuhin ang circuit at opsyonal na tukuyin ang backend at bilang ng mga 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,
)
Maaari mong gamitin ang mga pamilyar na Qiskit Serverless APIs para suriin ang status ng iyong Qiskit Function workload:
qctrl_estimator_job.status()
'QUEUED'
3. Kunin ang resulta
# Retrieve the counts from the result list
result = qctrl_estimator_job.result()
Ang mga resulta ay may parehong format tulad ng isang Estimator result:
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
Primitive na Sampler
Halimbawa ng Sampler
Gamitin ang primitive na Sampler ng Fire Opal Performance Management para patakbuhin ang isang Bernstein–Vazirani circuit. Ang algorithm na ito, na ginagamit para hanapin ang isang nakatagong string mula sa mga output ng isang black box function, ay isang karaniwang benchmarking algorithm dahil iisa lamang ang tamang sagot nito. 1. Gumawa ng circuit
Tukuyin ang tamang sagot sa algorithm, ang nakatagong bitstring, at ang Bernstein–Vazirani circuit. Maaari mong ayusin ang lapad ng circuit sa pamamagitan lamang ng pagbabago ng 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. Patakbuhin ang circuit
Patakbuhin ang circuit at opsyonal na tukuyin ang backend at bilang ng mga shot.
# Run the circuit using Sampler
qctrl_sampler_job = perf_mgmt.run(
primitive="sampler",
pubs=sampler_pubs,
backend_name=backend_name,
)
Suriin ang status ng iyong Qiskit Function workload o kunin ang mga resulta tulad ng sumusunod:
# 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. Kunin ang resulta
# 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. I-plot ang mga nangungunang bitstring
I-plot ang bitstring na may pinakamataas na bilang para makita kung ang nakatagong bitstring ang mode.
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()
Ang nakatagong bitstring ay naka-highlight sa kulay lila, at dapat itong ang bitstring na may pinakamataas na bilang ng counts.
plot_top_bitstrings(counts, hidden_bitstring)

Talaan ng mga Pagbabago
-
2026-02-20: Abiso ng Deprecation - ang
provider_job_idsmetadata field ay magiging deprecated sa loob ng 30 araw sa bersyon 0.13.0. Maaaring ma-access ng mga gumagamit ang job ID sa pamamagitan ngjob_id()method ng runtime service. -
2026-02-11: Mayroon na kaming suporta para sa
ibm_miami, at idinagdag ang execution metadata saPubResult.
Makakuha ng suporta
Para sa anumang tanong o isyu, makipag-ugnayan sa Q-CTRL.
Mga susunod na hakbang
-
Humiling ng access sa Q-CTRL Performance Management.
-
Bisitahin ang API reference para sa Qiskit Function na ito.
-
Subukan ang tutorial na Transverse-Field Ising Model with Q-CTRL's Performance Management tutorial.
-
Subukan ang tutorial na Quantum Phase Estimation with Q-CTRL's Qiskit Functions tutorial
-
Suriin ang Mitsubishi Chemical Corp case study.
-
Suriin ang Redacted bank case study.
-
- Suriin ang BlueQubit case study.