Skip to main content
IBM Quantum Platform

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 Optimize1qGatesDecomposition in 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 di ECRGate anziché un gate personalizzato, poiché è auto-invertito.

  • Agganciare le probabilità nei metodi QuantumState.probabilities() e QuantumState.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 BackendSampler in 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 su BackendV1 basato 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 BackendSampler e BackendEstimator per eseguire con successo il programma con un bound_pass_manager personalizzato. In precedenza, l'esecuzione di circuiti singoli con un bound_pass_manager sollevava un ValueError perché non veniva restituito un elenco in uno dei passaggi.

  • Il passaggio del GateDirection non 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 CommutationChecker che tentava di allocare internamente un array per i qubit di 2n2^{n} quando invece era necessario un array per rappresentare solo i qubit di nn. 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 InstructionProperties solleva AttributeError è stato risolto. Ora restituisce None.

  • Fissato qasm() in modo che aggiunga ; dopo l'istruzione reset .

  • 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 istruzioni StatePreparation istruzioni. 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 e conditional=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 OneQubitEulerDecomposer della classe angles() e angles_and_phase() davano errore se la matrice di input era di tipo diverso da complex/np.cdouble. Nelle versioni precedenti questo funzionava bene, ma ha smesso di funzionare in Qiskit Terra 0.23.0 quando gli interni di OneQubitEulerDecomposer sono stati riscritti in Rust. Corretto #9827

  • I cancelli Qiskit CCZGate, CSGate, CSdgGate non sono definite in qelib1.inc e, 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 AerDensityMatrix al qiskit_aer.quantum_info al modulo
  • Migliorare notevolmente le prestazioni di runtime di AerSimulator e delle classi legacy QasmSimulator, StatevectorSimulator e UnitarySimulator , convertendo direttamente gli oggetti di input in una rappresentazione interna in C++, invece di serializzare prima il circuito in una rappresentazione interna in C++ QuantumCircuit in una rappresentazione interna del C++, invece di serializzare prima il circuito in un file di tipo QasmQobj. Questo miglioramento sarà più evidente per i circuiti con un numero ridotto di qubit o per i circuiti parametrizzati utilizzando l'argomento della parola chiave parameter_binds .

Nuove funzioni

  • Aggiunto un nuovo metodo di classe from_backend_properties() a NoiseModel. Ciò consente di costruire un nuovo NoiseModel da un oggetto BackendProperties . Una funzionalità simile era presente nel costruttore NoiseModel.from_backend() , ma è stata rimossa poiché un oggetto BackendProperties da solo non contiene informazioni sufficienti per creare un oggetto NoiseModel .

  • Aggiunta di una nuova classe, AerDensityMatrix, al modulo qiskit_aer.quantum_info al modulo. Questa classe è utilizzata per fornire la stessa interfaccia della classe upstream DensityMatrix di Qiskit, ma con il supporto della simulazione di Qiskit Aer.

  • È stato aggiunto un nuovo argomento di parola chiave, abelian_grouping, al metodo Estimator. Questo argomento viene utilizzato per controllare se il programma Estimator raggrupperà 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 programma Estimator. L'impostazione predefinita è True.

  • AerState ha un nuovo metodo initialize_density_matrix() che imposta una matrice di densità a AER::QV::DensityMatrix. Questo metodo sarà chiamato in q.i.states.DensityMatrix per inizializzare i suoi dati con ndarray. initialize_density_matrix() ha un argomento booleano che specifica la copia o la condivisione dei dati di ndarray . 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 oggetti QuantumCircuit in oggetti QasmQobj e invece l'oggetto QuantumCircuit direttamente 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'argomento parameter_binds di run(). Si noti che la simulazione a impulsi (tramite l'ormai deprecato PulseSimulator) 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 oggetti QuantumCircuit oggetti. Questo metodo restituisce None se Qobj viene utilizzato per la simulazione.

  • AerState e AerStatevector supportano ora l'applicazione degli operatori Kraus operatori. In AerStatevector, 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" e device="GPU" quando si inizializza un oggetto AerSimulator . 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 SaveStatevector nel 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_VENDOR può 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 Estimator raggruppa 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 di Estimator con l'argomento chiave abelian_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 simulabili QuantumCircuit vengono passati come input. In precedenza, in questi casi il metodo run() restituiva un AerJob , il cui metodo result() restituiva un o un (a seconda che tutti gli ingressi del circuito o solo alcuni fossero non validi o meno) Result con il metodo ERROR o PARTIAL 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++ QuantumCircuit in un Qobj prima di passarlo a C++, invece la conversione diretta da QuantumCircuit ora 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 JSON QuantumCircuit in una rappresentazione JSON dell'oggetto QasmQobj che poi passerete al binario standalone di Aer, che manterrà il comportamento precedente.

  • Un metodo deprecato add_nonlocal_quantum_error() in NoiseModel è 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'oggetto BackendProperties come argomento di backend . Utilizzare invece il nuovo metodo NoiseModel.from_backend_properties() .

  • È stato rimosso un argomento deprecato standard_gates ampiamente utilizzato in diversi metodi e funzioni (elencati di seguito) nel modulo noise .

    • NoiseModel.from_backend() e noise.device.basic_device_gate_errors()
    • kraus_error(), mixed_unitary_error(), pauli_error() e depolarizing_error() in noise.errors.standard_errors
    • QuantumError.__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 QuantumError ha abbandonato il supporto del deprecato input di tipo json per l'argomento noise_ops . Utilizzate invece il nuovo input styple per l'argomento noise_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: Utilizzare QuantumCircuit per definire invece noise_ops .
    • atol: Utilizzare invece l'attributo QuantumError.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 in standard_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() e reset_operators()) e le classi (NoiseTransformer) del modulo utils.noise_transformation sono state rimosse e non sono disponibili alternative. Si trattava infatti di funzioni/classi private utilizzate solo per implementare approximate_quantum_error() e non avrebbero dovuto essere pubbliche.

  • Il nome dell'argomento qobj , precedentemente deprecato, del metodo AerSimulator e PulseSimulator delle classi run() è stato rimosso. Questo nome di argomento è stato deprecato con il rilascio di Qiskit Aer 0.8.0 ed è stato sostituito dai nomi di argomento circuits e schedules rispettivamente.

  • setup.py di Aer è stato aggiornato per non tentare più di effettuare chiamate a pip per installare i requisiti di compilazione, sia manualmente che tramite l'opzione setup_requires di setuptools.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.py non 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 backend PulseSimulator per 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 backend PulseSimulator .

  • Il metodo qobj() della classe AerJob è ora deprecato e sarà rimosso in una prossima versione. L'uso del formato qobj come input di run() è stato deprecato da qiskit-aer 0.9.0 e nella maggior parte dei casi questo metodo restituisce comunque None . Se si desidera ottenere ora l'input del metodo run() , è possibile utilizzare il metodo circuits() , che restituirà gli oggetti QuantumCircuit che sono stati simulati nel lavoro.

  • Un argomento warnings ampiamente utilizzato in diversi metodi e funzioni del modulo noise è stato deprecato a favore dell'uso delle funzioni di filtraggio della libreria standard Python 's warnings .

Correzioni di bug

  • È stato risolto un problema durante la creazione di una nuova istanza di AerStatevector da un numpy.ndarray che aveva memoria non contigua. In precedenza, questo comportava un comportamento inatteso (e un potenziale errore), poiché AerStatevector presupponeva che l'array di input fosse contiguo. Questo problema è stato risolto in modo che il layout della memoria venga controllato e che numpy.ndarray venga copiato internamente come array contiguo prima di essere utilizzato.

  • È stato risolto un problema con la classe Sampler che in precedenza falliva se l'ingresso QuantumCircuit conteneva 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 oggetto AerSimulator ) 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 AerSimulator con i metodi:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    ora segnalano che supportano le istruzioni break_loop e continue_loop quando vengono utilizzate come backend per la funzione Terra transpile() 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.

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