Introduzione alle primitive
Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit[all]~=2.3.0 qiskit-ibm-runtime~=0.43.1
Perché Qiskit ha introdotto le primitive?
Analogamente agli albori dei computer classici, quando gli sviluppatori dovevano manipolare direttamente i registri della CPU, le prime interfacce delle QPU restituivano semplicemente i dati grezzi dell'elettronica di controllo.
Questo non era un grosso problema quando le QPU vivevano nei laboratori e permettevano l'accesso diretto solo ai ricercatori.
Riconoscendo che la maggior parte degli sviluppatori non avrebbe e non dovrebbe avere familiarità con la distillazione di tali dati grezzi in 0s e 1s, Qiskit ha introdotto backend.run, una prima astrazione per accedere alle QPU nel cloud. Questo ha permesso agli sviluppatori di operare su un formato di dati familiare e di concentrarsi sul quadro generale.
Con la diffusione dell'accesso alle QPU e con lo sviluppo di un maggior numero di algoritmi quantistici, è emersa nuovamente la necessità di un'astrazione di livello superiore. In risposta, Qiskit ha introdotto l'interfaccia primitives, ottimizzata per due compiti fondamentali nello sviluppo di algoritmi quantistici: la stima del valore di aspettativa (Estimator) e il campionamento dei circuiti (Sampler). L'obiettivo è ancora una volta di aiutare gli sviluppatori a concentrarsi maggiormente sull'innovazione e meno sulla conversione dei dati. L'interfaccia delle primitive sostituisce l'interfaccia backend.run , poiché Sampler fornisce lo stesso accesso diretto all'hardware offerto da backend.run.
Che cos'è un primitivo?
I sistemi informatici sono costruiti su più livelli di astrazione. Le astrazioni consentono di concentrarsi su un un particolare livello di dettaglio, rilevante per il compito che si sta svolgendo. Più ci si avvicina all'hardware, più basso è il livello di astrazione necessario (ad esempio, è necessario spostare o manipolare i dati a livello di istruzioni della CPU). Più complesso è il compito che si vuole eseguire, più le astrazioni saranno di livello superiore (ad esempio, si potrebbe usare una libreria di programmazione per eseguire calcoli algebrici) calcoli algebrici).
In questo contesto, una primitiva è la più piccola istruzione di elaborazione, il più semplice blocco di costruzione da cui si può creare qualcosa di utile per un determinato livello di astrazione da cui si può creare qualcosa di utile per un determinato livello di astrazione.
I recenti progressi dell'informatica quantistica hanno aumentato la necessità di lavorare a livelli di astrazione più elevati. Man mano che il campo si sposta verso unità di elaborazione quantistica (QPU) più grandi e flussi di lavoro più complessi, l'attenzione si sposta dall'interazione con i singoli segnali dei qubit alla visione dei dispositivi quantistici come sistemi che eseguono i compiti necessari segnali dei singoli qubit alla visione dei dispositivi quantistici come sistemi che eseguono i compiti necessari.
I due compiti più comuni dei computer quantistici sono il campionamento degli stati quantistici e il calcolo dei valori di aspettativa. Questi compiti hanno motivato la progettazione di Qiskit primitives : Estimatore e Campionatore.
- Lo stimatore calcola i valori di aspettativa delle osservabili rispetto agli stati preparati dai circuiti quantistici.
- Il campionatore campiona il registro di uscita dell'esecuzione del circuito quantistico.
In breve, il modello computazionale introdotto da Qiskit primitives avvicina la programmazione quantistica a quella classica, dove l'attenzione si concentra meno sui dettagli hardware e più sui risultati alla programmazione classica, dove l'attenzione si concentra meno sui dettagli dell'hardware e più sui risultati che si vogliono ottenere risultati che si vogliono ottenere.
Definizione primitiva e implementazioni
Esistono due tipi di Qiskit primitives : le classi base e le loro implementazioni. Le primitive Estimator e Sampler sono definite da classi base primitive open source presenti nel pacchetto " Qiskit SDK " (nel modulo qiskit.primitives ). I fornitori (come il servizio Compute di IBM Quantum ) possono utilizzare queste classi di base per derivare le proprie implementazioni di Sampler ed Estimator. La maggior parte degli utenti interagirà con le implementazioni dei provider, non con le primitive di base.
Classi base
Le Base primitive sono classi astratte che definiscono un'interfaccia comune per l'implementazione delle primitive. Tutte le altre classi del qiskit.primitives modulo derivano da queste classi di base. Gli sviluppatori dovrebbero ricorrere a queste funzionalità qualora fossero interessati a creare un proprio modello di esecuzione basato su primitive per un fornitore specifico. Queste classi potrebbero rivelarsi utili anche per chi desidera eseguire elaborazioni altamente personalizzate e ritiene che le implementazioni delle primitive esistenti siano troppo semplici per le proprie esigenze. Gli utenti generici non utilizzeranno direttamente le classi di base.
BaseEstimatorV1 e BaseSamplerV1 - Sebbene le primitive di V1 siano ancora utilizzabili, queste guide si concentrano sulle primitive di V2 poiché sono le più recenti e quelle più comunemente utilizzate.
BaseEstimatorV2 e BaseSamplerV2 - Le primitive di riferimento di Qiskit seguono queste specifiche di interfaccia.
Implementazioni
Tutte le classi primitive derivano dalle classi base; pertanto, presentano la stessa struttura generale e lo stesso utilizzo. Ad esempio, il formato dei dati in ingresso è lo stesso per tutte le primitive di Estimator. Tuttavia, esistono differenze nelle implementazioni che le rendono uniche.
Si tratta di implementazioni delle classi base delle primitive:
-
IBM Quantum primitive
SamplerV2, eEstimatorV2offrono un'implementazione più sofisticata (ad esempio, includendo la mitigazione degli errori) sotto forma di servizio basato sul cloud. Questa implementazione delle primitive di base viene utilizzata per accedere all'hardware dell IBM Quantum®. -
StatevectorEstimatoreStatevectorSampler- Implementazioni di riferimento delle primitive che utilizzano il simulatore integrato in Qiskit. Sono realizzati con il moduloquantum_infoQiskit e producono risultati basati su simulazioni con vettori di stato ideali. Si accede a essi tramite Qiskit. Per ulteriori dettagli sull'utilizzo, consultare la sezione " Simulazione esatta con primitive Qiskit SDK ". -
BackendEstimatorV2eBackendSamplerV2- È possibile utilizzare queste classi per "incapsulare" qualsiasi risorsa di calcolo quantistico in una primitiva. Questo ti permette di scrivere codice in stile primitivo per i provider che non dispongono ancora di un'interfaccia basata sui primitivi. Queste classi possono essere utilizzate esattamente come le normali Sampler ed Estimator, con la differenza che devono essere inizializzate con un argomentobackendaggiuntivo per selezionare il computer quantistico su cui eseguire l'operazione. Si accede a essi tramite Qiskit. Per ulteriori informazioni, consulta la guida alle primitive di backend.
Opzioni
È possibile passare delle opzioni alle primitive per personalizzarle in base alle proprie esigenze. Sebbene l'interfaccia del metodo run() delle primitive sia comune a tutte le implementazioni, le relative opzioni non lo sono. Consulta la documentazione dell'API relativa a una specifica implementazione di una primitiva per scoprire quali opzioni supporta.
Ad esempio, consultare le sezioni dedicate alle opzioni di Estimator e alle opzioni di Sampler per conoscere le opzioni relative alle primitive di IBM Quantum, oppure consultare i riferimenti all'API di Qiskit Aer per le opzioni relative alle primitive di Qiskit Aer.
Vantaggi dell' Qiskit primitives
Grazie alle primitive, gli utenti di Qiskit possono scrivere codice quantistico per una specifica QPU senza dover
gestire esplicitamente ogni singolo dettaglio. Inoltre, grazie a questo ulteriore livello di astrazione, potresti riuscire ad accedere più facilmente
alle funzionalità hardware avanzate di un determinato provider. Ad esempio, con le primitive IBM Quantum,
è possibile sfruttare i più recenti progressi in materia di mitigazione e soppressione degli errori attivando o disattivando opzioni quali la, della primitiva resilience_level, anziché sviluppare una propria implementazione di tali tecniche.
Per i fornitori di hardware, implementare le primitive in modo nativo significa fornire agli utenti un modo più "out-of-the-box" di accedere alle funzioni dell'hardware, come le tecniche avanzate di post-processing modo di accedere alle funzioni dell'hardware, come le tecniche avanzate di post-elaborazione. È quindi più facile per i vostri utenti beneficiare delle migliori capacità del vostro hardware.
Passi successivi
- Comprendere le operazioni di input e output di base.
- Esamina gli esempi dettagliati.
- Esercitati con le primitive seguendo la lezione sulla funzione di costo in IBM Quantum Learning.
- Consulta la guida "Creare un provider" per scoprire come implementare le tue primitive Sampler ed Estimator.
- Consulta la documentazione dell'API.
- Leggete Migrazione alle primitive di V2.
- Scopri le primitive IBM Quantum, utilizzate per eseguire circuiti sulle QPU IBM.