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:
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:
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 specificaretargeto altre opzioni di backend. Allo stesso modo, se si specificatarget, non è necessario specificarebackendo 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 esempiocoupling_map, essa sovrascrive le impostazioni dibackend.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 dibackend.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, eseguirebackend.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èNonee 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']. SeNone, 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. SeNone, viene utilizzatoinstruction_schedule_mapdella 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 opzionaleHLSConfigche viene passata direttamente al passaggio di trasformazioneHighLevelSynthesis. 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 eseguendolist_stage_plugins()coninitcome argomento del nome dello stage.unitary_synthesis_method(str) - Il nome del metodo di sintesi unitaria da utilizzare. Per impostazione predefinita, viene utilizzatodefault. È possibile vedere l'elenco dei plugin installati eseguendounitary_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'argomentounitary_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 icoupling_mapvincoli, 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,sabreetrivial). Può anche essere il nome del plugin esterno da usare per lo stage di layout. Si può vedere l'elenco dei plugin installati eseguendolist_stage_plugins()conlayoutcome argomentostage_name. Il valore predefinito èsabre.
routing_method(str) - Nome del passaggio di instradamento (basic,lookahead,default,sabre, onone). Questo può anche essere il nome del plugin esterno da usare per lo stadio di routing. Si può vedere l'elenco dei plugin installati eseguendolist_stage_plugins()conroutingcome argomentostage_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 eseguendolist_stage_plugins()contranslationcome argomentostage_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. SpecificandoNonesi 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 eseguendolist_stage_plugins()conoptimizationcome argomentostage_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 eseguendolist_stage_plugins()conschedulingcome argomentostage_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.
- 'as_soon_as\possible': Programma le istruzioni in modo avido, il più presto possibile su una risorsa di qubit (alias:
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
- Imparare a impostare il livello di ottimizzazione.
- Rivedere altri parametri comunemente utilizzati.
- Scopri come impostare il livello di ottimizzazione.
- Consulta l'argomento "Transpile con gestori di pass".
- Per alcuni esempi, consultare Rappresentazione dei computer quantistici.
- Scopri come traspilare i circuiti nell'ambito del flusso di lavoro dei modelli di Qiskit.
- Consultare la documentazione dell'API Transpile.