Skip to main content
IBM Quantum Platform

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 AttributeError quando si eseguiva ScheduleBlock su un backend a impulsi. Questi blocchi sono ora trattati correttamente come lavori a impulsi, come Schedule.
  • Corretto un problema che causava un errore quando si legava un valore di parametro complesso al coefficiente di un operatore. I calchi a float in PrimitiveOp sono stati generalizzati a calchi in complex se necessario, ma rimarranno float se non c'è una componente immaginaria. Correzioni #6976.
  • Aggiornare gli errori dei gate a 1 qubit in plot_error_map per 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 SXdgGate e CUGate alle porte di base supportate per i backend del simulatore Aer. Si noti che il CUGate è supportato in modo nativo solo per i metodi statevector e unitary . 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 di AerSimulator e QasmSimulator.

  • 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 executor consente di impostare un esecutore personalizzato, mentre l'opzione max_job_size consente 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 run restituirà un oggetto AerJobSet contenente tutte le singole classi AerJob . Al termine dell'esecuzione di tutti i singoli lavori, i risultati vengono automaticamente combinati in un unico oggetto Result, restituito da job.result().

    Gli esecutori supportati sono quelli del modulo Python concurrent.futures (ad esempio ThreadPoolExecutor, 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_state nei metadati dei risultati dell'esperimento, impostando l'opzione backend mps_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 metodi AerSimulator, QasmSimulator, StatevectorSimulator e UnitarySimulator ha 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_binds deve corrispondere al numero di circuiti di ingresso (si può usare un dict vuoto, {}, se non ci sono vincoli per un circuito).

  • Il sito PulseSimulator può ora prendere QuantumCircuit oggetti su run(). In precedenza, accettava solo gli oggetti Schedule come input a run(). 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

  • SaveExpectationValue e SaveExpectationValueVariance sono stati disabilitati per il metodo extended_stabilizer di QasmSimulator e AerSimulator a 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 circuito u3 in 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 come NoiseModel(basis_gates=["id", "u3", "cx"]).
  • Rimosso il kwarg backend_options dal methnod run dei 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_model come argomento posizionale per il metodo run di PulseSimulator.

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 come backend.run(circuits, **run_options).
  • Tutte le istruzioni snapshot in qiskit.providers.aer.extensions sono state deprecate. Per la sostituzione utilizzare le istruzioni di salvataggio del modulo qiskit.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 method dei programmi StatevectorSimulator e UnitarySimulator per eseguire una simulazione su GPU è stato deprecato. Per eseguire una simulazione GPU su un sistema compatibile, utilizzare invece l'opzione device='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 stabilizer di QasmSimulator e AerSimulator per cui il valore di aspettativa per save_expectation_value e snapshot_expectation_value poteva avere un segno errato per alcuni Y Pauli.
  • 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 shots per un backend con set_options(shots=k) veniva sempre eseguito il numero di colpi predefinito (1024) anziché il valore specificato.
  • Corregge un bug nel modo in cui AerSimulator gestiva il valore dell'opzione per max_parallel_experiments=1. In precedenza questo aspetto era trattato alla stregua di max_parallel_experiments=0.
  • Corregge un bug nel metodo di simulazione extended_stabilizer che trattava erroneamente le istruzioni qelay gate e Pauli multi-qubit come non supportate.
  • Corregge un errore di battitura nelle opzioni AerSimulator e QasmSimulator per l'opzione extended_stabilizer_norm_estimation_repetitions .
  • Corregge un bug nell'applicazione del gate unitary utilizzando il metodo di simulazione matrix_product_state che 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_state anche se non è supportata. Ora la fusione è sempre disabilitata per questo metodo.
  • Corretto un bug nel metodo di simulazione matrix_product_state nel 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 migliorato mps_apply_measure . Il metodo di campionamento mps_probabilities può essere ancora utilizzato impostando il valore dell'opzione personalizzata mps_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

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