Skip to main content
IBM Quantum Platform

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, Sampler e Estimator
  • Introduzione del supporto per l'esecuzione con cuQuantum

Nuove funzioni

  • Aggiunto il supporto per BackendV2 a from_backend(). Ora può generare un oggetto NoiseModel da un'istanza di input BackendV2 istanza. Quando si utilizza un BackendV2 su from_backend() , le due opzioni deprecate, standard_gates e warnings, vengono ignorate.

  • Aggiunta l'implementazione Aer di primitives, Sampler e BaseSampler e BaseEstimator sfruttano qiskit aer per eseguire in modo efficiente il calcolo delle operazioni primitive. È possibile fare riferimento alla documentazione qiskit.primitives per 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 opzioni device='GPU' e cuStateVec_threshold . cuStateVec è abilitato quando il numero di qubit del circuito di ingresso è uguale o superiore a cuStateVec_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-aer con 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 UnitaryGate non 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_qubit e fusion_threshold a seconda della configurazione di method per AerSimulator. In precedenza, i valori predefiniti di fusion_max_qubit e fusion_threshold erano rispettivamente 5 e 14 per 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 esplicitamente fusion_max_qubit=5 o fusion_threshold=14 per 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-aer Python è stato spostato in uno spazio dei nomi autonomo, qiskit_aer. In precedenza, condivideva uno spazio dei nomi con qiskit-terra essendo qiskit.providers.aer. Questa soluzione era problematica per diversi motivi e questa release se ne discosta. Per il momento import qiskit.providers.aer continuerà a funzionare e a reindirizzare automaticamente a qiskit_aer . Le importazioni dallo spazio dei nomi legacy qiskit.provider.aer emetteranno un DeprecationWarning in futuro. Per evitare potenziali problemi a partire da questa versione, si raccomanda di aggiornare tutte le importazioni da qiskit.providers.aer a qiskit_aer e da qiskit.Aer a qiskit_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 (come SaveStatevector).

  • 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 RelaxationNoisePass a 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 for in 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

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.