Sari la conținutul principal

Introducere în Qiskit Functions

Note
  • Qiskit Functions este o funcționalitate experimentală disponibilă doar utilizatorilor IBM Quantum® cu Plan Premium, Flex și On-Prem (prin IBM Quantum Platform API). Acestea se află în stadiu de previzualizare și pot fi supuse modificărilor.
Versiuni de pachete

Codul de pe această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm utilizarea acestor versiuni sau a unora mai noi.

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Qiskit Functions simplifică și accelerează descoperirea algoritmilor la scară utilă și dezvoltarea aplicațiilor, abstractizând părți din fluxul de lucru pentru dezvoltarea de software cuantic. Astfel, Qiskit Functions eliberează timp care altfel ar fi petrecut scriind cod manual și ajustând experimente.

Prezentare generală a Qiskit Functions Functions vin în două forme:

TipCe face?Exemple de intrări și ieșiriPentru cine este?
Circuit functionInterfață simplificată pentru rularea Circuit-urilor. Abstractizează transpilarea, suprimarea erorilor și atenuarea erorilorIntrare: Obiecte abstracte PUB
Ieșire: Valori de așteptare atenuate
Cercetători care folosesc Qiskit pentru a descoperi noi algoritmi și aplicații, fără a fi nevoie să se concentreze pe optimizarea pentru hardware sau gestionarea erorilor. Circuit functions pot fi folosite pentru a construi Application functions personalizate.
Application functionAcoperă sarcini de nivel mai înalt, cum ar fi explorarea algoritmilor și cazuri de utilizare specifice unui domeniu. Abstractizează fluxul de lucru cuantic pentru a rezolva sarcini, cu intrări și ieșiri clasiceIntrare: Molecule, grafuri
Ieșire: Energii ale stării fundamentale și excitate, valori optime pentru funcția de cost
Cercetători din domenii non-cuantice, care integrează cuanticul în fluxuri de lucru clasice de mare amploare, fără a fi nevoie să mapeze datele clasice pe Circuit-uri cuantice.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Functions sunt furnizate de IBM® și parteneri terți. Fiecare este performantă pentru caracteristici specifice ale sarcinilor de lucru și are opțiuni unice de ajustare a performanței.

Prezentare generală a funcțiilor disponibile

Circuit functions

NumeFurnizorUtilizare recomandatăBeneficii unice
Tensor-Network Error MitigationAlgorithmiqSarcini de lucru cu observabile de greutate mică și Circuit-uri fără bucle.Reduce costurile de măsurare și varianța, depășind bazele standard de atenuare a erorilor, precum Zero Noise Extrapolation (ZNE) și Probabilistic Error Cancellation (PEC), pentru clasele de Circuit-uri relevante.
QESEM: Error Suppression and Error MitigationQedmaSarcini de lucru care includ Circuit-uri cu porți fracționale sau parametrizate, observabile de greutate mare și fluxuri de lucru care necesită valori de așteptare nedeformate și estimări precise ale timpului de execuție.Produce valori de așteptare nedeformate cu varianță mai mică și costuri de resurse reduse, depășind ZNE și PEC pentru clasele de Circuit-uri relevante.
Performance ManagementQ-CTRLSarcini de lucru care conțin Circuit-uri parametrice, Circuit-uri adânci sau care necesită multe execuții de Circuit-uri.Aplică automat suprimarea erorilor bazată pe AI algoritmilor cuantici, maximizând performanța dispozitivelor IBM pentru a obține rezultate precise, reducând în același timp numărul de shots, timpul de calcul și costurile necesare.

Metodă fără costuri suplimentare care îmbunătățește acuratețea execuției pentru primitivele Sampler și Estimator, compatibilă cu orice greutate a observabilelor.

Application functions

NumeFurnizorUtilizare recomandatăBeneficii unice
QUICK-PDEColibriTDUtilizarea calculului cuantic pentru EDP multi-fizice.

Pregătirea fluxurilor de lucru de simulare pentru hardware cuantic, păstrând controlul deplin asupra parametrilor de modelare cuantică și fizică.
Oferă un framework VQA hibrid robust care furnizează soluții EDP precise și scalabile prin codificare avansată a soluțiilor și metode spectrale, reprezentând un punct de intrare ideal pentru echipele care doresc să construiască capabilități de simulare pregătite pentru cuantic.
Quantum Portfolio OptimizerGlobal Data QuantumSarcini de lucru pentru optimizare financiară, căutând strategii optime de portofoliu în timp, minimizând riscul și maximizând randamentele, permițând testarea retrospectivă a strategiilor de tranzacționare.Rezolvă probleme de optimizare combinatorică printr-o adaptare extrem de specializată a algoritmului cuantic VQE pentru acest caz de utilizare financiar, folosind strategii de execuție și optimizatori optimizați, împreună cu tehnici de atenuare a erorilor adaptate la optimizarea portofoliului.
HI-VQE ChemistryQunova ComputingSarcini de lucru în chimie computațională, simulare moleculară, știința materialelor sau orice simulare Hamiltoniană care necesită rezolvarea problemelor de structură electronică a corpurilor multiple.Rezolvă structurile electronice moleculare folosind SQD îmbunătățit, atingând acuratețe chimică (1 kcal/mol, 1,6 mHa) pentru probleme modelate cu 40 până la 60 de Qubiți, depășind unele soluții clasice pe supercalculatoare sau SQD standard în viteză de convergență sau acuratețe, respectiv, cu ordine de mărime.
Iskay Quantum OptimizerKipu QuantumSarcini de lucru de optimizare, cum ar fi planificarea, logistica, rutarea și probleme QUBO/HUBO.

Metode clasice de pre- și post-procesare reglabile integrat pentru rutina de optimizare cuantică.

Oferă avantaj de timp de execuție față de solverele clasice (CPLEX, simulated annealing și tabu search) pe benchmark-uri HUBO selectate.

Market Split ms_5_100, o provocare dificilă, rezolvată în câteva ore (vezi acest tutorial).
Singularity Machine LearningMultiverse ComputingFluxuri de lucru clasice de clasificare prin machine learning care ar putea beneficia de o acuratețe îmbunătățită sau de o eficiență computațională sporită prin valorificarea optimizării cuantice executate pe hardware IBM.Oferă acuratețe comparabilă cu sau superioară modelelor clasice precum Random Forest sau XGBoost, operând cu semnificativ mai puțini learner-i și un ansamblu mai compact.

Susținut de votare optimizată cuantic, selectează cei mai informativi learner-i și rafinează granițele de decizie, rezultând o mai mare eficiență, complexitate redusă a modelului și performanță mai robustă.
Optimization SolverQ-CTRLProbleme de optimizare binară sau orice problemă combinatorică care poate fi mapată pe o funcție de cost binară.

Funcțiile de cost de orice ordin și dimensiunile problemelor până la scara maximă a dispozitivului sunt suportate.
Soluție de optimizare cuantică end-to-end, conștientă de zgomot, care permite introducerea definițiilor problemelor la nivel înalt și găsește automat soluții precise pentru probleme combinatorice provocatoare din punct de vedere clasic pe hardware cuantic la scară utilă.

Abstractizează complexitatea gestionând suprimarea erorilor, maparea eficientă și optimizarea hibridă cuantic-clasică pentru a rezolva sarcini de optimizare la scara completă a dispozitivului, fără expertiză profundă în cuantic.

Începe cu Qiskit Functions

Utilizatorii planurilor Premium, Flex și On-Prem (prin IBM Quantum Platform API) pot începe să folosească IBM Qiskit Functions gratuit sau pot achiziționa o licență de la unul dintre partenerii care au contribuit cu o funcție la catalog.

Solicită o perioadă de probă gratuită pentru Qiskit Functions de la terți

Pentru a solicita o nouă perioadă de probă gratuită, navighează la Qiskit Functions Catalog și explorează panoul de detalii. Apasă pe Request a free trial și completează informațiile cerute de partenerul Functions, inclusiv AccessGroupId-ul IBM Cloud:

  1. Navighează la IBM Cloud IAM.
  2. Verifică eligibilitatea.
    • Schimbă contul din bara de sus cu unul care are formatul: XXXXXXX - [Numele Organizației]
    • Asigură-te că organizația este aceeași cu cea asociată contului tău Premium.
    • Dacă vezi „[Numele Tău]'s Account", folosești contul tău personal, care nu este eligibil pentru acces premium.
  3. Găsește ID-ul grupului tău de acces.
    • Apasă pe numele unui grup.
    • Apasă pe Details.
    • Copiază ID-ul grupului de acces. Ar trebui să înceapă cu AccessGroup-.

Instalează clientul Qiskit Functions Catalog

  1. Pentru a începe să folosești Qiskit Functions, instalează clientul IBM Qiskit Functions Catalog:

    pip install qiskit-ibm-catalog
  2. Recuperează cheia ta API de pe tabloul de bord IBM Quantum Platform și activează mediul tău virtual Python. Consultă instrucțiunile de instalare dacă nu ai deja un mediu virtual configurat.

    Dacă lucrezi într-un mediu Python de încredere (de exemplu, pe un laptop personal sau o stație de lucru), folosește metoda save_account() pentru a salva acreditările local. (Treci la pasul următor dacă nu folosești un mediu de încredere, cum ar fi un calculator partajat sau public, pentru autentificarea la IBM Quantum Platform.)

    Pentru a folosi save_account(), rulează python în shell-ul tău, apoi introdu următoarele:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    Tastează exit(). De acum înainte, ori de câte ori trebuie să te autentifici la serviciu, poți încărca acreditările cu

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. Evită să execuți cod pe o mașină care nu este de încredere sau într-un mediu Python cloud extern pentru a minimiza riscurile de securitate. Dacă trebuie să folosești un mediu care nu este de încredere (de exemplu, pe un calculator public), schimbă cheia API după fiecare utilizare ștergând-o de pe pagina IBM Cloud API keys pentru a reduce riscul. Află mai multe în subiectul Managing user API keys. Pentru a inițializa serviciul în această situație, extinde secțiunea următoare pentru a vedea codul pe care îl poți folosi:

    Inițializează serviciul într-un mediu care nu este de încredere
    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    # After using the following code, delete your API key on the IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    atenție

    Protejează-ți cheia API! Nu include niciodată cheia ta în codul sursă, scriptul Python sau fișierul notebook. Când distribui cod altora, asigură-te că cheia ta API nu este încorporată direct în scriptul Python. În schimb, distribuie scriptul fără cheie și oferă instrucțiuni pentru configurarea ei în mod securizat.

    Dacă ai distribuit accidental cheia cuiva sau ai inclus-o în controlul versiunilor precum Git, revocă imediat cheia ștergând-o de pe pagina IBM Cloud API keys pentru a reduce riscul. Află mai multe în subiectul Managing user API keys.

  2. După ce te-ai autentificat, poți lista funcțiile din Qiskit Functions Catalog la care ai acces:

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)]

Rulează funcțiile activate

După ce un obiect catalog a fost instanțiat, poți selecta o funcție folosind catalog.load(provider/function-name):

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

Fiecare Qiskit Function are intrări, opțiuni și ieșiri personalizate. Consultă paginile de documentație specifice pentru funcția pe care vrei să o rulezi pentru mai multe informații. În mod implicit, toți utilizatorii pot rula doar un singur job de funcție la un moment dat:

# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)

job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'

Verifică statusul job-ului

sfat

În prezent, tabelul de workload-uri IBM Quantum reflectă doar workload-urile Qiskit Runtime. Folosește job.status() pentru a vedea statusul curent al workload-ului tău Qiskit Function.

Cu job_id-ul Qiskit Function, poți verifica statusul job-urilor în curs de execuție. Acesta include următoarele statusuri:

  • QUEUED: Programul de la distanță se află în coada Qiskit Function. Prioritatea în coadă se bazează pe cât ai folosit Qiskit Functions.
  • INITIALIZING: Programul de la distanță pornește; aceasta include configurarea mediului de la distanță și instalarea dependențelor.
  • RUNNING: Programul rulează. Acesta include și câteva statusuri mai detaliate, dacă sunt suportate de funcții specifice
    • RUNNING: MAPPING": Funcția mapează în prezent intrările tale clasice la intrări cuantice
    • RUNNING: OPTIMIZING_FOR_HARDWARE": Funcția optimizează pentru QPU-ul selectat. Aceasta poate include transpilarea Circuit-ului, caracterizarea QPU-ului, backpropagation-ul observabilelor și altele
    • RUNNING: WAITING_FOR_QPU: Funcția a trimis un job la Qiskit Runtime și așteaptă în coadă
    • RUNNING: EXECUTING_QPU: Funcția are un job Qiskit Runtime activ
    • RUNNING: POST_PROCESSING: Funcția post-procesează rezultatele. Aceasta poate include atenuarea erorilor, maparea rezultatelor cuantice la clasice și altele
  • DONE: Programul este finalizat și poți recupera datele rezultatelor cu job.results().
  • ERROR: Programul s-a oprit din cauza unei probleme. Folosește job.result() pentru a obține mesajul de eroare.
  • CANCELED: Programul a fost anulat; fie de un utilizator, fie de serviciu, fie de server.
job.status()
'QUEUED'

Retrieve results

După ce un program este DONE, poți folosi job.results() pentru a prelua rezultatul. Formatul acestui output variază în funcție de fiecare funcție, deci asigură-te că urmărești documentația specifică:

result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

Poți, de asemenea, să anulezi un job oricând:

job.stop()
'Job has been stopped.'

List previously run jobs run with Qiskit Functions

Poți folosi jobs() pentru a lista toate joburile trimise către Qiskit Functions:

old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

Dacă ai deja ID-ul jobului pentru un anumit job, poți prelua jobul cu catalog.get_job_by_id():

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763

Fetch error messages

Dacă statusul unui program este ERROR, folosește job.error_message() pentru a prelua mesajul de eroare, astfel:

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

Next steps

Recomandări