Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

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")

Output della cella di codice precedente

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)

Output della cella di codice precedente

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, come coupling_map, questa sovrascrive le impostazioni di backend.
  • 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 di backend.
  • 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 eseguendo backend.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 è None e 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']. Se None, 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. Se None, viene usato instruction_schedule_map del 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 opzionale HLSConfig che viene passata direttamente al pass di trasformazione HighLevelSynthesis. 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 eseguendo list_stage_plugins() con init come argomento del nome della fase.

  • unitary_synthesis_method (str) - Il nome del metodo di sintesi unitaria da usare. Per impostazione predefinita viene usato default. Puoi vedere la lista 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 unitaria predefinito non accetta configurazioni personalizzate. Applicare una configurazione personalizzata dovrebbe essere necessario solo quando viene specificato un plugin di sintesi unitaria con l'argomento unitary_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 della coupling_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, sabre e trivial). Può anche essere il nome del plugin esterno da usare per la fase di layout. Puoi vedere un elenco dei plugin installati eseguendo list_stage_plugins() con layout come argomento stage_name. Il valore predefinito è sabre.

Fase di routing
  • routing_method (str) - Nome del pass di routing (basic, lookahead, default, sabre o none). Può anche essere il nome del plugin esterno da usare per la fase di routing. Puoi vedere un elenco dei plugin installati eseguendo list_stage_plugins() con routing come argomento stage_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 eseguendo list_stage_plugins() con translation come argomento stage_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. Specificando None il 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 eseguendo list_stage_plugins() con optimization come argomento stage_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 eseguendo list_stage_plugins() con scheduling come argomento stage_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​

Raccomandazioni