Výchozí nastavení transpilace a možnosti konfigurace
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto nebo novější verze.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Abstraktní Circuit je nutné transpilovat, protože QPU mají omezený soubor základních Gate a nemohou provádět libovolné operace. Funkce Transpileru spočívá v úpravě libovolných Circuit tak, aby mohly běžet na konkrétním QPU. Toho se dosahuje překladem Circuit do podporovaných základních Gate a vložením SWAP Gate podle potřeby, aby propojení Circuit odpovídalo propojení QPU.
Jak je vysvětleno v článku Transpilace s pass managery, můžeš vytvořit pass manager pomocí funkce generate_preset_pass_manager a předat Circuit nebo seznam Circuit jeho metodě run k transpilaci. Funkci generate_preset_pass_manager můžeš zavolat s pouhým uvedením úrovně optimalizace a Backend a ponechat výchozí hodnoty pro všechny ostatní možnosti, nebo jí předat další argumenty pro jemnější doladění transpilace.
Základní použití bez parametrů
V tomto příkladu předáme Circuit a cílové QPU Transpileru bez zadání jakýchkoli dalších parametrů.
Vytvoř Circuit a zobraz výsledek:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
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")
Transpiluj Circuit a zobraz výsledek:
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)
Všechny dostupné parametry
Níže jsou uvedeny všechny dostupné parametry funkce generate_preset_pass_manager. Existují dvě třídy argumentů: ty, které popisují cíl kompilace, a ty, které ovlivňují způsob práce Transpileru.
Všechny parametry kromě optimization_level jsou volitelné. Úplné podrobnosti najdeš v dokumentaci Transpiler API.
optimization_level(int) - Míra optimalizace prováděné na Circuit. Celé číslo v rozsahu (0–3). Vyšší úrovně generují optimalizovanější Circuit za cenu delší doby transpilace. Více podrobností najdeš v článku Nastavení úrovně optimalizace Transpileru.
Parametry popisující cíl kompilace
Tyto argumenty popisují cílové QPU pro spuštění Circuit, včetně informací jako je mapa propojení QPU (popisující konektivitu Qubitů), základní Gate podporované QPU a míry chyb Gate.
Mnohé z těchto parametrů jsou podrobně popsány v článku Běžně používané parametry pro transpilaci.
Parametry QPU (Backend)
Backend)Parametry Backend – Pokud zadáš backend, nemusíš zadávat target ani žádné jiné možnosti Backend. Stejně tak pokud zadáš target, nemusíš zadávat backend ani žádné jiné možnosti Backend.
backend(Backend) - Pokud je tato hodnota nastavena, Transpiler zkompiluje vstupní Circuit pro toto zařízení. Pokud je nastavena jiná možnost ovlivňující tato nastavení, napříkladcoupling_map, přepíše nastavení zbackend.target(Target) - Cíl Transpileru Backend. Obvykle se zadává jako součást argumentu backend, ale pokud jsi ručně sestavil/a objekt Target, můžeš ho zadat zde. Přepíše cíl zbackend.backend_properties(BackendProperties) - Vlastnosti vrácené QPU, včetně informací o chybách Gate, chybách čtení, dobách koherence Qubitů apod. QPU, které tyto informace poskytuje, najdeš spuštěnímbackend.properties().timing_constraints(Dict[str, int] | None) - Volitelné omezení řídicího hardwaru na rozlišení časování instrukcí. Tyto informace jsou poskytovány konfigurací QPU. Pokud QPU nemá žádné omezení na přidělování časů instrukcí, jetiming_constraintsNonea neprovádí se žádná úprava. QPU může nahlásit sadu omezení, konkrétně:granularity: Celá hodnota představující minimální rozlišení pulzní Gate v jednotkách dt. Uživatelsky definovaná pulzní Gate by měla mít dobu trvání, která je násobkem této hodnoty granularity.min_length: Celá hodnota představující minimální délku pulzní Gate v jednotkách dt. Uživatelsky definovaná pulzní Gate by měla být delší než tato délka.pulse_alignment: Celá hodnota představující časové rozlišení počátečního času Gate instrukce. Gate instrukce by měly začínat v čase, který je násobkem této hodnoty.acquire_alignment: Celá hodnota představující časové rozlišení počátečního času instrukce měření. Instrukce měření by měla začínat v čase, který je násobkem této hodnoty.
Parametry rozvržení a topologie
basis_gates(List[str] | None) - Seznam názvů základních Gate, do nichž se má rozvinout. Například ['u1', 'u2', 'u3', 'cx']. Pokud jeNone, rozvinování se neprovádí.coupling_map(CouplingMap | List[List[int]]) - Řízená mapa propojení (případně vlastní) jako cíl při mapování. Pokud je mapa propojení symetrická, je třeba zadat obě směry. Jsou podporovány tyto formáty:- Instance CouplingMap
- List – musí být zadán jako matice sousednosti, kde každý záznam specifikuje všechny podporované řízené dvouqubitové interakce QPU. Například: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Mapování operací Circuit na pulzní harmonogramy. Pokud jeNone, použije seinstruction_schedule_mapQPU.
Parametry ovlivňující způsob práce Transpileru
Tyto parametry mají vliv na konkrétní fáze transpilace. Některé z nich mohou ovlivňovat více fází, ale pro jednoduchost jsou uvedeny pouze pod jednou fází. Pokud zadáš argument, například initial_layout pro Qubit, které chceš použít, tato hodnota přepíše všechny průchody, které by ji mohly změnit. Jinými slovy, Transpiler nezmění nic, co ručně zadáš. Podrobnosti o konkrétních fázích najdeš v článku Fáze Transpileru.
Inicializační fáze
hls_config(HLSConfig) - Volitelná konfigurační třídaHLSConfig, která je předána přímo transformačnímu průchoduHighLevelSynthesis. Tato konfigurační třída ti umožňuje zadat seznamy syntézních algoritmů a jejich parametry pro různé vysokoúrovňové objekty.init_method(str) - Název pluginu pro inicializační fázi. Ve výchozím nastavení se nepoužívá žádný externí plugin. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumenteminitpro název fáze.unitary_synthesis_method(str) - Název metody unitární syntézy, která se má použít. Ve výchozím nastavení se používádefault. Seznam nainstalovaných pluginů zobrazíš spuštěnímunitary_synthesis_plugin_names().unitary_synthesis_plugin_config(dict) - Volitelný konfigurační slovník, který je předán přímo pluginu unitární syntézy. Ve výchozím nastavení toto nastavení nemá žádný účinek, protože výchozí metoda unitární syntézy nepřijímá vlastní konfiguraci. Použití vlastní konfigurace je nutné pouze tehdy, když je s argumentemunitary_synthesiszadán plugin unitární syntézy. Protože je toto nastavení specifické pro každý plugin unitární syntézy, přečti si dokumentaci daného pluginu, jak tuto možnost použít.
Fáze rozvržení
initial_layout(Layout | Dict | List) - Po čáteční umístění virtuálních Qubitů na fyzické Qubit. Pokud toto rozvržení učiní Circuit kompatibilní s omezenímicoupling_map, bude použito. Výsledné rozvržení nemusí být stejné, protože Transpiler může permutovat Qubit pomocí SWAP nebo jiných prostředků. Úplné podrobnosti najdeš v sekci Počáteční rozvržení.layout_method(str) - Název průchodu pro výběr rozvržení (default,dense,sabreatrivial). Může to být také název externího pluginu pro fázi rozvržení. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumentemlayoutprostage_name. Výchozí hodnota jesabre.
Fáze směrování
routing_method(str) - Název průchodu pro směrování (basic,lookahead,default,sabrenebonone). Může to být také název externího pluginu pro fázi směrování. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumentemroutingprostage_name. Výchozí hodnota jesabre.
Fáze překladu
translation_method(str) - Název průchodu pro překlad (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional). Může to být také n ázev externího pluginu pro fázi překladu. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumentemtranslationprostage_name. Výchozí hodnota jetranslator.
Optimalizační fáze
approximation_degree(float, v rozsahu 0–1 | None) - Heuristický dial pro aproximaci Circuit (1.0 = žádná aproximace, 0.0 = maximální aproximace). Výchozí hodnota je 1.0. ZadáníNonenastaví stupeň aproximace na nahlášenou míru chyb. Více podrobností najdeš v sekci Stupeň aproximace.optimization_method(str) - Název pluginu pro optimalizační fázi. Ve výchozím nastavení se nepoužívá žádný externí plugin. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumentemoptimizationprostage_name.
Fáze plánování
scheduling_method(str) - Název průchodu pro plánování. Může to být také název externího pluginu pro fázi plánování. Seznam nainstalovaných pluginů zobrazíš spuštěnímlist_stage_plugins()s argumentemschedulingprostage_name.- 'as_soon_as_possible': Plánuje instrukce chamtivě, co nejdříve na dostupném prostředku Qubit (alias:
asap). - 'as_late_as_possible': Plánuje instrukce co nejpozději, tj. udržuje Qubit v základním stavu, kdykoli je to možné (alias:
alap). Toto je výchozí nastavení.
- 'as_soon_as_possible': Plánuje instrukce chamtivě, co nejdříve na dostupném prostředku Qubit (alias:
Spuštění Transpileru
seed_transpiler(int) - Nastavuje náhodná semena pro stochastické části Transpileru.
Pokud nezadáš žádný z výše uvedených parametrů, použijí se následující výchozí hodnoty. Více informací najdeš na referenční stránce API dané metody:
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 0x7fa3e6dab110>
Další kroky
- Nauč se, jak nastavit úroveň optimalizace.
- Přečti si více o běžně používaných parametrech.
- Nauč se, jak nastavit úroveň optimalizace při použití Qiskit Runtime.
- Navštiv téma Transpilace s pass managery.
- Příklady najdeš v článku Reprezentace kvantových počítačů.
- Nauč se, jak transpilovat Circuit jako součást pracovního postupu Qiskit patterns s využitím Qiskit Runtime.
- Přečti si dokumentaci Transpiler API.