Orbit - o funcție Qiskit de la Quantum Elements
Consultă referința API
Funcțiile Qiskit sunt o funcționalitate experimentală disponibilă doar utilizatorilor IBM Quantum® Premium Plan, Flex Plan și On-Prem (prin IBM Quantum Platform API). Acestea au statut de lansare preview și pot fi modificate.
Prezentare generală
Hardware-ul cuantic continuă să avanseze, dar zgomotul și decoerența încă limitează adâncimea și fiabilitatea circuitelor cuantice practice. Printre abordările disponibile, trei tehnici complementare pot atenua substanțial aceste limitări: decuplarea dinamică (DD), transpilarea optimizată și atenuarea erorilor de măsurare (MEM). Transpilarea optimizată reduce adâncimea circuitului și aliniază mai bine circuitele cu conectivitatea hardware-ului țintă, DD suprimă zgomotul din perioadele de inactivitate prin secvențe de control atent proiectate, iar MEM reduce efectele erorilor de citire și poate fi aplicată în timpul post-procesării.
Alegerea unei strategii DD eficiente este deosebit de dificilă, deoarece sunt disponibile numeroase familii de secvențe, iar o secvență care funcționează bine pentru un circuit sau un mediu de zgomot poate să nu funcționeze bine pentru altul. Beneficiile transpilării, DD și MEM depind de problemă, hardware și sarcina de lucru; folosite individual sau în combinație, acestea pot îmbunătăți performanța, dar nu sunt benefice universal în orice configurație.
Orbit, o funcție Qiskit dezvoltată de Quantum Elements, combină fără probleme toate cele trei componente într-un flux de lucru unificat, făcându-le ușor de utilizat pentru îmbunătățirea execuției circuitelor pe hardware-ul IBM Quantum. În forma sa principală, Orbit aplică automat strategii active de suprimare a erorilor care protejează stările cuantice în perioadele de inactivitate, păstrând în același timp logica originală a circuitului. Este de remarcat faptul că face acest lucru fără a introduce timp suplimentar de pre-procesare cuantică sau clasică, evitând astfel costuri suplimentare inutile sau timpi de așteptare în cadrul fluxului de lucru.
În loc să funcționeze ca o cutie neagră, Orbit permite utilizatorilor să evalueze și să ajusteze fin componentele sale de optimizare pentru un experiment specific. Utilizatorii pot activa sau dezactiva independent transpilarea optimizată, DD și MEM; pot compara selecția automată a DD cu secvențe specificate de utilizator; și pot executa mai multe configurații în cadrul aceluiași flux de lucru. Comparând fiecare configurație cu circuitul brut, utilizatorii pot determina care tehnici oferă beneficii măsurabile pentru circuitul și backend-ul lor, pot identifica interacțiunile dintre diferitele metode de optimizare și pot selecta configurația care susține cel mai bine obiectivul lor experimental. Acest proces ghidează utilizatorii în înțelegerea originii câștigurilor de performanță și în luarea unor decizii mai informate atunci când optimizează circuite cuantice pentru o anumită sarcină de lucru.
Descriere
Orbit este conceput pentru a îmbunătăți execuția circuitelor cuantice pe backend-urile IBM Quantum. În modul automat, utilizatorii pot aplica fără probleme secvențe DD robuste de ordin superior, fără a fi nevoie să le selecteze sau să le configureze manual. Utilizatorii avansați pot experimenta în schimb cu secvențele de ordin superior disponibile pentru a identifica și optimiza abordarea care oferă cea mai bună performanță pentru un circuit specific.
Orbit oferă, de asemenea, MEM instantaneu fără a necesita joburile suplimentare de obicei necesare pentru fluxuri de lucru separate de calibrare și atenuare. Pentru sarcinile de lucru în care transpilarea nu ar trebui să modifice structura circuitului, cum ar fi circuitele de corecție a erorilor cuantice cu măsurători mid-circuit sau circuitele dinamice, Orbit poate aplica DD și MEM fără a interfera cu strategia de transpilare existentă a utilizatorului. Pentru utilizatorii care nu au deja o abordare preferată, Orbit include, de asemenea, un transpiler încorporat pentru a optimiza circuitele pentru hardware-ul țintă înainte de a aplica tehnicile de suprimare a erorilor și de atenuare a citirii.
Spre deosebire de abordările care se bazează pe eșantionare suplimentară a circuitului, extrapolare sau post-procesare clasică extinsă, Orbit se concentrează pe suprimarea erorilor în timpul execuției. Funcția este concepută pentru a introduce o suprasarcină redusă, păstrând în același timp logica originală a circuitului. Utilizatorii pot inspecta circuitul rezultat și pot compara direct execuțiile optimizate cu Orbit cu execuțiile standard.
Un flux de lucru practic Orbit este:
-
Definește un circuit cuantic și selectează Orbit prin Catalogul de Funcții Qiskit.
-
Include circuitul fără Orbit folosind modul 'Raw' pentru a stabili o referință de circuit brut.
-
Alege ce strategii de optimizare să aplici, inclusiv secvențe DD automate sau selectate de utilizator, MEM și transpilare optimizată.
-
Activează sau dezactivează metode individuale, sau trimite mai multe configurații, pentru a evalua efectele lor separate și combinate.
Orbit este deosebit de util pentru circuitele care conțin perioade de inactivitate sau lacune de programare în care qubiții nu participă activ la porți. Suportă circuite statice și dinamice, inclusiv fluxuri de lucru cu măsurători mid-circuit și experimente de calcul cuantic tolerant la erori. Aplicațiile tipice includ corecția erorilor cuantice, experimente cu cod de suprafață pe rețele pătrate și heavy-hex, algoritmi oraculari precum Bernstein-Vazirani, circuite de transformare Fourier, algoritmi cuantici variaționali, simularea Hamiltoniană, experimente de benchmarking și optimizarea circuitelor conștientă de hardware.
Privind spre era toleranței la erori, Orbit este de asemenea compatibil cu fluxurile de lucru de calcul cuantic tolerant la erori, deoarece poate fi combinat fără probleme cu corecția erorilor cuantice. Pe termen lung, Orbit indică spre decuplarea dinamică la nivel logic [1] ca o cale orientată spre viitor pentru protejarea qubiților logici. În exemplul de mai jos, doi qubiți logici au fost încurcați pentru a crea o stare Bell logică sub detecția erorilor cuantice. Detecția erorilor cuantice singură a dus la scăderea fidelității stării Bell la aproximativ 44% pe parcursul a zeci de microsecunde, în timp ce QED combinat cu protecția în stilul Orbit a menținut fidelitatea stării Bell logice aproape de vârful scalei, atingând aproximativ 95,3% în aceeași fereastră de timp.

Benchmarkuri
Rezultatele următoare rezumă rulări reprezentative Orbit pe hardware IBM Quantum. Ca și în cazul altor benchmarkuri hardware, rezultatele depind de dispozitivul selectat, starea de calibrare, circuit și setările de execuție.
| Exemplu | Metrică | Qubits | QPU | Detalii suplimentare | Îmbunătățire Orbit |
|---|---|---|---|---|---|
| Bernstein–Vazirani | Fidelitatea șirului de biți ascuns | 26 60 70 | Heron r3 | Brut versus Full Orbit, Doar transpilare versus Full Orbit, Doar Full Orbit | 75x 66x N/A |
| QFT (unitar) | Fidelitate | 10 | Heron r2 Heron r3 | Orbit versus brut: ~44% versus ~35% ~67% versus ~61% | 1.26x 1.09x |
| QFT (circuite dinamice) | Fidelitate | 10 20 | Heron r3 | Orbit versus brut: ~55% versus ~2% ~10% versus ~0% | 27.51x N/A |
| Stare Bell la distanță lungă (circuite dinamice) | Fidelitate | 30 60 | Heron r2 | N/A | 1.78x 1.11x |
| Cod de suprafață (rețea pătrată) | Probabilitatea de eroare logică | 25 | Nighthawk r1 | 1 rundă 5 runde 10 runde | 1.01x 1.15x 1.12x |
| Cod de suprafață (heavy-hex) | Probabilitatea de eroare logică | 65 | Heron r3 | 1 rundă 5 runde 10 runde | 4.11x 2.04x 1.39x |
| VQE | Eroare absolută relativă la energia ideală | 8 | Heron r3 | Orbit versus brut: 56mHa versus 1342 mHa | 24x |
| QAOA | Probabilitatea de succes | 5 | Heron r2 | N/A | 1.46x |
[[4,2,2]] code (suprimarea erorilor la nivel logic) | Fidelitatea logică a stării Bell intricate | 4 | Heron r2 | Fidelitate medie pe 55 μs | 1.63x |
Definiții ale metricilor
-
Fidelitatea bitstring-ului ascuns Bernstein–Vazirani: Probabilitatea de a măsura bitstring-ul ascuns corect. Această metrică indică cât de fiabil recuperează algoritmul soluția intenționată pe măsură ce dimensiunea circuitului crește. Tabelul raportează cele mai mari trei bitstring-uri ascunse evaluate cu succes sub trei configurații diferite: (i), circuite brute fără Orbit, care au atins 26 de qubiți; (ii), circuite doar cu transpilare, care au atins 60 de qubiți; și (iii), circuite folosind fluxul de lucru Orbit complet, care au atins 70 de qubiți. Pentru circuitele brute (i), factorul de îmbunătățire reprezintă câștigul de performanță obținut de DD și MEM în raport cu circuitele nemodificate. Pentru configurația doar cu transpilare (ii), acesta reprezintă îmbunătățirea obținută prin adăugarea DD și MEM la circuitele transpilate optim. Pentru configurația Orbit completă (iii), nu este raportat niciun factor de îmbunătățire de bază, deoarece o probabilitate de succes nenulă a fost obținută doar atunci când toate componentele Orbit (transpilare, DD și MEM) au fost activate. Un exemplu ilustrativ este oferit mai jos.
-
Fidelitatea transformării Fourier cuantice: Pentru ambele implementări QFT, unitară și cu circuit dinamic [2], fidelitatea măsoară concordanța dintre transformarea implementată experimental și procesul QFT ideal pe 20 de stări de intrare diferite. Circuitele dinamice conțin perioade de inactivitate substanțiale din cauza măsurătorilor mid-circuit și a feedforward-ului clasic, timp în care decuplarea dinamică poate suprima decoerența. Îmbunătățirea raportată compară fidelitatea obținută cu Orbit cu fidelitatea brută.
-
Pregătirea stării Bell la distanță lungă: Crearea unei stări Bell folosind circuite dinamice și operații de feedforward între doi qubiți separați de până la 60 de qubiți intermediari, demonstrând astfel încurcarea eficientă la distanță lungă pe hardware cuantic conectat local [3]. Orbit identifică cea mai bună rutare a qubiților, protejează qubiții în timpul măsurătorilor feedforward și aplică MEM pentru a atenua erorile de citire.
-
Probabilitatea logică a erorii pentru codul de suprafață: Pentru codul de suprafață heavy-hex [4] și codul de suprafață cu rețea pătrată [5], au fost efectuate experimente de memorie cuantică în care o stare logică codificată a fost păstrată pe parcursul unor runde repetate de corecție a erorilor. Probabilitatea logică a erorii măsoară probabilitatea ca erorile acumulate să facă ca informația codificată să fie recuperată incorect (o eroare mai mică este mai bună). Îmbunătățirea raportată compară probabilitatea logică a erorii din circuitele brute cu cea obținută cu Orbit.
-
Eroarea absolută VQE: Folosind VQE cu un ansatz cluster-cuplat unitar optimizat pentru a estima energia stării fundamentale a LiH [6]. Energia măsurată este comparată cu energia ideală corespunzătoare obținută din circuitul fără zgomot. Metrica este diferența absolută dintre energiile măsurate și cele ideale (valorile mai mici sunt mai bune). Îmbunătățirea raportată este:
Valorile mai mari decât unu indică faptul că Orbit reduce eroarea de energie în raport cu execuția fără decuplare dinamică.
-
Probabilitatea de succes QAOA: Probabilitatea de a măsura un bitstring corespunzător unei soluții optime a problemei de optimizare definite pe graful fluture. Îmbunătățirea raportată compară probabilitatea de succes obținută cu Orbit cu cea obținută din circuitele brute.
-
Fidelitatea logică: În experimentul de decuplare dinamică logică [[4,2,2]] [1], doi qubiți logici au fost codificați în patru qubiți fizici și pregătiți ca o stare Bell logică încurcată. Fidelitatea logică măsoară concordanța dintre starea codificată recuperată și starea Bell logică țintă. Îmbunătățirea raportată compară fidelitatea logică medie obținută cu Orbit și detecția erorilor (capacitatea codului) cu cea obținută atunci când se folosește doar codul singur.
Primii pași
Autentifică-te folosind cheia API IBM Quantum Platform și selectează funcția Orbit după cum urmează. Acest fragment presupune că ai salvat deja contul în mediul tău local.
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib qiskit qiskit-ibm-catalog
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from qiskit import QuantumCircuit
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# Verify that you have access to the function.
catalog.list()
[QiskitFunction(quantum-elements/orbit)]
# Load the function.
orbit = catalog.load("quantum-elements/orbit")
Exemplu
Următorul exemplu construiește un circuit Bernstein-Vazirani și îl trimite către Orbit în două moduri într-un singur job: execuție brută și implicit Orbit.
Folosește acest model atunci când dorești o comparație directă brut-versus-Orbit.
Construiește un circuit Bernstein-Vazirani
Alege bitstring-ul ascuns și construiește circuitul logic. Qubitul suplimentar este ținta oracolului, în timp ce qubiții de intrare sunt măsurați.
def create_bv_circuit(hidden_bitstring: str) -> QuantumCircuit:
width = len(hidden_bitstring)
circuit = QuantumCircuit(width + 1, width)
circuit.x(width)
circuit.h(range(width + 1))
for input_qubit, bit in enumerate(reversed(hidden_bitstring)):
if bit == "1":
circuit.cx(input_qubit, width)
circuit.barrier()
circuit.h(range(width + 1))
circuit.measure(range(width), range(width))
return circuit
circuit_width = 50
hidden_bitstring = "1" * circuit_width
shots = 4096
bv_circuit = create_bv_circuit(hidden_bitstring)
bv_circuit.count_ops()
OrderedDict([('h', 102),
('cx', 50),
('measure', 50),
('x', 1),
('barrier', 1)])
Pregătește sarcina de lucru Orbit
Creează un singur PUB Sampler, apoi duplică-l pentru cele două moduri de comparație. Orbit primește circuitul logic și îl mapează pe backend-ul selectat în timpul execuției.
base_pub = (bv_circuit, None, shots)
comparison_labels = ["raw", "orbit"]
pubs = [base_pub] * len(comparison_labels)
Rulează brut și implicit Orbit
pub_options atribuie primul PUB modului brut, care omite optimizarea Orbit, DD și MEM, și atribuie al doilea PUB modului implicit Orbit, care include transpilare optimizată, inserare automată a decuplării dinamice (DD) și atenuarea erorilor de măsurare (MEM).
backend_name = "ibm_kingston"
job = orbit.run(
primitive="sampler",
pubs=pubs,
backend_name=backend_name,
options={
"pub_options": [
{"mode": "raw"},
{"mode": "orbit"},
],
"save_backend_info": True,
},
)
# Check the job ID and status
print(job.job_id)
print(job.status())
c0f1b99c-8dfa-4ebb-9560-d9a37c990acc
QUEUED
Preia rezultatul și compară circuitele brute și cele îmbunătățite cu Orbit folosind numărătorile. Pentru rezultatele Sampler, get_counts() pe registrul clasic returnat oferă histograma de ieșire. Când MEM reușește pentru PUB-ul Orbit, această histogramă este deja corectată prin MEM; numărătorile neatenuate rămân disponibile în metadatele Orbit sub measurementErrorMitigation["rawCounts"].
def extract_counts(pub_result) -> dict[str, int]:
data = getattr(pub_result, "data", None)
if data is None:
raise TypeError("pub_result.data is missing")
for name in dir(data):
if name.startswith("_"):
continue
register = getattr(data, name)
get_counts = getattr(register, "get_counts", None)
if callable(get_counts):
counts = get_counts()
if counts:
return counts
raise TypeError(
"No classical register with get_counts() found in pub_result.data"
)
result = job.result()
if len(result) != len(comparison_labels):
raise RuntimeError(
f"Expected {len(comparison_labels)} PUB results, received {len(result)}."
)
comparison_counts = {
label: extract_counts(pub_result)
for label, pub_result in zip(comparison_labels, result, strict=True)
}
correct_counts = {
label: counts.get(hidden_bitstring, 0)
for label, counts in comparison_counts.items()
}
print(
{
"hidden_bitstring": hidden_bitstring,
"correct_counts": correct_counts,
"shots": shots,
}
)
{'hidden_bitstring': '11111111111111111111111111111111111111111111111111', 'correct_counts': {'raw': 0, 'orbit': 184}, 'shots': 4096}
Realizează o comparație vizuală a circuitelor brute și a celor îmbunătățite cu Orbit.
import matplotlib.pyplot as plt
labels = list(correct_counts)
values = list(correct_counts.values())
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(labels, values, width=0.55)
ax.bar_label(bars, labels=[f"{value:g}" for value in values], padding=3)
ax.set_xlabel("Circuit execution mode")
ax.set_ylabel("Correct hidden-bitstring count")
ax.set_title(f"{circuit_width}-qubit Bernstein-Vazirani on {backend_name}")
ax.set_ylim(0, max(1, 1.15 * max(values)))
ax.grid(axis="y", alpha=0.25)
fig.tight_layout()
plt.show()
Obține asistență
Contactează asistența Quantum Elements: info@quantumelements.ai
Asigură-te că incluzi următoarele informații:
-
ID-ul jobului funcției Qiskit (
qiskit-ibm-catalog),job.job_id -
Numele backend-ului
-
pub_optionsOrbit folosite pentru modurile brut și Orbit -
O descriere detaliată a problemei
-
Orice mesaje sau coduri de eroare relevante
-
Pașii pentru a reproduce problema
Pași următori
-
Încearcă un backend diferit, un alt număr de qubiți sau un alt bitstring ascuns.
-
Citește tutorialul nostru despre transformarea Fourier cuantică pentru a afla cum să definești strategii DD personalizate activate de orbit, precum și cum să aplici DD circuitelor dinamice cu măsurători mid-circuit și operații de feedforward.
-
Vizitează referința API pentru o descriere detaliată a tuturor opțiunilor Orbit.