Skip to main content
IBM Quantum Platform

Impostazioni predefinite di transpilation e opzioni di configurazione

  • Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.

    qiskit[all]~=2.5.1
    qiskit-ibm-runtime~=0.47.0
    

I circuiti astratti devono essere transpilati perché le QPU hanno un insieme limitato di porte di base e non possono eseguire operazioni arbitrarie. La funzione del transpiler è quella di modificare circuiti arbitrari in modo che possano essere eseguiti su una specifica QPU. Ciò avviene traducendo i circuiti nelle porte di base supportate e introducendo le porte SWAP come necessario, in modo che la connettività del circuito corrisponda a quella della QPU.

Come spiegato in Transpile con i gestori di pass, è possibile creare un gestore di pass utilizzando la funzione generate_preset_pass_manager e passare un circuito o un elenco di circuiti al suo metodo di esecuzione per eseguire la transpilazione. Si può chiamare generate_preset_pass_manager passando solo il livello di ottimizzazione e il backend, scegliendo di usare i valori predefiniti per tutte le altre opzioni, oppure si possono passare argomenti aggiuntivi alla funzione per affinare la trasposizione.


Utilizzo di base senza parametri

In questo esempio, passiamo al transpiler un circuito e una QPU di destinazione senza specificare altri parametri.

Creare un circuito e visualizzare il risultato:

from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke

# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))

# Add measurements to the circuit
qc.measure_all()

# View the circuit
qc.draw(output="mpl")

Output:

Output of the previous code cell

Transpilare il circuito e visualizzare il risultato:

from qiskit.transpiler import generate_preset_pass_manager

# Specify the QPU to target
backend = FakeSherbrooke()

# Transpile the circuit
pass_manager = generate_preset_pass_manager(
    optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)

# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)

Output:

Output of the previous code cell

Tutti i parametri disponibili

Di seguito sono riportati tutti i parametri disponibili per la funzione generate_preset_pass_manager della funzione. Esistono due classi di argomenti: quelli che descrivono l'obiettivo della compilazione e quelli che influenzano il funzionamento del transpiler.

Tutti i parametri, tranne optimization_level , sono facoltativi. Per maggiori dettagli, consultare la documentazione dell'API Transpiler.

  • optimization_level (int) - Quantità di ottimizzazione da eseguire sui circuiti. Numero intero nell'intervallo (0 - 3). Livelli più alti generano circuiti più ottimizzati, a scapito di un tempo di trasposizione più lungo. Per maggiori dettagli, vedere Impostare il livello di ottimizzazione del transpiler.

Parametri utilizzati per descrivere l'obiettivo della compilazione:

Questi argomenti descrivono la QPU di destinazione per l'esecuzione del circuito, includendo informazioni come la mappa di accoppiamento della QPU (che descrive la connettività dei qubit), le porte di base supportate dalla QPU e i tassi di errore delle porte.

Molti di questi parametri sono descritti in dettaglio in Parametri comunemente usati per la transpilazione.

  • Parametri di backend - Se si specifica backend, non è necessario specificare target o altre opzioni di backend. Allo stesso modo, se si specifica target, non è necessario specificare backend o altre opzioni di backend.

    • backend (Backend) - Se è impostato, il transpiler compila il circuito di ingresso su questo dispositivo. Se viene impostata un'altra opzione che influisce su queste impostazioni, come ad esempio coupling_map, essa sovrascrive le impostazioni di backend.
    • target (Target) - Un target del backend transpiler. Normalmente viene specificato come parte dell'argomento backend, ma se si è costruito manualmente un oggetto Target, è possibile specificarlo qui. Questo sostituisce l'obiettivo di backend.
    • backend_properties ( BackendProperties ) - Proprietà restituite da una QPU, comprese le informazioni sugli errori di gate, gli errori di lettura, i tempi di coerenza dei qubit e così via. Per trovare una QPU che fornisca queste informazioni, eseguire backend.properties().
    • timing_constraints (Dictstr[, int] | None) - Una restrizione hardware di controllo opzionale sulla risoluzione temporale delle istruzioni. Queste informazioni sono fornite dalla configurazione della QPU. Se la QPU non ha alcuna restrizione sull'allocazione del tempo di istruzione, timing_constraints è None e non viene eseguita alcuna regolazione. Una QPU potrebbe riferire una serie di restrizioni, in particolare:
      • granularity: Un valore intero che rappresenta la risoluzione minima del gate degli impulsi in unità di dt. Un gate a impulsi definito dall'utente deve avere una durata che sia un multiplo di questo valore di granularità.
      • min_length: Un valore intero che rappresenta la lunghezza minima del gate dell'impulso in unità di dt. Un gate di impulsi definito dall'utente dovrebbe essere più lungo di questa lunghezza.
      • pulse_alignment: Un valore intero che rappresenta la risoluzione temporale dell'ora di inizio dell'istruzione del gate. Le istruzioni del gate devono iniziare in un momento che è un multiplo di questo valore.
      • acquire_alignment: Un valore intero che rappresenta la risoluzione temporale dell'ora di inizio dell'istruzione di misura. L'istruzione di misura deve iniziare in un momento che è un multiplo di questo valore.
    • basis_gates ( [Liststr] | None) - Elenco dei nomi delle porte di base a cui eseguire lo scorrimento. Ad esempio [' u1 ', ' u2 ', ' u3 ', 'cx']. Se None, non srotolare.
    • coupling_map ( CouplingMap | List[ [Listint] ]) - Mappa di accoppiamento diretto (eventualmente personalizzata) con l'obiettivo nella mappatura. Se la mappa di accoppiamento è simmetrica, è necessario specificare entrambe le direzioni. Sono supportati i seguenti formati:
      • CouplingMap istanza
      • Elenco - deve essere fornito come matrice di adiacenza, dove ogni voce specifica tutte le interazioni dirette a due qubit supportate dalla QPU. Ad esempio: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3] ]
    • inst_map ( [ListInstructionScheduleMap] | None) - Mappatura delle operazioni del circuito con le pianificazioni degli impulsi. Se None, viene utilizzato instruction_schedule_map della QPU.

Parametri utilizzati per influenzare il funzionamento del transpiler

Questi parametri hanno un impatto su specifiche fasi di traspirazione. Alcuni di essi potrebbero avere un impatto su più fasi, ma per semplicità sono stati elencati in una sola fase. Se si specifica un argomento, come ad esempio initial_layout per i qubit che si desidera utilizzare, tale valore sovrascrive tutti i passaggi che potrebbero modificarlo. In altre parole, il transpiler non modificherà nulla di quanto specificato manualmente. Per informazioni su fasi specifiche, vedere Fasi del transpiler.

    • hls_config (HLSConfig) - Una classe di configurazione opzionale HLSConfig che viene passata direttamente al passaggio di trasformazione HighLevelSynthesis . Questa classe di configurazione consente di specificare gli elenchi di algoritmi di sintesi e i loro parametri per vari oggetti di alto livello.
    • init_method (str) - Il nome del plugin da usare per la fase di inizializzazione. Per impostazione predefinita, un plugin esterno non viene utilizzato. È possibile vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con init come argomento del nome dello stage.
    • unitary_synthesis_method (str) - Il nome del metodo di sintesi unitaria da utilizzare. Per impostazione predefinita, viene utilizzato default . È possibile vedere l'elenco dei plugin installati eseguendo unitary_synthesis_plugin_names().
    • unitary_synthesis_plugin_config (dict) - Un dizionario di configurazione opzionale che viene passato direttamente al plugin di sintesi unitaria. Per impostazione predefinita, questa impostazione non ha alcun effetto perché il metodo di sintesi unitario predefinito non richiede una configurazione personalizzata. L'applicazione di una configurazione personalizzata dovrebbe essere necessaria solo quando viene specificato un plugin di sintesi unitaria con l'argomento unitary_synthesis . Poiché questa opzione è personalizzata per ogni plugin di sintesi unitaria, si rimanda alla documentazione del plugin per sapere come utilizzarla.
    • initial_layout (Layout | Dict | List) - Posizione iniziale dei qubit virtuali sui qubit fisici. Se questo layout rende il circuito compatibile con i coupling_map vincoli, verrà utilizzato. Il layout finale non è garantito essere lo stesso, poiché il transpiler potrebbe permutare i qubit tramite scambi o altri mezzi. Per tutti i dettagli, consultare la sezione Layout iniziale.
    • layout_method (str) - Nome del passaggio di selezione del layout (default, dense, sabre e trivial). Può anche essere il nome del plugin esterno da usare per lo stage di layout. Si può vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con layout come argomento stage_name . Il valore predefinito è sabre.
    • routing_method (str) - Nome del passaggio di instradamento (basic, lookahead, default, sabre, o none). Questo può anche essere il nome del plugin esterno da usare per lo stadio di routing. Si può vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con routing come argomento stage_name . Il valore predefinito è sabre.
    • translation_method (str) - Nome del passaggio di traduzione (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional) Questo può anche essere il nome del plugin esterno da usare per la fase di traduzione. Si può vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con translation come argomento stage_name . Il valore predefinito è translator.
    • approximation_degree (float, nell'intervallo 0-1 | Nessuno) - Quadrante euristico usato per l'approssimazione del circuito ( 1.0 = nessuna approssimazione, 0.0 = approssimazione massima). Il valore predefinito è 1.0. Specificando None si imposta il grado di approssimazione al tasso di errore riportato. Per maggiori dettagli, consultare la sezione Grado di approssimazione.
    • optimization_method (str) - Il nome del plugin da usare per la fase di ottimizzazione. Per impostazione predefinita, non viene utilizzato un plugin esterno. Si può vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con optimization come argomento stage_name .
    • scheduling_method (str) - Nome del passaggio di pianificazione. Può anche essere il nome del plugin esterno da utilizzare per la fase di pianificazione. Si può vedere l'elenco dei plugin installati eseguendo list_stage_plugins() con scheduling come argomento stage_name .
      • 'as_soon_as\possible': Programma le istruzioni in modo avido, il più presto possibile su una risorsa di qubit (alias: asap).
      • 'as_late_as\possible': Programma le istruzioni in ritardo, cioè mantenendo i qubit nello stato di massa quando possibile (alias: alap). Questo è il valore predefinito.
    • seed_transpiler (int) - Imposta i semi casuali per le parti stocastiche del transpiler.

Se non si specifica alcun parametro, vengono utilizzati i seguenti valori predefiniti. Per ulteriori informazioni, consultare la pagina di riferimento dell'API del metodo:

generate_preset_pass_manager(
    optimization_level=1,
    backend=None,
    target=None,
    basis_gates=None,
    coupling_map=None,
    initial_layout=None,
    layout_method=None,
    routing_method=None,
    translation_method=None,
    scheduling_method=None,
    approximation_degree=1.0,
    seed_transpiler=None,
    unitary_synthesis_method="default",
    unitary_synthesis_plugin_config=None,
    hls_config=None,
    init_method=None,
    optimization_method=None,
)

Output:

<qiskit.transpiler.passmanager.StagedPassManager at 0x7f1b3d2d0c90>

Passi successivi

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