Impostazioni predefinite e opzioni di configurazione della transpilazione
Versioni dei pacchetti
Il codice presente in questa pagina è stato sviluppato con i seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
I circuiti astratti devono essere transpilati perché le QPU dispongono di un insieme limitato di gate di base e non possono eseguire operazioni arbitrarie. La funzione del transpilatore è trasformare circuiti arbitrari in modo che possano essere eseguiti su una QPU specificata. Questo avviene traducendo i circuiti nei gate di base supportati e introducendo gate SWAP dove necessario, affinché la connettività del circuito corrisponda a quella della QPU.
Come spiegato in Transpilare con i pass manager, puoi creare un pass manager usando la funzione generate_preset_pass_manager e passare un circuito o una lista di circuiti al suo metodo run per transpilarli. Puoi chiamare generate_preset_pass_manager specificando solo il livello di ottimizzazione e il backend, scegliendo di utilizzare i valori predefiniti per tutte le altre opzioni, oppure puoi passare argomenti aggiuntivi alla funzione per regolare con precisione la transpilazione.
Utilizzo di base senza parametri
In questo esempio, passiamo un circuito e la QPU di destinazione al transpilatore senza specificare ulteriori parametri.
Crea un circuito e visualizza il risultato:
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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")
Transpila il circuito e visualizza 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)
Tutti i parametri disponibili
Di seguito sono elencati tutti i parametri disponibili per la funzione generate_preset_pass_manager. Esistono due categorie di argomenti: quelli che descrivono la destinazione della compilazione e quelli che influenzano il funzionamento del transpilatore.
Tutti i parametri tranne optimization_level sono opzionali. Per i dettagli completi, consulta la documentazione API del Transpiler.
optimization_level(int) - Quanta ottimizzazione eseguire sui circuiti. Intero nell'intervallo (0 - 3). Livelli più alti generano circuiti più ottimizzati, a scapito di tempi di transpilazione più lunghi. Vedi Impostare il livello di ottimizzazione del transpilatore per ulteriori dettagli.
Parametri usati per descrivere la destinazione di compilazione:
Questi argomenti descrivono la QPU di destinazione per l'esecuzione del circuito, incluse informazioni come la coupling map della QPU (che descrive la connettività dei qubit), i gate di base supportati dalla QPU e i tassi di errore dei gate.
Molti di questi parametri sono descritti in dettaglio in Parametri comunemente usati per la transpilazione.
Parametri QPU (`Backend`)
Parametri del Backend - Se specifichi backend, non è necessario specificare target o altre opzioni del backend. Allo stesso modo, se specifichi target, non è necessario specificare backend o altre opzioni del backend.
backend(Backend) - Se impostato, il Transpiler compila il circuito di input per questo dispositivo. Se viene impostata un'altra opzione che influisce su queste impostazioni, comecoupling_map, questa sovrascrive le impostazioni dibackend.target(Target) - Un target del Transpiler per il backend. Normalmente viene specificato come parte dell'argomento backend, ma se hai costruito manualmente un oggetto Target, puoi specificarlo qui. Questo sovrascrive il target dibackend.backend_properties(BackendProperties) - Proprietà restituite da un QPU, comprese informazioni su errori di Gate, errori di lettura, tempi di coerenza dei Qubit e così via. Trova un QPU che fornisce queste informazioni eseguendobackend.properties().timing_constraints(Dict[str, int] | None) - Una restrizione hardware di controllo opzionale sulla risoluzione temporale delle istruzioni. Questa informazione è fornita dalla configurazione del QPU. Se il QPU non ha restrizioni sull'allocazione del tempo delle istruzioni,timing_constraintsèNonee non viene eseguita alcuna regolazione. Un QPU potrebbe segnalare una serie di restrizioni, ossia:granularity: Un valore intero che rappresenta la risoluzione minima del Gate a impulsi in unità di dt. Un Gate a impulsi definito dall'utente dovrebbe avere una durata multipla di questo valore di granularità.min_length: Un valore intero che rappresenta la lunghezza minima del Gate a impulsi in unità di dt. Un Gate a impulsi definito dall'utente dovrebbe essere più lungo di questa lunghezza.pulse_alignment: Un valore intero che rappresenta una risoluzione temporale dell'orario di inizio dell'istruzione Gate. Le istruzioni Gate dovrebbero iniziare in un momento che sia multiplo di questo valore.acquire_alignment: Un valore intero che rappresenta una risoluzione temporale dell'orario di inizio dell'istruzione di misura. L'istruzione di misura dovrebbe iniziare in un momento che sia multiplo di questo valore.
Parametri di layout e topologia
-
basis_gates(List[str] | None) - Lista dei nomi dei gate di base a cui decomporre. Ad esempio ['u1', 'u2', 'u3', 'cx']. SeNone, non viene eseguita alcuna decomposizione. -
coupling_map(CouplingMap | List[List[int]]) - Coupling map orientata (eventualmente personalizzata) da usare come destinazione nel mapping. Se la coupling map è simmetrica, devono essere specificate entrambe le direzioni. Sono supportati i seguenti formati:-
Istanza di CouplingMap
-
List - deve essere fornita come matrice di adiacenza, dove ogni voce specifica tutte le interazioni orientate a due qubit supportate dalla QPU. Ad esempio: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
-
-
inst_map(List[InstructionScheduleMap] | None) - Mappatura delle operazioni del circuito verso gli schedule di impulsi. SeNone, viene usatoinstruction_schedule_mapdel QPU.
Parametri usati per influenzare il funzionamento del transpilatore
Questi parametri influenzano specifiche fasi della transpilazione. Alcuni di essi potrebbero influenzare più fasi, ma sono elencati sotto una sola fase per semplicità. Se specifichi un argomento, come initial_layout per i qubit che vuoi usare, quel valore sovrascrive tutti i pass che potrebbero modificarlo. In altre parole, il transpilatore non modificherà nulla che tu abbia specificato manualmente. Per i dettagli sulle singole fasi, vedi Fasi del transpilatore.
Fase di inizializzazione
-
hls_config(HLSConfig) - Una classe di configurazione opzionaleHLSConfigche viene passata direttamente al pass di trasformazioneHighLevelSynthesis. Questa classe di configurazione ti permette di specificare le liste 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, non viene usato un plugin esterno. Puoi vedere la lista dei plugin installati eseguendolist_stage_plugins()coninitcome argomento del nome della fase. -
unitary_synthesis_method(str) - Il nome del metodo di sintesi unitaria da usare. Per impostazione predefinita viene usatodefault. Puoi vedere la lista 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 unitaria predefinito non accetta configurazioni personalizzate. Applicare una configurazione personalizzata dovrebbe essere necessario solo quando viene specificato un plugin di sintesi unitaria con l'argomentounitary_synthesis. Poiché questa configurazione è personalizzata per ogni plugin di sintesi unitaria, consulta la documentazione del plugin per sapere come usare questa opzione.
Fase di layout
-
initial_layout(Layout | Dict | List) - Posizione iniziale dei qubit virtuali sui qubit fisici. Se questo layout rende il circuito compatibile con i vincoli dellacoupling_map, verrà usato. Non è garantito che il layout finale sia lo stesso, poiché il transpilatore potrebbe permutare i qubit tramite SWAP o altri mezzi. Per i dettagli completi, vedi la sezione Initial layout. -
layout_method(str) - Nome del pass di selezione del layout (default,dense,sabreetrivial). Può anche essere il nome del plugin esterno da usare per la fase di layout. Puoi vedere un elenco dei plugin installati eseguendolist_stage_plugins()conlayoutcome argomentostage_name. Il valore predefinito èsabre.
Fase di routing
routing_method(str) - Nome del pass di routing (basic,lookahead,default,sabreonone). Può anche essere il nome del plugin esterno da usare per la fase di routing. Puoi vedere un elenco dei plugin installati eseguendolist_stage_plugins()conroutingcome argomentostage_name. Il valore predefinito èsabre.
Fase di traduzione
translation_method(str) - Nome del pass di traduzione (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional) Può anche essere il nome del plugin esterno da usare per la fase di traduzione. Puoi vedere un elenco dei plugin installati eseguendolist_stage_plugins()contranslationcome argomentostage_name. Il valore predefinito ètranslator.
Fase di ottimizzazione
-
approximation_degree(float, nell'intervallo 0-1 | None) - Parametro euristico usato per l'approssimazione del circuito (1.0 = nessuna approssimazione, 0.0 = approssimazione massima). Il valore predefinito è 1.0. SpecificandoNoneil grado di approssimazione viene impostato sul tasso di errore riportato. Consulta la sezione sul grado di approssimazione per maggiori dettagli. -
optimization_method(str) - Il nome del plugin da usare per la fase di ottimizzazione. Per impostazione predefinita non viene usato alcun plugin esterno. Puoi vedere un elenco dei plugin installati eseguendolist_stage_plugins()conoptimizationcome argomentostage_name.
Fase di scheduling
-
scheduling_method(str) - Nome del pass di scheduling. Può anche essere il nome del plugin esterno da usare per la fase di scheduling. Puoi vedere un elenco dei plugin installati eseguendolist_stage_plugins()conschedulingcome argomentostage_name.-
'as_soon_as_possible': Pianifica le istruzioni in modo greedy, il prima possibile su una risorsa Qubit (alias:
asap). -
'as_late_as_possible': Pianifica le istruzioni tardi, ovvero mantenendo i Qubit nello stato fondamentale quando possibile (alias:
alap). Questo è il valore predefinito.
-
Esecuzione del Transpiler
seed_transpiler(int) - Imposta i seed casuali per le parti stocastiche del Transpiler.
I seguenti valori predefiniti vengono usati se non specifichi nessuno dei parametri sopra indicati. Consulta la pagina di riferimento API del metodo per ulteriori informazioni:
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,
)
<qiskit.transpiler.passmanager.StagedPassManager at 0x1403cd250>
Passi successivi
- Scopri come Impostare il livello di ottimizzazione.
- Esamina altri Parametri comunemente usati.
- Scopri come Impostare il livello di ottimizzazione.
- Visita il topic Transpilare con i pass manager.
- Per esempi, vedi Rappresentare i computer quantistici.
- Scopri come transpilare i circuiti nell'ambito del workflow dei pattern Qiskit.
- Esamina la documentazione API del Transpiler.