Performance Management: funkcja Qiskit dostarczana przez Q-CTRL Fire Opal
Zobacz dokumentację API
Funkcje Qiskit to funkcja eksperymentalna dostępna wyłącznie dla użytkowników planów IBM Quantum® Premium Plan, Flex Plan oraz On-Prem (za pośrednictwem IBM Quantum Platform API). Są one w fazie wstępnej wersji (preview) i mogą ulec zmianie.
Wersje pakietów
Kod na tej stronie został opracowany z wykorzystaniem poniższych wymagań. Zalecamy użycie tych wersji lub nowszych.
qiskit[all]~=2.3.1
qiskit-ibm-runtime~=0.45.1
Przegląd
Fire Opal Performance Management sprawia, że każdy może uzyskiwać znaczące wyniki z komputerów kwantowych na dużą skalę, bez konieczności bycia ekspertem od sprzętu kwantowego. Podczas uruchamiania obwodów z Fire Opal Performance Management automatycznie stosowane są oparte na AI techniki tłumienia błędów, umożliwiając skalowanie większych problemów z większą liczbą bramek i qubit. Takie podejście zmniejsza liczbę shotów potrzebnych do uzyskania prawidłowej odpowiedzi, bez żadnych dodatkowych kosztów — co przekłada się na znaczne oszczędności zarówno czasu obliczeniowego, jak i kosztów.
Performance Management tłumi błędy i zwiększa prawdopodobieństwo uzyskania właściwej odpowiedzi na zaszumionym sprzęcie. Innymi słowy, zwiększa stosunek sygnału do szumu. Poniższy rysunek pokazuje, jak zwiększona dokładność dzięki Performance Management może zmniejszyć potrzebę dodatkowych shotów w przypadku algorytmu kwantowej transformaty Fouriera na 10 qubit. Przy zaledwie 30 shotach Q-CTRL osiąga próg pewności 99%, podczas gdy konfiguracja domyślna (QiskitRuntime Sampler, optimization_level=3 i resilience_level=1, ibm_sherbrooke) wymaga 170 000 shotów. Uzyskując właściwą odpowiedź szybciej, oszczędzasz znaczny czas obliczeniowy.
Funkcja Performance Management może być używana z dowolnym algorytmem, a jej zastosowanie zamiast standardowych prymitywów IBM Quantum jest proste. Za kulisami wiele technik tłumienia błędów współpracuje ze sobą, aby zapobiegać błędom w trakcie wykonywania. Wszystkie metody potoku Fire Opal są wstępnie skonfigurowane i niezależne od algorytmu, co oznacza, że zawsze uzyskujesz najlepszą wydajność bez żadnej konfiguracji.
Aby uzyskać dostęp do Performance Management, skontaktuj się z Q-CTRL.
Opis
Fire Opal Performance Management oferuje dwie opcje wykonania podobne do prymitywów IBM Quantum, dzięki czemu możesz łatwo zamienić je na Q-CTRL Sampler i Estimator. Ogólny przepływ pracy przy użyciu funkcji Performance Management jest następujący:
- Zdefiniuj swój obwód (oraz operatory w przypadku Estimator).
- Uruchom obwód.
- Pobierz wyniki.
Aby zredukować szum sprzętowy, Fire Opal stosuje szereg opartych na AI technik tłumienia błędów przedstawionych na poniższym rysunku. Dzięki Fire Opal cały potok jest w pełni zautomatyzowany i nie wymaga żadnej konfiguracji.
Potok Fire Opal eliminuje potrzebę ponoszenia dodatkowych kosztów, takich jak zwiększony czas wykonywania na sprzęcie kwantowym czy dodatkowe fizyczne qubit. Należy pamiętać, że klasyczny czas przetwarzania nadal jest czynnikiem (więcej szacunków znajdziesz w sekcji Benchmarki, gdzie „Łączny czas" obejmuje zarówno klasyczne, jak i kwantowe przetwarzanie). W przeciwieństwie do łagodzenia błędów, które wymaga dodatkowych kosztów w postaci próbkowania, tłumienie błędów Fire Opal działa zarówno na poziomie bramki, jak i pulsu, aby adresować różne źródła szumu i zapobiegać wystąpieniu błędów. Zapobiegając błędom, eliminuje się potrzebę kosztownego przetwarzania końcowego.
Poniższy rysunek przedstawia metody tłumienia błędów zautomatyzowane przez Fire Opal Performance Management.
Funkcja oferuje dwa prymitywy, Sampler i Estimator, a wejścia i wyjścia obu rozszerzają zaimplementowaną specyfikację dla prymitywów IBM Quantum V2.
Benchmarki
Opublikowane wyniki benchmarkowania algorytmicznego wykazują znaczącą poprawę wydajności w różnych algorytmach, w tym Bernstein-Vazirani, kwantowej transformacie Fouriera, wyszukiwaniu Grovera, kwantowym algorytmie optymalizacji przybliżonej oraz variational quantum eigensolver. W dalszej części tej sekcji znajdują się szczegółowe informacje o typach algorytmów, które możesz uruchamiać, a także o oczekiwanej wydajności i czasach wykonywania.
Poniższe niezależne badania pokazują, jak Performance Management Q-CTRL umożliwia prowadzenie badań algorytmicznych na rekordową skalę:
- Parametrized Energy-Efficient Quantum Kernels for Network Service Fault Diagnosis – kwantowe uczenie jądrowe na do 50 qubit
- Tensor-based quantum phase difference estimation for large-scale demonstration – kwantowe szacowanie fazy na do 33 qubit
- Hierarchical Learning for Quantum ML: Novel Training Technique for Large-Scale Variational Quantum Circuits – kwantowe ładowanie danych na do 21 qubit
Poniższa tabela stanowi przybliżony przewodnik po dokładności i czasach wykonywania z poprzednich uruchomień benchmarkowych na ibm_fez. Wydajność na innych urządzeniach może się różnić. Czas użytkowania oparty jest na założeniu 10 000 shotów na obwód. Wskazana „Liczba qubit" nie jest twardym ograniczeniem, lecz reprezentuje przybliżone progi, przy których można oczekiwać bardzo spójnej dokładności rozwiązania. Większe problemy zostały z powodzeniem rozwiązane i zachęcamy do testowania powyżej tych limitów.
| Przykład | Liczba qubit | Dokładność | Miara dokładności | Łączny czas (s) | Czas użytkowania runtime (s) | Prymityw (tryb) |
|---|---|---|---|---|---|---|
| Bernstein–Vazirani | 50Q | 100% | Wskaźnik sukcesu (odsetek uruchomień, w których właściwa odpowiedź ma największą liczbę zliczeń) | 10 | 8 | Sampler |
| Kwantowa transformata Fouriera | 30Q | 100% | Wskaźnik sukcesu (odsetek uruchomień, w których właściwa odpowiedź ma największą liczbę zliczeń) | 10 | 8 | Sampler |
| Kwantowe szacowanie fazy | 30Q | 99,9998% | Dokładność znalezionego kąta: 1- abs(real_angle - angle_found)/pi | 10 | 8 | Sampler |
| Symulacja kwantowa: model Isinga (15 kroków) | 20Q | 99,775% | (zdefiniowane poniżej) | 60 (na krok) | 15 (na krok) | Estimator |
| Symulacja kwantowa 2: dynamika molekularna (20 punktów czasowych) | 34Q | 96,78% | (zdefiniowane poniżej) | 10 (na punkt czasowy) | 6 (na punkt czasowy) | Estimator |
Definiując dokładność pomiaru wartości oczekiwanej – metryka jest zdefiniowana następująco:
gdzie = idealna wartość oczekiwana, = zmierzona wartość oczekiwana, = idealna wartość maksymalna, a = idealna wartość minimalna. jest po prostu średnią wartości z wielu pomiarów.
Metryka ta jest używana, ponieważ jest niezmiennicza względem globalnych przesunięć i skalowania zakresu osiągalnych wartości. Innymi słowy, niezależnie od tego, czy przesuniesz zakres możliwych wartości oczekiwanych w górę lub w dół, lub zwiększysz rozpiętość, wartość powinna pozostać spójna.
Pierwsze kroki
Fire Opal Performance Management używa Qiskit w wersji v2.0.0, która jest wersją zalecaną. Obsługiwane wersje to Qiskit >=v2.0.0.
Uwierzytelnij się przy użyciu swojego klucza API IBM Quantum Platform i wybierz funkcję Qiskit w następujący sposób. (Ten fragment kodu zakłada, że masz już zapisane konto w lokalnym środowisku.)
# 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")
Jeśli chcesz użyć Backendu, który ta funkcja aktualnie nie obsługuje, skontaktuj się z Q-CTRL, aby dodać obsługę.
Prymityw Estimator
Przykład użycia Estimator
Użyj prymitywu Estimator w Fire Opal Performance Management, aby określić wartość oczekiwaną pojedynczej pary obwód–obserwowalny.
Oprócz pakietów qiskit-ibm-catalog i qiskit będziesz także używać pakietu numpy do uruchomienia tego przykładu. Możesz zainstalować ten pakiet, odkomentowując poniższą komórkę, jeśli uruchamiasz ten przykład w notatniku korzystającym z jądra IPython.
# %pip install numpy
1. Utwórz obwód
Jako przykład wygeneruj losowy operator Hermitowski i obserwowalny do przekazania do funkcji 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. Uruchom obwód
Uruchom obwód i opcjonalnie zdefiniuj Backend oraz liczbę shotów.
# 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,
)
Możesz użyć znanych interfejsów API Qiskit Serverless, aby sprawdzić status zadania funkcji Qiskit:
qctrl_estimator_job.status()
'QUEUED'
3. Pobierz wynik
# Retrieve the counts from the result list
result = qctrl_estimator_job.result()
Wyniki mają taki sam format jak wynik 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
Prymityw Sampler
Przykład użycia Samplera
Użyj prymitywu Sampler z Fire Opal Performance Management, aby uruchomić obwód Bernsteina–Vazirania. Algorytm ten, służący do znalezienia ukrytego ciągu znaków na podstawie wyników czarnej skrzynki, jest popularnym algorytmem do testów porównawczych, ponieważ istnieje tylko jedna poprawna odpowiedź. 1. Utwórz obwód
Zdefiniuj poprawną odpowiedź algorytmu — ukryty ciąg bitów — oraz obwód Bernsteina–Vazirania. Szerokość obwodu możesz łatwo zmieniać, modyfikując wartość 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. Uruchom obwód
Uruchom obwód i opcjonalnie zdefiniuj Backend oraz liczbę shotów.
# Run the circuit using Sampler
qctrl_sampler_job = perf_mgmt.run(
primitive="sampler",
pubs=sampler_pubs,
backend_name=backend_name,
)
Sprawdź status obciążenia swojej Funkcji Qiskit lub pobierz wyniki w następujący sposób:
# 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. Pobierz wynik
# 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. Wykreśl najlepsze ciągi bitów
Wykreśl ciąg bitów o najwyższej liczbie zliczeń, aby zobaczyć, czy ukryty ciąg bitów był dominantą.
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()
Wykreśl ciąg bitów o najwyższej liczbie wystąpień, aby sprawdzić, czy ukryty ciąg bitów był dominantą.
plot_top_bitstrings(counts, hidden_bitstring)

Changelog
-
2026-02-20: Powiadomienie o wycofaniu — pole metadanych
provider_job_idszostanie wycofane za 30 dni w wersji 0.13.0. Użytkownicy mogą uzyskać dostęp do identyfikatora zadania za pomocą metodyjob_id()usługi runtime. -
2026-02-11: Dodano obsługę
ibm_miamioraz metadane wykonania doPubResult.
Uzyskaj wsparcie
W razie pytań lub problemów skontaktuj się z Q-CTRL.
Następne kroki
-
Poproś o dostęp do Q-CTRL Performance Management.
-
Odwiedź dokumentację API dla tej funkcji Qiskit.
-
Wypróbuj samouczek Transverse-Field Ising Model with Q-CTRL's Performance Management.
-
Wypróbuj samouczek Quantum Phase Estimation with Q-CTRL's Qiskit Functions
-
Zapoznaj się z publikacją Mundada P. S., et al. (2023). Experimental Benchmarking of an Automated Deterministic Error-Suppression Workflow for Quantum Algorithms. Physical Review Applied, 20, 2.
-
Zapoznaj się z publikacją Kanno, S., et al. (2025). Tensor-based quantum phase difference estimation for large-scale demonstration. arXiv preprint arXiv:2408.04946.
-
Zapoznaj się z materiałem SoftBank Corp, Demonstration Experiment of a Communication Service Fault Diagnosis System Using Quantum Machine Learning (blog), 30 August, 2024.
-
Zapoznaj się z publikacją Yamauchi, H., et al. (2024). Parametrized Energy-Efficient Quantum Kernels for Network Service Fault Diagnosis. arXiv preprint arXiv:2405.09724v1.
-
Zapoznaj się z publikacją Yamauchi, H., et al. (2025). Quantum spectroscopy of topological dynamics via a supersymmetric Hamiltonian. arXiv preprint arXiv:2511.23169v1.
-
Zapoznaj się z publikacją Wang, Y., et al. (2025). Δ-Motif: Subgraph Isomorphism at Scale via Data-Centric Parallelism. arXiv preprint arXiv:2508.21287.
-
Zapoznaj się z publikacją Paterakis, N. G., et al. (2025). Quantum Computing in the Computational Landscape of Power Electronics: Vision and Reality. arXiv preprint arXiv:2507.02577.
-
Zapoznaj się z publikacją Gharibyan, H., et al. (2023). Hierarchical Learning for Quantum ML: Novel Training Technique for Large-Scale Variational Quantum Circuits. arXiv preprint arXiv:2311.12929.
-
Zapoznaj się ze studium przypadku Mitsubishi Chemical Corp.
-
Zapoznaj się ze studium przypadku Redacted bank.
-
Zapoznaj się ze studium przypadku BlueQubit.