Introducere în Qiskit Functions
- 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.
Functions vin în două forme:
| Tip | Ce face? | Exemple de intrări și ieșiri | Pentru cine este? |
|---|---|---|---|
| Circuit function | Interfață simplificată pentru rularea Circuit-urilor. Abstractizează transpilarea, suprimarea erorilor și atenuarea erorilor | Intrare: 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 function | Acoperă 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 clasice | Intrare: 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
| Nume | Furnizor | Utilizare recomandată | Beneficii unice |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Sarcini 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 Mitigation | Qedma | Sarcini 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 Management | Q-CTRL | Sarcini 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
| Nume | Furnizor | Utilizare recomandată | Beneficii unice |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Utilizarea 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 Optimizer | Global Data Quantum | Sarcini 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 Chemistry | Qunova Computing | Sarcini 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 Optimizer | Kipu Quantum | Sarcini 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 Learning | Multiverse Computing | Fluxuri 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 Solver | Q-CTRL | Probleme 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:
- Navighează la IBM Cloud IAM.
- 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.
- Schimbă contul din bara de sus cu unul care are formatul:
- 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
-
Pentru a începe să folosești Qiskit Functions, instalează clientul IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
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 cufrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
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 dashboardatențieProtejează-ț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.
-
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
Î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 specificeRUNNING: MAPPING": Funcția mapează în prezent intrările tale clasice la intrări cuanticeRUNNING: OPTIMIZING_FOR_HARDWARE": Funcția optimizează pentru QPU-ul selectat. Aceasta poate include transpilarea Circuit-ului, caracterizarea QPU-ului, backpropagation-ul observabilelor și alteleRUNNING: 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 activRUNNING: 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 cujob.results().ERROR: Programul s-a oprit din cauza unei probleme. Foloseștejob.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
- Explorează Circuit functions pentru a construi algoritmi și aplicații noi, fără a fi nevoie să gestionezi transpilarea sau tratarea erorilor.
- Explorează application functions pentru a rezolva sarcini specifice unui domeniu, cu intrări și ieșiri clasice.