Introduzione alla transpilazione
La transpilazione è il processo di riscrittura di un circuito di input per adattarlo alla topologia di uno specifico dispositivo quantistico, ottimizzando le istruzioni del circuito per l'esecuzione su computer quantistici soggetti a rumore. Questa documentazione copre gli strumenti e i flussi di lavoro per la transpilazione locale disponibili a tutti gli utenti Qiskit. Se stai usando le primitive e ti interessano solo le opzioni di transpilazione predefinite fornite da IBM Quantum Compute Service, leggi l'argomento Tecniche di mitigazione e soppressione degli errori.
Il processo di transpilazione prende un circuito che contiene le tue istruzioni:
La transpilazione lo trasforma in modo che vengano utilizzate solo le istruzioni disponibili sul backend scelto, ottimizzando tali istruzioni per ridurre al minimo gli effetti del rumore:
Componente centrale dell'SDK Qiskit, il transpiler è progettato per modularità ed estensibilità. Il suo scopo principale è scrivere nuove trasformazioni di circuiti (note come pass del transpiler), e combinarle con altri pass esistenti, riducendo notevolmente la profondità e la complessità dei circuiti quantistici. Quali pass vengono concatenati e in quale ordine ha un effetto importante sul risultato finale. Questa pipeline è determinata dagli oggetti PassManager e StagedPassManager. Lo StagedPassManager orchestra l'esecuzione di uno o più PassManagers e determina l'ordine in cui vengono eseguiti, mentre l'oggetto PassManager è semplicemente una raccolta di uno o più pass. Pensa allo StagedPassManager come al direttore d'orchestra, ai PassManagers come alle diverse sezioni di strumenti, e agli oggetti Pass come ai singoli musicisti. In questo modo, puoi comporre circuiti quantistici efficienti per l'hardware che ti permettono di eseguire lavori su scala di utilità mantenendo il rumore gestibile.
Trovi ulteriori informazioni sulle fasi del pass manager nell'argomento Fasi del Transpiler.
Architettura del set di istruzioni
Oltre a ridurre la profondità e la complessità dei circuiti quantistici, il Transpiler è progettato per trasformare le istruzioni contenute in un dato QuantumCircuit in modo che rispettino l'Instruction Set Architecture (ISA) di un particolare backend. I circuiti conformi all'ISA contengono solo istruzioni supportate dal Target del backend, come i gate di base disponibili sull'hardware, le misurazioni, i reset e le operazioni di controllo del flusso, e rispettano i vincoli definiti dalla connettività dell'hardware, ovvero la CouplingMap del target. Quando invii un job a un backend IBM Quantum®, i circuiti devono essere conformi all'ISA del backend.
Fasi del Transpiler
La pipeline di transpilazione predefinita di Qiskit è composta da sei fasi fondamentali:
-
init— Questo pass esegue tutti i pass iniziali necessari prima che il circuito possa essere incorporato. In genere questo comporta lo srotolamento delle istruzioni personalizzate e la conversione del circuito in gate a uno e due qubit. Per impostazione predefinita, convalida le istruzioni del circuito e traduce i gate a più qubit in gate a uno e due qubit. -
layout— Questo pass applica un layout, mappando i qubit virtuali del tuo circuito sui qubit fisici della QPU. -
routing— Questo pass viene eseguito dopo l'applicazione di un layout e inserisce gate aggiuntivi (cioè SWAP) nel circuito originale per renderlo compatibile con la connettività della QPU (coupling map). -
translation— Questo pass traduce i gate del circuito nel set di istruzioni di base della QPU. -
optimization— Questo pass esegue un ciclo di ottimizzazione per trovare decomposizioni più efficienti del circuito quantistico fino al raggiungimento di una condizione (ad esempio una profondità fissa). -
scheduling— Questa fase è dedicata ai pass di scheduling consapevoli dell'hardware. Se l'utente specifica un metodo di scheduling, questa fase tiene conto di tutti i tempi di inattività nel circuito.
Se personalizzi un flusso di lavoro di transpilazione, usa queste fasi come linea guida durante lo sviluppo.
Transpilare con i pass manager
Il modo consigliato per transpilare un circuito è creare uno staged pass manager e poi eseguire il suo metodo run con il tuo circuito come input. Puoi usare la funzione generate_preset_pass_manager per generare uno staged pass manager con impostazioni predefinite ragionevoli.
Gli utenti più avanzati possono personalizzare un insieme di oggetti PassManager e StagedPassManager e determinare l'ordine in cui ogni fase viene eseguita. Questo può cambiare drasticamente il circuito di output finale. In effetti, un approccio personalizzato alla transpilazione di un algoritmo quantistico spesso produce una soppressione degli errori più efficiente rispetto all'approccio predefinito. Un approccio personalizzato prevede la riscrittura dei circuiti quantistici per soddisfare i vincoli hardware e sopprimere gli effetti del rumore. Il flusso logico di questa catena di strumenti è personalizzabile e non deve essere necessariamente lineare. Il processo di transpilazione può includere cicli iterativi, rami condizionali e altri comportamenti complessi. Un buon punto di partenza nello sviluppo di un insieme di pass personalizzati è esaminare la sequenza di trasformazioni predefinita.
Per una panoramica della transpilazione con i pass manager, consulta Transpilare con i pass manager.
Transpilazione predefinita
Per un utilizzo più semplice, ma meno personalizzabile, del Transpiler "pronto all'uso", usa la funzione qiskit.compiler.transpile. Questa funzione genera ed esegue uno dei StagedPassManager preimpostati basandosi, tra le altre opzioni, su un flag optimization_level che può essere impostato su 0, 1, 2 o 3. I livelli più alti generano circuiti più ottimizzati a scapito di tempi di transpilazione più lunghi.
Passi successivi
- Per imparare a usare la funzione
generate_preset_passmanager, inizia con l'argomento Impostazioni predefinite e opzioni di configurazione della transpilazione. - Continua ad approfondire la transpilazione con l'argomento Fasi del Transpiler.
- Prova la guida Confronta le impostazioni del Transpiler.
- Prova un esempio end-to-end che usa circuiti transpilati nel tutorial Stima dell'energia dello stato fondamentale della catena di Heisenberg con VQE.
- Consulta la documentazione API di Transpile.
- Scopri come transpilare i circuiti.