Vai al contenuto principale

Introduzione alle Qiskit Functions

Note
  • Le Qiskit Functions sono una funzionalità sperimentale disponibile esclusivamente per gli utenti dei piani IBM Quantum® Premium, Flex e On-Prem (tramite l'API di IBM Quantum Platform). Sono in stato di anteprima e soggette a modifiche.
Versioni dei pacchetti

Il codice in questa pagina è stato sviluppato con i seguenti requisiti. Si consiglia di usare queste versioni o versioni più recenti.

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

Le Qiskit Functions semplificano e accelerano la scoperta di algoritmi su scala utility e lo sviluppo di applicazioni, astraendo alcune fasi del flusso di lavoro per lo sviluppo di software quantistico. In questo modo, le Qiskit Functions liberano il tempo normalmente dedicato alla scrittura manuale di codice e alla messa a punto degli esperimenti.

Panoramica delle Qiskit Functions Le funzioni esistono in due forme:

TipoCosa fa?Esempi di input e outputA chi è destinata?
circuito functionInterfaccia semplificata per eseguire circuiti. Astrae transpilazione, soppressione degli errori e mitigazione degli erroriInput: oggetti PUB astratti
Output: valori di aspettativa mitigati
Ricercatori che usano Qiskit per scoprire nuovi algoritmi e applicazioni, senza dover ottimizzare per l'hardware o gestire gli errori. Le circuit function possono essere usate per costruire application function personalizzate.
Application functionCopre attività di livello più elevato, come l'esplorazione di algoritmi e casi d'uso specifici per dominio. Astrae il flusso di lavoro quantistico per risolvere compiti, con input e output classiciInput: molecole, grafi
Output: energia dello stato fondamentale ed eccitato, valori ottimali per la funzione di costo
Ricercatori in ambiti non quantistici, che integrano il calcolo quantistico in flussi di lavoro classici su larga scala esistenti, senza dover mappare dati classici su circuiti quantistici.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Le funzioni sono fornite da IBM® e da partner terzi. Ciascuna è ottimizzata per specifiche caratteristiche di workload e offre opzioni di ottimizzazione delle prestazioni uniche.

Panoramica delle funzioni disponibili​

circuito function​

NomeFornitoreUso consigliatoVantaggi esclusivi
Tensor-Network Error MitigationAlgorithmiqWorkload con osservabili a basso peso e circuiti senza cicli.Riduce l'overhead di misurazione e la varianza, superando le baseline standard di mitigazione degli errori come Zero Noise Extrapolation (ZNE) e Probabilistic Error Cancellation (PEC) per le classi di circuiti rilevanti.
QESEM: Error Suppression and Error MitigationQedmaWorkload che includono circuiti con gate frazionari o parametrizzati, osservabili ad alto peso e flussi di lavoro che richiedono valori di aspettativa non distorti e stime accurate dei tempi di esecuzione.Produce valori di aspettativa non distorti con varianza e overhead di risorse inferiori, superando ZNE e PEC per le classi di circuiti rilevanti.
Performance ManagementQ-CTRLWorkload che contengono circuiti parametrici, circuiti profondi o che richiedono molte esecuzioni di circuiti.Applica automaticamente la soppressione degli errori guidata dall'AI agli algoritmi quantistici, massimizzando le prestazioni dei dispositivi IBM per fornire risultati accurati riducendo il numero di shot, il tempo di calcolo e i costi richiesti.

Metodo a zero overhead che migliora l'accuratezza dell'esecuzione per le primitive Sampler ed Estimator, compatibile con osservabili di qualsiasi peso.

Application function​

NomeFornitoreUso consigliatoVantaggi esclusivi
QUICK-PDEColibriTDUsa il calcolo quantistico per PDE multi-fisica.

Prepara flussi di lavoro di simulazione per hardware quantistico, mantenendo il pieno controllo sui parametri di modellazione sia quantistici che fisici.
Offre un robusto framework VQA ibrido che fornisce soluzioni PDE precise e scalabili tramite codifica avanzata della soluzione e metodi spettrali, rappresentando un punto di ingresso ideale per i team che vogliono sviluppare capacità di simulazione quantum-ready.
Quantum Portfolio OptimizerGlobal Data QuantumWorkload di ottimizzazione finanziaria, alla ricerca di strategie di portafoglio ottimali nel tempo minimizzando il rischio e massimizzando i rendimenti, con possibilità di back-testing delle strategie di trading.Risolve problemi di ottimizzazione combinatoria tramite un adattamento altamente specializzato dell'algoritmo quantistico VQE per questo caso d'uso finanziario, usando strategie di esecuzione e ottimizzatori ottimizzati, insieme a tecniche di mitigazione degli errori consapevoli del rumore, adattate all'ottimizzazione di portafoglio.
HI-VQE ChemistryQunova ComputingWorkload in chimica computazionale, simulazione molecolare, scienza dei materiali o qualsiasi simulazione hamiltoniana che richieda la soluzione di problemi di struttura elettronica a molti corpi.Risolve strutture elettroniche molecolari usando SQD migliorato, raggiungendo l'accuratezza chimica (1 kcal/mol, 1,6 mHa) per problemi modellati con 40-60 qubit, superando alcune soluzioni classiche su supercomputer o lo SQD standard in velocità di convergenza o accuratezza, rispettivamente, di ordini di grandezza.
Iskay Quantum OptimizerKipu QuantumWorkload di ottimizzazione come schedulazione, logistica, routing e problemi QUBO/HUBO.

Metodi classici di pre- e post-elaborazione regolabili integrati per la routine di ottimizzazione quantistica.

Offre un vantaggio a runtime rispetto ai solutori classici (CPLEX, simulated annealing e tabu search) su benchmark HUBO selezionati.

Market Split ms_5_100, una sfida difficile, risolto in poche ore (vedi questo tutorial).
Singularity Machine LearningMultiverse ComputingFlussi di lavoro classici di classificazione tramite machine learning che potrebbero beneficiare di una maggiore accuratezza o efficienza computazionale sfruttando l'ottimizzazione quantistica eseguita su hardware IBM.Offre un'accuratezza comparabile o superiore a modelli classici come Random Forest o XGBoost, operando con un numero significativamente inferiore di learner e un ensemble più compatto.

Basato su votazione ottimizzata quantisticamente, seleziona i learner più informativi e affina i confini decisionali, risultando in maggiore efficienza, minore complessità del modello e prestazioni più robuste.
Optimization SolverQ-CTRLProblemi di ottimizzazione binaria o qualsiasi problema combinatorio mappabile su una funzione di costo binaria.

Sono supportate funzioni di costo di qualsiasi ordine e dimensioni di problema fino alla scala massima del dispositivo.
Soluzione di ottimizzazione quantistica end-to-end consapevole del rumore, che consente input di definizioni di problema ad alto livello e trova automaticamente soluzioni accurate a problemi combinatori classicamente difficili su hardware quantistico su scala utility.

Astrae la complessità gestendo la soppressione degli errori, la mappatura efficiente e l'ottimizzazione ibrida quantistico-classica per risolvere compiti di ottimizzazione all'intera scala del dispositivo senza richiedere una profonda esperienza quantistica.

Inizia con le Qiskit Functions​

Gli utenti dei piani Premium, Flex e On-Prem (tramite l'API di IBM Quantum Platform) possono iniziare a usare IBM Qiskit Functions gratuitamente, oppure acquistare una licenza da uno dei partner che hanno contribuito una funzione al catalogo.

Richiedi una prova gratuita per le Qiskit Functions di terze parti​

Per richiedere una nuova prova gratuita, vai al catalogo Qiskit Functions ed esplora il pannello dei dettagli. Clicca su Request a free trial e compila le informazioni richieste dal partner della funzione, incluso il campo IBM Cloud AccessGroupId:

  1. Vai a IBM Cloud IAM.
  2. Verifica l'idoneità.
    • Cambia il tuo account nella barra in alto selezionando uno con il seguente formato: XXXXXXX - [Nome Organizzazione]
    • Assicurati che l'organizzazione sia la stessa associata al tuo account Premium.
    • Se vedi "[Il tuo nome]'s Account", stai usando il tuo account personale, che non è idoneo all'accesso premium.
  3. Trova il tuo ID gruppo di accesso.
    • Clicca sul nome di un gruppo.
    • Clicca su Details.
    • Copia l'ID del gruppo di accesso. Dovrebbe iniziare con AccessGroup-.

Installa il client del catalogo Qiskit Functions​

  1. Per iniziare a usare le Qiskit Functions, installa il client del catalogo IBM Qiskit Functions:

    pip install qiskit-ibm-catalog
  2. Recupera la tua chiave API dalla dashboard di IBM Quantum Platform e attiva il tuo ambiente virtuale Python. Consulta le istruzioni di installazione se non hai ancora configurato un ambiente virtuale.

    Se stai lavorando in un ambiente Python affidabile (ad esempio su un laptop o una workstation personale), usa il metodo save_account() per salvare le tue credenziali localmente. (Passa al passaggio successivo se non stai usando un ambiente affidabile, ad esempio un computer condiviso o pubblico, per autenticarti su IBM Quantum Platform.)

    Per usare save_account(), esegui python nella tua shell, poi inserisci il seguente codice:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

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

    Digita exit(). D'ora in poi, ogni volta che devi autenticarti al servizio, puoi caricare le tue credenziali con

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

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. Evita di eseguire codice su una macchina non affidabile o in un ambiente Python cloud esterno per ridurre al minimo i rischi di sicurezza. Se devi usare un ambiente non affidabile (ad esempio un computer pubblico), cambia la tua chiave API dopo ogni utilizzo eliminandola dalla pagina IBM Cloud API keys per ridurre il rischio. Approfondisci nel topic Gestione delle chiavi API utente. Per inizializzare il servizio in questa situazione, espandi la sezione seguente per visualizzare il codice da usare:

    Inizializza il servizio in un ambiente non affidabile
    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
    attenzione

    Proteggi la tua chiave API! Non includere mai la chiave nel codice sorgente, in script Python o in file di notebook. Quando condividi codice con altri, assicurati che la tua chiave API non sia incorporata direttamente nello script Python. Condividi invece lo script senza la chiave e fornisci istruzioni per configurarla in modo sicuro.

    Se condividi accidentalmente la tua chiave con qualcuno o la includi in un sistema di controllo di versione come Git, revoca immediatamente la chiave eliminandola dalla pagina IBM Cloud API keys per ridurre il rischio. Approfondisci nel topic Gestione delle chiavi API utente.

  2. Dopo esserti autenticato, puoi elencare le funzioni del catalogo Qiskit Functions a cui hai accesso:

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

Esegui le funzioni abilitate​

Dopo aver istanziato un oggetto catalogo, puoi selezionare una funzione usando catalog.load(provider/function-name):

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

Ogni Qiskit Function ha input, opzioni e output personalizzati. Consulta le pagine di documentazione specifiche della funzione che vuoi eseguire per maggiori informazioni. Per impostazione predefinita, tutti gli utenti possono eseguire un solo job di funzione alla volta:

# 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'

Controlla lo stato del job​

suggerimento

Attualmente, la tabella dei workload IBM Quantum riflette solo i workload di Qiskit Runtime. Usa job.status() per vedere lo stato corrente del tuo workload Qiskit Function.

Con il job_id della tua Qiskit Function, puoi controllare lo stato dei job in esecuzione. Sono inclusi i seguenti stati:

  • QUEUED: Il programma remoto è nella coda di Qiskit Function. La priorità in coda si basa su quanto hai usato le Qiskit Functions.
  • INITIALIZING: Il programma remoto si sta avviando; questo include la configurazione dell'ambiente remoto e l'installazione delle dipendenze.
  • RUNNING: Il programma è in esecuzione. Sono inclusi anche diversi stati più dettagliati, se supportati da funzioni specifiche:
    • RUNNING: MAPPING: La funzione sta mappando i tuoi input classici su input quantistici.
    • RUNNING: OPTIMIZING_FOR_HARDWARE: La funzione sta ottimizzando per la QPU selezionata. Ciò può includere transpilazione dei circuiti, caratterizzazione della QPU, backpropagation degli osservabili e così via.
    • RUNNING: WAITING_FOR_QPU: La funzione ha inviato un job a Qiskit Runtime e sta aspettando in coda.
    • RUNNING: EXECUTING_QPU: La funzione ha un job Qiskit Runtime attivo.
    • RUNNING: POST_PROCESSING: La funzione sta elaborando i risultati in post-processing. Ciò può includere la mitigazione degli errori, la mappatura dei risultati quantistici su risultati classici e così via.
  • DONE: Il programma è completato e puoi recuperare i dati dei risultati con job.results().
  • ERROR: Il programma si è interrotto a causa di un problema. Usa job.result() per ottenere il messaggio di errore.
  • CANCELED: Il programma è stato annullato: da un utente, dal servizio o dal server.
job.status()
'QUEUED'

Recupera i risultati​

Dopo che un programma è nello stato DONE, puoi usare job.results() per recuperare il risultato. Il formato dell'output varia in base alla funzione, quindi assicurati di seguire la documentazione specifica:

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

Puoi anche annullare un job in qualsiasi momento:

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

Elenca i job eseguiti in precedenza con le Qiskit Functions​

Puoi usare jobs() per elencare tutti i job inviati alle 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>]

Se hai già il job ID di un determinato job, puoi recuperarlo con 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

Recupera i messaggi di errore​

Se lo stato di un programma è ERROR, usa job.error_message() per recuperare il messaggio di errore nel seguente modo:

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

Passi successivi​

Raccomandazioni