Sari la conținutul principal

Funcția IBM Circuit

Notă
  • Qiskit Functions este o funcționalitate experimentală disponibilă doar utilizatorilor IBM Quantum® Premium Plan, Flex Plan și On-Prem (prin IBM Quantum Platform API) Plan. Se află în stare de previzualizare și poate fi supusă modificărilor.

Prezentare generală

Funcția IBM® Circuit primește PUB-uri abstracte ca intrări și returnează valori de așteptare atenuate ca ieșiri. Această funcție Circuit include un pipeline automatizat și personalizat pentru a le permite cercetătorilor să se concentreze pe descoperirea de algoritmi și aplicații.

Descriere

După ce trimiți PUB-ul tău, circuitele și observabilele abstracte sunt transpilate automat, executate pe hardware și post-procesate pentru a returna valori de așteptare atenuate. În acest scop, sunt combinate următoarele instrumente:

Funcția IBM Circuit

Începe

Autentifică-te folosind cheia ta API și selectează Qiskit Function după cum urmează. (Acest fragment de cod presupune că ți-ai salvat deja contul în mediul local.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

Exemplu

Pentru a începe, încearcă acest exemplu de bază:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

Verifică statusul workload-ului Qiskit Function sau returnează rezultatele după cum urmează:

print(job.status())
result = job.result()
QUEUED

Rezultatele au același format ca un rezultat Estimator:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

Intrări

Consultă tabelul următor pentru toți parametrii de intrare acceptați de funcția IBM Circuit. Secțiunea Opțiuni de mai jos oferă mai multe detalii despre options disponibile.

NumeTipDescriereObligatoriuImplicitExemplu
backend_namestrNumele Backend-ului pentru care se face interogarea.DaN/Aibm_fez
pubsIterable[EstimatorPubLike]Un iterabil de obiecte PUB-like abstracte (primitive unified bloc), cum ar fi tupluri (circuit, observables) sau (circuit, observables, parameter_values). Vezi Prezentare generală a PUB-urilor pentru mai multe informații. Circuitele pot fi abstracte (non-ISA).DaN/A(circuit, observables, parameter_values)
optionsdictOpțiuni de intrare. Vezi secțiunea Opțiuni pentru mai multe detalii.NuVezi secțiunea Opțiuni pentru detalii.{"optimization_level": 3}
instancestrNumele resursei cloud al instanței de utilizat în acel format.NuUna este aleasă aleatoriu dacă contul tău are acces la mai multe instanțe.CRN

Opțiuni

Structură

Similar cu primitivele Qiskit Runtime, opțiunile pentru funcția IBM Circuit pot fi specificate ca un dicționar imbricat. Opțiunile frecvent utilizate, cum ar fi optimization_level și mitigation_level, se află la primul nivel. Alte opțiuni mai avansate sunt grupate în diferite categorii, cum ar fi resilience.

Valori implicite

Dacă nu specifici o valoare pentru o opțiune, se utilizează valoarea implicită specificată de serviciu.

Nivelul de atenuare

Funcția IBM Circuit suportă de asemenea mitigation_level. Nivelul de atenuare specifică cât de multă suprimare și atenuare a erorilor să se aplice jobului. Nivelurile mai ridicate generează rezultate mai precise, cu costul unor timpi de procesare mai lungi. Gradul de reducere a erorilor depinde de metoda aplicată. Nivelul de atenuare abstractizează alegerea detaliată a metodelor de atenuare și suprimare a erorilor pentru a permite utilizatorilor să raționeze despre compromisul cost/precizie potrivit aplicației lor. Tabelul următor arată metodele corespunzătoare pentru fiecare nivel.

notă

Deși numele sunt similare, mitigation_level aplică tehnici diferite față de cele utilizate de resilience_level al Estimator.

Similar cu resilience_level în Qiskit Runtime Estimator, mitigation_level specifică un set de bază de opțiuni selectate. Orice opțiuni pe care le specifici manual în plus față de nivelul de atenuare sunt aplicate peste setul de bază de opțiuni definit de nivelul de atenuare. Prin urmare, în principiu, ai putea seta nivelul de atenuare la 1, dar apoi să dezactivezi atenuarea măsurătorilor, deși acest lucru nu este recomandat.

Nivel de atenuareTehnică
1 [Implicit]Decuplare dinamică + twirling măsurători + TREX
2Nivelul 1 + twirling porți + ZNE prin plierea porților
3Nivelul 1 + twirling porți + ZNE prin PEA

Exemplul următor demonstrează setarea nivelului de atenuare:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

Toate opțiunile disponibile

Pe lângă mitigation_level, funcția IBM Circuit oferă și un număr selectat de opțiuni avansate care îți permit să reglezi fin compromisul cost/precizie. Tabelul următor arată toate opțiunile disponibile:

OpțiuneSub-opțiuneSub-sub-opțiuneDescriereValori posibileImplicit
default_precisionPrecizia implicită de utilizat pentru orice PUB sau apel run()
care nu specifică una.
Fiecare PUB de intrare poate specifica propria precizie. Dacă metoda run() primește o precizie, atunci acea valoare este utilizată pentru toate PUB-urile din apelul run() care nu specifică propria precizie.
float > 00.015625
max_execution_timeTimpul maxim de execuție în secunde, care se bazează
pe utilizarea QPU (nu pe timpul de ceas). Utilizarea QPU reprezintă
timpul în care QPU este dedicat procesării jobului tău. Dacă un job depășește această limită de timp, este anulat forțat.
Număr întreg de secunde în intervalul [1, 10800]
mitigation_levelCât de multă suprimare și atenuare a erorilor să se aplice. Consultă secțiunea Nivelul de atenuare pentru mai multe informații despre metodele utilizate la fiecare nivel.1 / 2 / 31
optimization_levelCât de multă optimizare să se efectueze pe circuite. Nivelurile mai ridicate generează circuite mai optimizate, cu costul unui timp de transpilare mai lung.1 / 2 / 32
dynamical_decouplingenableDacă să se activeze decuplarea dinamică. Consultă Tehnici de suprimare și atenuare a erorilor pentru explicarea metodei.True/FalseTrue
sequence_typeCe secvență de decuplare dinamică să se utilizeze.
* XX: utilizează secvența tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: utilizează secvența tau/2 - (+X) - tau - (-X) - tau/2
* XY4: utilizează secvența
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesDacă să se aplice twirling-ul porților Clifford cu 2 Qubiți.True/FalseFalse
enable_measureDacă să se activeze twirling-ul măsurătorilor.True/FalseTrue
resiliencemeasure_mitigationDacă să se activeze metoda de atenuare a erorilor de măsurare TREX. Consultă Tehnici de suprimare și atenuare a erorilor pentru explicarea metodei.True/FalseTrue
zne_mitigationDacă să se activeze metoda de atenuare a erorilor Zero Noise Extrapolation. Consultă Tehnici de suprimare și atenuare a erorilor pentru explicarea metodei.True/FalseFalse
zneamplifierCe tehnică să se utilizeze pentru amplificarea zgomotului. Una dintre:
- gate_folding (implicit) utilizează plierea porților cu 2 Qubiți pentru a amplifica zgomotul. Dacă factorul de zgomot necesită amplificarea doar a unui subset de porți, atunci aceste porți sunt alese aleatoriu.

- gate_folding_front utilizează plierea porților cu 2 Qubiți pentru a amplifica zgomotul. Dacă factorul de zgomot necesită amplificarea doar a unui subset de porți, atunci aceste porți sunt selectate de la începutul circuitului DAG ordonat topologic.

- gate_folding_back utilizează plierea porților cu 2 Qubiți pentru a amplifica zgomotul. Dacă factorul de zgomot necesită amplificarea doar a unui subset de porți, atunci aceste porți sunt selectate de la sfârșitul circuitului DAG ordonat topologic.

- pea utilizează o tehnică numită Probabilistic error amplification (PEA) pentru a amplifica zgomotul. Consultă Tehnici de suprimare și atenuare a erorilor pentru explicarea metodei.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsFactorii de zgomot de utilizat pentru amplificarea zgomotului.listă de numere float; fiecare float >= 1(1, 1.5, 2) pentru PEA, și (1, 3, 5) în alte cazuri.
extrapolatorFactorii de zgomot la care se evaluează modelele de extrapolare. Această opțiune nu afectează în niciun fel execuția sau ajustarea modelului; determină doar punctele în care obiectele extrapolator sunt evaluate pentru a fi returnate în câmpurile de date numite evs_extrapolated și stds_extrapolated.unul sau mai multe dintre exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationDacă să se activeze metoda de atenuare a erorilor Probabilistic Error Cancellation. Consultă Tehnici de suprimare și atenuare a erorilor pentru explicarea metodei.True/FalseFalse
pecmax_overheadSupraîncărcarea maximă admisă la eșantionarea circuitelor, sau None pentru nicio limită maximă.None/ integer >1100

În exemplul următor, setarea nivelului de atenuare la 1 dezactivează inițial atenuarea ZNE, dar setarea zne_mitigation la True suprascrie configurarea relevantă din mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Ieșiri

Ieșirea unei funcții Circuit este un PrimitiveResult, care conține două câmpuri:

  • Unul sau mai multe obiecte PubResult. Acestea pot fi indexate direct din PrimitiveResult.

  • Metadate la nivel de job.

Fiecare PubResult conține un câmp data și un câmp metadata.

  • Câmpul data conține cel puțin o serie de valori de așteptare (PubResult.data.evs) și o serie de erori standard (PubResult.data.stds). Poate conține de asemenea mai multe date, în funcție de opțiunile utilizate.

  • Câmpul metadata conține metadate la nivel de PUB (PubResult.metadata).

Fragmentul de cod următor descrie formatul PrimitiveResult (și PubResult asociat).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Obținerea mesajelor de eroare

Dacă statusul workload-ului tău este ERROR, folosește job.result() pentru a obține mesajul de eroare care să te ajute la depanare, după cum urmează:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Obține suport

Contactează suportul IBM Quantum și include următoarele informații:

  • ID-ul jobului Qiskit Function (qiskit-ibm-catalog), job.job_id
  • O descriere detaliată a problemei
  • Orice mesaje sau coduri de eroare relevante
  • Pași pentru reproducerea problemei

Pașii următori

Recomandări