Note di rilascio di Qiskit 0.38
0.38.0
Terra 0.21.2
Nessuna modifica
Aer 0.11.0
Preludio
I punti salienti del rilascio di Qiskit Aer 0.11.0 sono:
- La migrazione a un nuovo spazio dei nomi autonomo Python
qiskit_aer - L'introduzione della classe
AerStatevector - L'introduzione di implementazioni Aer di
primitives,SamplereEstimator - Introduzione del supporto per l'esecuzione con cuQuantum
Nuove funzioni
-
Aggiunto il supporto per
BackendV2afrom_backend(). Ora può generare un oggettoNoiseModelda un'istanza di inputBackendV2istanza. Quando si utilizza unBackendV2sufrom_backend(), le due opzioni deprecate,standard_gatesewarnings, vengono ignorate. -
Aggiunta l'implementazione Aer di
primitives,SamplereBaseSamplereBaseEstimatorsfruttano qiskit aer per eseguire in modo efficiente il calcolo delle operazioni primitive. È possibile fare riferimento alla documentazioneqiskit.primitivesper una descrizione più dettagliata dell'API delle primitive. -
Aggiunta di una libreria condivisa a Qiskit Aer che consente ai programmi esterni di utilizzare i metodi di simulazione di Aer. Si tratta di una funzione sperimentale e la sua API può essere modificata senza il periodo di deprezzamento.
-
Aggiunto il supporto per i sistemi M1 macOS. I binari precompilati per le versioni supportate di Python >= 3.8 su arm64 macOS saranno ora pubblicati su PyPI per questo e per i rilasci futuri.
-
È stato aggiunto il supporto alle API di cuQuantum, NVIDIA per l'elaborazione quantistica, per accelerare i simulatori di vettori di stato, matrici di densità e unitari utilizzando le GPU. Questa è un'implementazione sperimentale per cuQuantum Beta 2. ( 0.1.0 ) Le API di cuStateVec sono abilitate ad accelerare invece delle implementazioni di Aer costruendo Aer impostando il percorso di cuQuantum su
CUSTATEVEC_ROOT. (la distribuzione binaria non è attualmente disponibile) cuStateVector è abilitata impostando le opzionidevice='GPU'ecuStateVec_threshold. cuStateVec è abilitato quando il numero di qubit del circuito di ingresso è uguale o superiore acuStateVec_threshold. -
Aggiunto il supporto parziale per l'esecuzione sulle piattaforme ppc64le e s390x Linux. Questo rilascio avvierà la pubblicazione di binari precompilati per le piattaforme ppc64le e s390x Linux su tutte le versioni Python. Tuttavia, a differenza di altre piattaforme supportate, non tutte le dipendenze upstream di Qiskit supportano ancora queste piattaforme. Quindi potrebbe essere necessario un compilatore C/C++ per costruire e installare queste dipendenze e un semplice
pip install qiskit-aercon un ambiente Python funzionante non sarà sufficiente per installare Qiskit Aer. Inoltre, questi stessi vincoli ci impediscono di testare le ruote precompilate prima di pubblicarle, quindi le stesse garanzie sul supporto della piattaforma che esistono per le altre piattaforme non si applicano a queste piattaforme. -
Consente l'inizializzazione con un'etichetta, che consiste in
+-rl. Ora il codice seguente funziona:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(4) qc.initialize('+-rl') qc.save_statevector() AerSimulator(method="statevector").run(qc)
Problemi noti
- Quando si esegue su piattaforme Linux s390x (o altre piattaforme big endian) l'esecuzione di circuiti che contengono
UnitaryGatenon funzionano a causa di un bug di endianità. Per maggiori dettagli, vedere il numero 1506.
Note sull'aggiornamento
-
La parallelizzazione MPI per un gran numero di qubit è ottimizzata per applicare chunk-swap multipli come comunicazione all-to-all che può ridurre la dimensione dei dati scambiati sui processi MPI. Questo aggiornamento migliora la scalabilità della parallelizzazione.
-
Impostare i valori predefiniti di
fusion_max_qubitefusion_thresholda seconda della configurazione dimethodperAerSimulator. In precedenza, i valori predefiniti difusion_max_qubitefusion_thresholderano rispettivamente5e14per tutti i metodi di simulazione. Tuttavia, i loro valori ottimali dipendono dai metodi di esecuzione. Se ci si affida ai valori predefiniti precedenti, è possibile impostare esplicitamentefusion_max_qubit=5ofusion_threshold=14per mantenere il comportamento predefinito precedente. Ad esempio:from qiskit_aer import AerSimulator sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14) -
Si tratta di un aggiornamento per il supporto di cuQuantum 22.5.0.41 che include la correzione di alcuni bug relativi alla sicurezza dei thread in alcune API di cuStateVec. Ora Qiskit Aer attiva il multi-threading per la parallelizzazione multi-shot e multi-chunk quando si abilita cuStateVec.
-
L'esecuzione di qiskit-aer con Python 3.6 non è più supportata. Python >= 3.7 è ora necessario per installare ed eseguire qiskit-aer.
-
Il pacchetto
qiskit-aerPython è stato spostato in uno spazio dei nomi autonomo,qiskit_aer. In precedenza, condivideva uno spazio dei nomi conqiskit-terraessendoqiskit.providers.aer. Questa soluzione era problematica per diversi motivi e questa release se ne discosta. Per il momentoimport qiskit.providers.aercontinuerà a funzionare e a reindirizzare automaticamente aqiskit_aer. Le importazioni dallo spazio dei nomi legacyqiskit.provider.aeremetteranno unDeprecationWarningin futuro. Per evitare potenziali problemi a partire da questa versione, si raccomanda di aggiornare tutte le importazioni daqiskit.providers.aeraqiskit_aere daqiskit.Aeraqiskit_aer.Aer. -
Sono state rimosse le istruzioni snapshot (come
SnapshotStatevector) che erano deprecate da 0.9.0. Le applicazioni che utilizzano queste istruzioni devono essere modificate per utilizzare le istruzioni di salvataggio corrispondenti (comeSaveStatevector). -
Il modulo
qiskit_aer.extensionsè stato completamente rimosso. Con la rimozione delle istruzioni per le istantanee, questo modulo è diventato vuoto e non ha più alcuna utilità. -
La versione richiesta di Qiskit Terra è stata portata a 0.20.0.
Correzioni di bug
-
Correzioni per la distribuzione dei chunk MPI. Compresa la correzione dell'indicizzazione globale per le implementazioni di Thrust, la correzione del blocco della cache per le operazioni non gate. Inoltre savestatevector restituisce lo stesso statevector a tutti i processi (solo il primo processo ha ricevuto lo statevector in precedenza)
-
Gestisce una porta multiplexer come una porta unitaria se non ha qubit di controllo. In precedenza, se un gate multiplexer non disponeva di qubit di controllo, lo stato quantico non veniva aggiornato.
-
Corregge un bug in
RelaxationNoisePassa causa del quale la durata delle istruzioni veniva sempre assunta in unità di tempo dt, indipendentemente dall'unità di misura effettiva dell'istruzione. Ora la conversione delle unità di misura è gestita correttamente per tutte le unità di durata delle istruzioni.Per i dettagli, vedere il n. 1453.
-
Corretta la simulazione dei loop di
forin cui il parametro loop non veniva utilizzato nel corpo del loop. Ad esempio, in precedenza questo codice falliva, ma ora ha successo:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
Corregge un bug in
NoiseModel.from_backend()che generava un errore quando T2 valore maggiore di 2 * T1 veniva fornito dal backend. Dopo questa correzione, il valore T2 viene troncato fino a 2 * T1 e viene emesso un avviso all'utente in caso di troncamento. Il bug è stato introdotto con #1391 e, prima di allora,NoiseModel.from_backend()troncava il valore di T2 fino a 2 * T1 in modo silenzioso.Per i dettagli, consultare il numero 1464.
-
Correzione della regressione delle prestazioni nelle simulazioni rumorose dovuta a un forte aumento dell'overhead di serializzazione per il caricamento dei modelli di rumore da Python in C++, a causa di chiamate multiprocessing annidate non volute di Python. Per i dettagli si veda il numero 1407.
-
Questa è la soluzione per il problema n. 1557. Se l'opzione seed_simulator non è impostata, vengono generati numeri di seme diversi per ogni processo. Questo sistema fissa i semi medi impostati nel Circuito affinché tutti i processi utilizzino lo stesso numero di semi.
-
Si tratta di una correzione della parallelizzazione MPI per la parallelizzazione multi-chunk e la distribuzione multi-shot sui processi paralleli. Mancava una configurazione della distribuzione che impediva la distribuzione di MPI, ora è stata risolta.
-
Si tratta di una correzione per il blocco della cache del transpiler e la parallelizzazione dei chunk per le GPU o MPI. Questa correzione risolve il problema con i qubit che hanno molti qubit di controllo o di destinazione (> blocking_qubits). Da questa correzione, solo i qubit di destinazione del gate multicontrollato sono bloccati nella cache in blocking_qubits. Ma non supporta il caso in cui il numero di qubit di destinazione sia ancora più grande del numero di qubit bloccanti (ad esempio, moltiplicazione di matrice unitaria di grandi dimensioni)
-
Corregge un bug in
QuantumError.to_dict()per cui le istruzioni di circuiti a N-qubit in cui l'istruzione assemblata si applicava sempre ai qubit[0, ..., N-1]piuttosto che ai qubit dell'istruzione. Questo bug riguardava anche i modelli di rumore del dispositivo e del backend falso.Per i dettagli si veda il numero 1415.
-
Poiché a ogni circuito è stato assegnato un seme in modo casuale se seed_simulator non è impostato, la simulazione multicircuito non è stata riproducibile con un'altra simulazione multicircuito. Gli utenti dovevano eseguire più simulazioni a circuito singolo con il simulatore seed che viene assegnato in modo casuale nella simulazione a circuito multiplo. Questa correzione consente agli utenti di riprodurre la simulazione multicircuito con un'altra simulazione multicircuito impostando seed_simulator del primo circuito nella prima simulazione multicircuito. Questa correzione risolve anche un problema segnalato in https://github.com/Qiskit/qiskit-aer/issues/1511 in cui la simulazione con i parametri vincolati restituiva risultati identici per ogni istanza di circuito.
-
Correzione di un problema di prestazioni nell'ottimizzazione in batch di più scatti per la GPU quando si usa il rumore Pauli. Questa correzione consente il multi-threading per il campionamento del rumore in fase di esecuzione e utilizza la parallelizzazione nidificata di OpenMP quando si utilizzano più GPU. Questa è la correzione del problema 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473>
-
Questo è il fix per il supporto di cuStateVec, fix per l'errore di compilazione a causa del cambio di specifiche di alcune API di cuStateVec dalla versione cuQuantum 0.40.
-
Corregge un problema quando while_loop è la coda di QuantumCircuit. while_loop viene tradotto in istruzioni di salto e di marcatura. Tuttavia, se un ciclo while si trova alla fine di un circuito, l'istruzione mark viene troncata in modo errato. Questa correzione corregge l'algoritmo di troncamento in modo che rimangano sempre le istruzioni di contrassegno.
IBM Q Fornitore 0.19.2
Nessuna modifica