Note di rilascio di Qiskit 0.30
0.30.1
Terra 0.18.3
Preludio
Questa release di bugfix corregge alcuni problemi minori in 0.18, tra cui una regressione delle prestazioni in assemble quando si ha a che fare con l'esecuzione di oggetti QuantumCircuit su backend abilitati agli impulsi.
Correzioni di bug
- Corretto il problema #7004 per cui veniva sollevato
AttributeErrorquando si eseguivaScheduleBlocksu un backend a impulsi. Questi blocchi sono ora trattati correttamente come lavori a impulsi, comeSchedule. - Corretto un problema che causava un errore quando si legava un valore di parametro complesso al coefficiente di un operatore. I calchi a
floatinPrimitiveOpsono stati generalizzati a calchi incomplexse necessario, ma rimarrannofloatse non c'è una componente immaginaria. Correzioni #6976. - Aggiornare gli errori dei gate a 1 qubit in
plot_error_mapper utilizzare il gate sx invece del gate u2, coerentemente con i backend IBMQ.
Aer 0.9.0
Nessuna modifica
Ignis 0.6.0
Nessuna modifica
Acqua 0.9.5
Nessuna modifica
IBM Q Fornitore 0.16.0
Nessuna modifica
0.30.0
Terra 0.18.2
Nessuna modifica
Aer 0.9.0
Preludio
La versione 0.9 include nuove opzioni di backend per l'eseuzione parallela di un gran numero di circuiti su un cluster HPC utilizzando una distribuzione Dask, oltre ad altri miglioramenti generali delle prestazioni e correzioni di bug.
Nuove funzioni
-
Aggiunto il supporto per set_matrix_product_state.
-
Aggiungere la libreria qiskit
SXdgGateeCUGatealle porte di base supportate per i backend del simulatore Aer. Si noti che ilCUGateè supportato in modo nativo solo per i metodistatevectoreunitary. Per altri metodi di simulazione deve essere trasposta nelle porte di base supportate per quel metodo. -
Aggiunge il supporto per la porta di Pauli a N-qubit (
qiskit.circuit.library.generalized_gates.PauliGate) a tutti i metodi di simulazione diAerSimulatoreQasmSimulator. -
Aggiunge la possibilità di impostare un esecutore personalizzato e di configurare la suddivisione dei lavori per l'esecuzione di più circuiti in parallelo su un cluster HPC. L'opzione
executorconsente di impostare un esecutore personalizzato, mentre l'opzionemax_job_sizeconsente di configurare la suddivisione dei lavori.Ad esempio, la configurazione di un backend e l'esecuzione utilizzando
backend = AerSimulator(max_job_size=1, executor=custom_executor) job = backend.run(circuits)dividerà l'estrazione in più lavori, ciascuno contenente un singolo circuito. Se la suddivisione dei lavori è abilitata, il metodo
runrestituirà un oggettoAerJobSetcontenente tutte le singole classiAerJob. Al termine dell'esecuzione di tutti i singoli lavori, i risultati vengono automaticamente combinati in un unico oggetto Result, restituito dajob.result().Gli esecutori supportati sono quelli del modulo Python
concurrent.futures(ad esempioThreadPoolExecutor,ProcessPoolExecutor) e gli esecutori del client distribuito Dask se è installata la libreria opzionale dask. L'uso di un esecutore Dask consente di configurare l'esecuzione parallela di più circuiti su cluster HPC. -
Aggiunge la possibilità di registrare i dati di registrazione per il metodo di simulazione
matrix_product_statenei metadati dei risultati dell'esperimento, impostando l'opzione backendmps_log_data=True. I dati salvati includono le dimensioni del legame e il valore scartato (la somma dei quadrati dei coefficienti di Schmidt scartati per approssimazione) dopo ogni istruzione circuitale rilevante. -
Il metodo
run()per i metodiAerSimulator,QasmSimulator,StatevectorSimulatoreUnitarySimulatorha un nuovo kwarg,parameter_binds, che viene utilizzato per fornire un elenco di valori da utilizzare per qualsiasi parametro non vincolato nel circuito in entrata. Ad esempio:from qiskit.circuit import QuantumCircuit, Parameter from qiskit.providers.aer import AerSimulator shots = 1000 backend = AerSimulator() circuit = QuantumCircuit(2) theta = Parameter('theta') circuit.rx(theta, 0) circuit.cx(0, 1) circuit.measure_all() parameter_binds = [{theta: [0, 3.14, 6.28]}] backend.run(circuit, shots=shots, parameter_binds=parameter_binds).result()eseguirà il circuito di ingresso 3 volte con i valori 0, 3.14 e 6.28 per il theta. Quando si esegue con più parametri, la lunghezza degli elenchi di valori deve essere la stessa. Quando si esegue con più circuiti, la lunghezza di
parameter_bindsdeve corrispondere al numero di circuiti di ingresso (si può usare un dict vuoto,{}, se non ci sono vincoli per un circuito). -
Il sito
PulseSimulatorpuò ora prendereQuantumCircuitoggetti surun(). In precedenza, accettava solo gli oggettiSchedulecome input arun(). Quando un circuito o un elenco di circuiti viene passato al simulatore, quest'ultimo chiameràschedule()per convertire i circuiti in un programma prima di eseguire il circuito. Ad esempio:from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile from qiskit.test.mock import FakeVigo from qiskit.providers.aer.backends import PulseSimulator backend = PulseSimulator.from_backend(FakeVigo()) circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() transpiled_circuit = transpile(circuit, backend) backend.run(circuit)
Problemi noti
SaveExpectationValueeSaveExpectationValueVariancesono stati disabilitati per il metodo extended_stabilizer diQasmSimulatoreAerSimulatora causa della restituzione di un valore errato per alcune componenti dell'operatore di Pauli. Per ulteriori informazioni ed esempi, consultare il documento #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227>.
Note sull'aggiornamento
- La base predefinita per la classe
NoiseModelè stata modificata da["id", "u3", "cx"]a["id", "rz", "sx", "cx"]a causa della deprecazione del metodo di circuitou3in qiskit-terra e della modifica dei gate di base del backend qiskit-ibmq-provider. Per utilizzare le vecchie porte di base è possibile inizializzare un modello di rumore con porte di base personalizzate comeNoiseModel(basis_gates=["id", "u3", "cx"]). - Rimosso il kwarg
backend_optionsdal methnodrundei backend Aer, deprecato in qiskit-aer 0.7. Tutte le opzioni di esecuzione devono ora essere passate come kwarg separati. - Rimosso il passaggio di
system_modelcome argomento posizionale per il metodorundiPulseSimulator.
Note di deprecazione
- Il passaggio di un qobj assemblato direttamente al metodo
run()dei backend del simulatore Aer è stato deprecato in favore del passaggio di circuiti transpilati direttamente comebackend.run(circuits, **run_options). - Tutte le istruzioni snapshot in
qiskit.providers.aer.extensionssono state deprecate. Per la sostituzione utilizzare le istruzioni di salvataggio del moduloqiskit.providers.aer.library. - L'aggiunta di errori quantistici non locali a
NoiseModelè stata deprecata a causa di incongruenze nel modo in cui questo rumore viene applicato al circuito ottimizzato. Il rumore non locale deve essere aggiunto manualmente a un circuito programmato in Qiskit utilizzando un passaggio di transpiler personalizzato prima di essere eseguito sul simulatore. - L'uso dell'opzione
methoddei programmiStatevectorSimulatoreUnitarySimulatorper eseguire una simulazione su GPU è stato deprecato. Per eseguire una simulazione GPU su un sistema compatibile, utilizzare invece l'opzionedevice='GPU'.
Correzioni di bug
- Corregge un problema di prestazioni legato all'impostazione dell'attributo di configurazione
basis_gates. In precedenza si verificavano effetti collaterali indesiderati per la classe backend che potevano causare un aumento del tempo di esecuzione della simulazione ripetuta. Per ulteriori informazioni ed esempi, consultare il documento #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229>. - Corretto il bug in MPS::apply_kraus. Dopo aver applicato la matrice di kraus ai qubit interessati, dobbiamo propagare le modifiche ai qubit vicini.
- Corregge un bug per cui qiskit-terra assume che i qubit in un gate multiplexer siano prima i target e poi i controlli del gate, mentre qiskit-aer assume l'ordine opposto.
- Corregge un bug introdotto in 0.8.0 per cui le simulazioni su GPU allocavano memoria host non necessaria in aggiunta alla memoria della GPU.
- Corregge il bug per cui l'istruzione initialize disabilitava l'ottimizzazione del campionamento delle misure per i metodi di simulazione di stato statevector e matrix product, anche quando era la prima istruzione del circuito o applicata a tutti i qubit e quindi deterministica.
- Correggere il problema #1196 utilizzando i prodotti interni con gli stati base computazionali per calcolare la norma anziché l'algoritmo di stima della norma.
- Corregge un errore nel metodo di simulazione
stabilizerdiQasmSimulatoreAerSimulatorper cui il valore di aspettativa persave_expectation_valueesnapshot_expectation_valuepoteva avere un segno errato per alcuniYPauli. - Corregge il bug per cui, se la memoria richiesta è inferiore alla memoria di sistema, il metodo di simulazione multi-chunk era abilitato e la simulazione veniva comunque avviata. In questo caso verrà lanciata un'eccezione di memoria insufficiente.
- Corregge un problema per cui impostando l'opzione
shotsper un backend conset_options(shots=k)veniva sempre eseguito il numero di colpi predefinito (1024) anziché il valore specificato. - Corregge un bug nel modo in cui
AerSimulatorgestiva il valore dell'opzione permax_parallel_experiments=1. In precedenza questo aspetto era trattato alla stregua dimax_parallel_experiments=0. - Corregge un bug nel metodo di simulazione
extended_stabilizerche trattava erroneamente le istruzioni qelay gate e Pauli multi-qubit come non supportate. - Corregge un errore di battitura nelle opzioni
AerSimulatoreQasmSimulatorper l'opzioneextended_stabilizer_norm_estimation_repetitions. - Corregge un bug nell'applicazione del gate
unitaryutilizzando il metodo di simulazionematrix_product_stateche non supportava correttamente le permutazioni nell'ordinamento dei qubit su cui viene applicato il gate. - Corregge un problema per cui la fusione dei gate poteva essere abilitata per il metodo di simulazione
matrix_product_stateanche se non è supportata. Ora la fusione è sempre disabilitata per questo metodo. - Corretto un bug nel metodo di simulazione
matrix_product_statenel calcolo della normalizzazione in seguito al troncamento dei coefficienti di Schmidt dopo l'esecuzione della SVD.
Altre note
- Migliora le prestazioni dell'algoritmo di campionamento delle misure per il metodo di simulazione
matrix_product_state. Il nuovo comportamento predefinito prevede di campionare sempre con il metodo miglioratomps_apply_measure. Il metodo di campionamentomps_probabilitiespuò essere ancora utilizzato impostando il valore dell'opzione personalizzatamps_sample_measure_algorithm="mps_probabilities".
Ignis 0.6.0
Nessuna modifica
Acqua 0.9.5
Nessuna modifica
IBM Q Fornitore 0.16.0
Nessuna modifica