Note di rilascio di Qiskit 0.42
0.42.1
Terra 0.23.3
Preludio
Qiskit Terra 0.23.3 è una versione con correzione di bug minori.
Correzioni di bug
-
Corregge un bug nel passaggio di trasformazione
Optimize1qGatesDecompositionin cui il punteggio per le sostituzioni veniva calcolato erroneamente quando gli errori del cancello erano pari a zero. -
Il metodo
ECRGate.inverse()ora restituisce un'altra istanza diECRGateanziché un gate personalizzato, poiché è auto-invertito. -
Agganciare le probabilità nei metodi
QuantumState.probabilities()eQuantumState.probabilities_dict()all'intervallo[0, 1]. In questo modo si risolvono gli errori di arrotondamento in cui le probabilità potevano, ad esempio, essere maggiori di 1, causando errori nell'emulazione del campionatore. Corretto #9761. -
È stato corretto un bug nel programma
BackendSamplerin cui le stringhe di bit delle probabilità binarie venivano troncate al numero minimo di bit necessario per rappresentare il risultato più grande come numero intero. Ciò significa che se, ad es.{"0001": 1.0}è stato misurato, il risultato è stato troncato a{"1": 1.0}. -
È stato risolto un problema con il metodo
PassManagerConfig.from_backend()quando veniva utilizzato con un backend del simulatore basato suBackendV1basato sul backend del simulatore. Per alcuni backend di simulatori che non popolavano alcuni campi opzionali, il costruttore dava errore. Corretto #9265 e #8546 -
Fissato il
BackendSamplereBackendEstimatorper eseguire con successo il programma con unbound_pass_managerpersonalizzato. In precedenza, l'esecuzione di circuiti singoli con unbound_pass_managersollevava unValueErrorperché non veniva restituito un elenco in uno dei passaggi. -
Il passaggio del
GateDirectionnon rifiuterà più le porte a cui sono state date calibrazioni esplicite, ma che non esistono nella mappa di accoppiamento generica o nel target. -
È stato risolto un problema con la classe
CommutationCheckerche tentava di allocare internamente un array per i qubit di quando invece era necessario un array per rappresentare solo i qubit di . Questo potrebbe causare una quantità eccessiva di memoria per gate di grandi dimensioni, ad esempio un gate a 4 qubit richiederebbe 32 gigabyte invece di 2 kilobyte. Corretto #9197 -
L'ottenimento di una calibrazione vuota da
InstructionPropertiessolleva AttributeError è stato risolto. Ora restituisceNone. -
Fissato
qasm()in modo che aggiunga;dopo l'istruzionereset. -
I nomi dei registri e dei parametri vengono ora sottoposti a escape durante l'esportazione di OpenQASM 3 (
qasm3.dumps()) se non sono già identificatori validi. Corretto #9658. -
QPY (usando
qpy.load()) ora deserializzerà correttamente le istruzioniStatePreparationistruzioni. In precedenza, QPY dava errore quando si tentava di caricare un file che ne conteneva uno. Corretto #8297. -
Corretto un bug in
random_circuit()con 64 o più qubit econditional=True, dove il circuito risultante poteva avere un valore digitato in modo errato nella sua condizione, causando una serie di fallimenti durante la transpilazione o altre operazioni circuitali. Corretto #9649. -
Corretto un problema con i metodi della classe
OneQubitEulerDecomposerdella classeangles()eangles_and_phase()davano errore se la matrice di input era di tipo diverso dacomplex/np.cdouble. Nelle versioni precedenti questo funzionava bene, ma ha smesso di funzionare in Qiskit Terra 0.23.0 quando gli interni diOneQubitEulerDecomposersono stati riscritti in Rust. Corretto #9827 -
I cancelli Qiskit
CCZGate,CSGate,CSdgGatenon sono definite inqelib1.ince, pertanto, quando si scarica come OpenQASM 2.0, la loro definizione deve essere inserita nel file. Correzioni di #9559, #9721 e #9722.
Aer 0.12.0
Nessuna modifica
IBM Q Fornitore 0.20.2
Nessuna modifica
0.42.0
Terra 0.23.2
Nessuna modifica
Aer 0.12.0
Preludio
I punti salienti del rilascio di Qiskit Aer 0.12.0 sono:
- Aggiunto un nuovo simulatore di rete tensoriale su GPU basato su cuTensorNet
- Aggiunta una nuova classe
AerDensityMatrixalqiskit_aer.quantum_infoal modulo- Migliorare notevolmente le prestazioni di runtime di
AerSimulatore delle classi legacyQasmSimulator,StatevectorSimulatoreUnitarySimulator, convertendo direttamente gli oggetti di input in una rappresentazione interna in C++, invece di serializzare prima il circuito in una rappresentazione interna in C++QuantumCircuitin una rappresentazione interna del C++, invece di serializzare prima il circuito in un file di tipoQasmQobj. Questo miglioramento sarà più evidente per i circuiti con un numero ridotto di qubit o per i circuiti parametrizzati utilizzando l'argomento della parola chiaveparameter_binds.
Nuove funzioni
-
Aggiunto un nuovo metodo di classe
from_backend_properties()aNoiseModel. Ciò consente di costruire un nuovoNoiseModelda un oggettoBackendProperties. Una funzionalità simile era presente nel costruttoreNoiseModel.from_backend(), ma è stata rimossa poiché un oggettoBackendPropertiesda solo non contiene informazioni sufficienti per creare un oggettoNoiseModel. -
Aggiunta di una nuova classe,
AerDensityMatrix, al moduloqiskit_aer.quantum_infoal modulo. Questa classe è utilizzata per fornire la stessa interfaccia della classe upstreamDensityMatrixdi Qiskit, ma con il supporto della simulazione di Qiskit Aer. -
È stato aggiunto un nuovo argomento di parola chiave,
abelian_grouping, al metodoEstimator. Questo argomento viene utilizzato per controllare se il programmaEstimatorraggrupperà le osservabili di ingresso in osservabili commutabili in modo qubit-wise, il che riduce il numero di esecuzioni del circuito necessarie per calcolare il valore di aspettativa e migliora le prestazioni di runtime del programmaEstimator. L'impostazione predefinita èTrue. -
AerStateha un nuovo metodoinitialize_density_matrix()che imposta una matrice di densità aAER::QV::DensityMatrix. Questo metodo sarà chiamato inq.i.states.DensityMatrixper inizializzare i suoi dati conndarray.initialize_density_matrix()ha un argomento booleano che specifica la copia o la condivisione dei dati dindarray. Se i dati sono condivisi con C++ e python, i dati non devono essere raccolti in python mentre C++ vi accede. -
L'overhead per l'esecuzione di simulazioni con
run()(per tutte le classi di backend del simulatore) è stato notevolmente ridotto. Questo è stato ottenuto non serializzando più internamente gli oggettiQuantumCircuitin oggettiQasmQobje invece l'oggettoQuantumCircuitdirettamente a una struttura circuitale interna del C++ utilizzata per la simulazione. Questo miglioramento è più evidente per le simulazioni di circuti con un piccolo numero di qubit o di circuiti parametrizzati utilizzando l'argomentoparameter_bindsdirun(). Si noti che la simulazione a impulsi (tramite l'ormai deprecatoPulseSimulator) e la simulazione basata su DASK utilizzano ancora la serializzazione interna e non vedranno questo miglioramento delle prestazioni. -
È stato aggiunto un nuovo metodo a
AerJob,circuits(), che restituisce un elenco di oggettiQuantumCircuitoggetti. Questo metodo restituisceNonese Qobj viene utilizzato per la simulazione. -
AerStateeAerStatevectorsupportano ora l'applicazione degli operatoriKrausoperatori. InAerStatevector, uno degli operatori di Kraus viene applicato in modo casuale allo stato quantistico in base alle probabilità di errore. -
Aggiunto un nuovo metodo di simulazione basato sulle API di NVIDIAcuTensorNet API di cuQuantum SDK. Si tratta di un simulatore di rete tensoriale generale accelerato da GPU che può simulare qualsiasi circuito quantistico, traducendo internamente il circuito in una rete tensoriale per eseguire la simulazione. Per utilizzare questo metodo di simulazione, impostare
method="tensor_network"edevice="GPU"quando si inizializza un oggettoAerSimulator. Ad esempio:from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")Questo metodo supporta sia simulazioni di vettori di stato che di matrici di densità. La simulazione del rumore può essere effettuata anche con una matrice di densità a colpo singolo, se non ci sono operazioni
SaveStatevectornel circuito.Questo nuovo metodo di simulazione supporta anche la parallelizzazione con più GPU e processi MPI utilizzando la tecnica di slicing della rete tensoriale. Tuttavia, questo tipo di simulazione richiede molto tempo se i circuiti di ingresso sono complicati.
-
La variabile d'ambiente
BLA_VENDORpuò ora essere specificata per utilizzare una libreria BLAS diversa quando si costruisce Qiskit Aer dai sorgenti. Per impostazione predefinita, se non viene specificato, verrà utilizzato OpenBLAS. Se la libreria BLAS specificata in BLA_VENDOR` non viene trovata, il processo di compilazione di Cmake si interrompe.
Problemi noti
- Questa release di Qiskit Aer non è compatibile con la serie di release di Conan 2.X. Se si sta costruendo Qiskit Aer dai sorgenti manualmente, assicurarsi di utilizzare una release di Conan 1.x. La compatibilità con le versioni più recenti di Conan sarà risolta in una versione futura. Per ulteriori dettagli, consultare il numero #1730.
Note sull'aggiornamento
-
Il comportamento predefinito della primitiva
Estimatorraggruppa ora l'osservabile di ingresso in osservabili commutabili in senso qubit. Il raggruppamento riduce il numero di circuiti da eseguire e migliora le prestazioni. Se si desidera il comportamento precedente, si può inizializzare l'istanza diEstimatorcon l'argomento chiaveabelian_grouping=False. -
Rimosso l'uso di primitive con il gestore di contesto e l'inizializzazione con circuiti (osservabili solo per Estimator) e parametri che è stata deprecata nella versione di Qiskit Terra 0.22.0 nell'ottobre 2022.
-
Il comportamento del metodo
run()è cambiato quando vengono passati in ingresso oggetti non validi o comunque non simulabiliQuantumCircuitvengono passati come input. In precedenza, in questi casi il metodorun()restituiva unAerJob, il cui metodoresult()restituiva un o un (a seconda che tutti gli ingressi del circuito o solo alcuni fossero non validi o meno)Resultcon il metodoERRORoPARTIAL COMPLETED(a seconda che tutti gli ingressi del circuito o solo alcuni non fossero validi o meno). A partire da questa versione, invece di restituire un oggetto risultato con questi stati, verrà sollevata un'eccezione. Questa modifica si è resa necessaria per migliorare le prestazioni, non dovendo più serializzare internamente gli oggetti in un Qobj prima di passarli al C++QuantumCircuitin un Qobj prima di passarlo a C++, invece la conversione diretta daQuantumCircuitora dà direttamente errore quando si cerca di simulare un circuito che Qiskit Aer non è in grado di eseguire. Se si desidera il comportamento precedente, è possibile costruire Qiskit Aer in modalità standalone e serializzare manualmente gli oggetti in una rappresentazione JSONQuantumCircuitin una rappresentazione JSON dell'oggettoQasmQobjche poi passerete al binario standalone di Aer, che manterrà il comportamento precedente. -
Un metodo deprecato
add_nonlocal_quantum_error()inNoiseModelè stato rimosso. Non è disponibile alcun metodo alternativo. Se si desidera aggiungere errori quantistici non locali, è necessario scrivere un passaggio del transpiler che inserisca il proprio errore quantistico in un circuito, ed eseguire il passaggio appena prima di eseguire il circuito sul simulatore Aer. -
NoiseModel.from_backend()è stato modificato per non accettare l'oggettoBackendPropertiescome argomento dibackend. Utilizzare invece il nuovo metodoNoiseModel.from_backend_properties(). -
È stato rimosso un argomento deprecato
standard_gatesampiamente utilizzato in diversi metodi e funzioni (elencati di seguito) nel modulonoise.NoiseModel.from_backend()enoise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error()edepolarizing_error()innoise.errors.standard_errorsQuantumError.__init__()
Non sono disponibili mezzi alternativi perché l'utente deve essere agnostico su come il simulatore rappresenta internamente i rumori (errori quantistici).
-
Il costruttore di
QuantumErrorha abbandonato il supporto del deprecato input di tipo json per l'argomentonoise_ops. Utilizzate invece il nuovo input styple per l'argomentonoise_ops, ad esempio,from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])Inoltre, ha eliminato gli argomenti deprecati:
number_of_qubits: UtilizzareQuantumCircuitper definire invecenoise_ops.atol: Utilizzare invece l'attributoQuantumError.atol.standard_gates: Non è disponibile alcuna alternativa (gli utenti non dovrebbero preoccuparsi troppo della rappresentazione interna degli errori quantistici).
-
Il modulo deprecato
noise.errors.errorutilsè stato completamente rimosso e non sono disponibili alternative. Tutte le funzioni del modulo erano funzioni ausiliarie destinate a essere usate solo per implementare funzioni instandard_errors(cioè avrebbero dovuto essere fornite come funzioni private) e non più utilizzate in esso. -
Il deprecato
utils.noise_remapperè stato completamente rimosso e non sono disponibili alternative, poiché il codice C++ ora tronca e rimappa automaticamente i modelli di rumore se tronca i circuiti. -
Tutte le funzioni (
pauli_operators()ereset_operators()) e le classi (NoiseTransformer) del moduloutils.noise_transformationsono state rimosse e non sono disponibili alternative. Si trattava infatti di funzioni/classi private utilizzate solo per implementareapproximate_quantum_error()e non avrebbero dovuto essere pubbliche. -
Il nome dell'argomento
qobj, precedentemente deprecato, del metodoAerSimulatorePulseSimulatordelle classirun()è stato rimosso. Questo nome di argomento è stato deprecato con il rilascio di Qiskit Aer 0.8.0 ed è stato sostituito dai nomi di argomentocircuitseschedulesrispettivamente. -
setup.pydi Aer è stato aggiornato per non tentare più di effettuare chiamate apipper installare i requisiti di compilazione, sia manualmente che tramite l'opzionesetup_requiresdisetuptools.setup. Il modo preferito per costruire Aer è utilizzare un costruttore compatibile con PEP 517, come ad esempio:pip install .Questa modifica significa che una chiamata diretta a
setup.pynon funzionerà più se i requisiti di compilazione non sono installati. Questo è in linea con le moderne linee guida per il confezionamento di Python.
Note di deprecazione
-
Il supporto per l'esecuzione di Qiskit Aer con il supporto di Python 3.7 è stato deprecato e sarà rimosso in una versione futura. Ciò significa che a partire da una versione futura sarà necessario aggiornare la versione Python in uso a Python 3.8 o superiore.
-
Il backend
PulseSimulatorè stato deprecato e sarà rimosso in una versione futura. Se si utilizza il backendPulseSimulatorper eseguire la simulazione a livello di impulsi, si deve invece utilizzare la libreria Qiskit Dynamics per eseguire la simulazione. Qiskit Dynamics fornisce un framework di simulazione a livello di impulsi più flessibile e robusto del backendPulseSimulator. -
Il metodo
qobj()della classeAerJobè ora deprecato e sarà rimosso in una prossima versione. L'uso del formato qobj come input dirun()è stato deprecato da qiskit-aer 0.9.0 e nella maggior parte dei casi questo metodo restituisce comunqueNone. Se si desidera ottenere ora l'input del metodorun(), è possibile utilizzare il metodocircuits(), che restituirà gli oggettiQuantumCircuitche sono stati simulati nel lavoro. -
Un argomento
warningsampiamente utilizzato in diversi metodi e funzioni del modulonoiseè stato deprecato a favore dell'uso delle funzioni di filtraggio della libreria standard Python 'swarnings.
Correzioni di bug
-
È stato risolto un problema durante la creazione di una nuova istanza di
AerStatevectorda unnumpy.ndarrayche aveva memoria non contigua. In precedenza, questo comportava un comportamento inatteso (e un potenziale errore), poichéAerStatevectorpresupponeva che l'array di input fosse contiguo. Questo problema è stato risolto in modo che il layout della memoria venga controllato e chenumpy.ndarrayvenga copiato internamente come array contiguo prima di essere utilizzato. -
È stato risolto un problema con la classe
Samplerche in precedenza falliva se l'ingressoQuantumCircuitconteneva più registri classici multipli. Corretto #1679 -
Il conteggio dei bit del registro classico utilizzato sulla GPU non è stato impostato prima di calcolare la memoria libera disponibile per i chunk, causando un loop infinito. Quindi questa correzione imposta il conteggio dei bit prima di allocare i pezzi se l'esecuzione di scatti batch è abilitata.
-
Correggere gli errori di compilazione e di test quando si abilita la GPU ma si disabilita cuQuantum.
-
È stato risolto un problema nel metodo di simulazione dello stato del prodotto matriciale (cioè l'impostazione dell'argomento della parola chiave
method="matrix_product_state"quando si inizializza un oggettoAerSimulator) per cui il simulatore ordinava in modo errato i qubit prima di eseguire la misurazione, causando potenzialmente un ciclo infinito. Il problema è stato risolto in modo che la misurazione dei qubit avvenga nell'ordine della struttura MPS attuale e che l'ordinamento avvenga successivamente come fase di post-elaborazione. Questo migliorerà probabilmente anche le prestazioni del metodo di simulazione e consentirà una rappresentazione più accurata degli stati entangled. Corretto #1694 -
Il backend
AerSimulatorcon i metodi:statevectordensity_matrixmatrix_product_statestabilizer
ora segnalano che supportano le istruzioni
break_loopecontinue_loopquando vengono utilizzate come backend per la funzione Terratranspile()per la funzione Terra. I simulatori li supportavano già, ma non li avevano segnalati.
IBM Q Fornitore 0.20.2
Questo rilascio rimuove i vincoli di versione troppo restrittivi stabiliti nei requisiti per il pacchetto aggiunto in 0.20.1. Per il pacchetto 0.20.1 l'unica dipendenza che doveva avere un limite di versione era il pacchetto requests-ntlm , in quanto il suo nuovo rilascio era l'unica dipendenza che attualmente ha un'incompatibilità con qiskit-ibmq-provider. Gli altri tappi di versione aggiunti come parte di 0.20.1 causavano problemi di installazione in diversi ambienti, perché rendevano il pacchetto qiskit-ibmq-provider incompatibile con le versioni delle dipendenze usate in altri pacchetti.