Úvod do transpilace
Transpilace je proces přepisu zadaného vstupního obvodu tak, aby odpovídal topologii konkrétního kvantového zařízení, a optimalizace instrukcí obvodu pro spuštění na zašuměných kvantových počítačích. Tato dokumentace pokrývá nástroje a pracovní postupy pro lokální transpilaci dostupné všem uživatelům Qiskitu, a také cloudovou službu Qiskit Transpiler Service dostupnou uživatelům plánů Premium, Flex a On-Prem (přes IBM Quantum Platform API). Pokud používáš primitivy a zajímají tě pouze výchozí možnosti transpilace poskytované službou Qiskit Runtime, přečti si téma Konfigurace kompilace za běhu pro Qiskit Runtime.
Proces transpilace vezme obvod obsahující tvoje instrukce:
Transpilace ho pak transformuje tak, aby byly použity pouze instrukce dostupné na zvoleném Backend, a optimalizuje tyto instrukce, aby minimalizovala vliv šumu:
Transpiler je ústřední součástí Qiskit SDK a je navržen s důrazem na modularitu a rozšiřitelnost. Jeho hlavním využitím je psaní nových transformací obvodů (označovaných jako průchody Transpileru), a jejich kombinování s dalšími existujícími průchody, čímž se výrazně snižuje hloubka a složitost kvantových obvodů. To, které průchody jsou řazeny za sebou a v jakém pořadí, má zásadní vliv na výsledek. Tuto pipeline určují objekty PassManager a StagedPassManager. StagedPassManager řídí spouštění jednoho nebo více PassManagerů a určuje pořadí jejich provádění, zatímco objekt PassManager je pouhá kolekce jednoho nebo více průchodů. Představ si StagedPassManager jako dirigenta orchestru, PassManagery jako různé instrumentální sekce a objekty Pass jako jednotlivé muzikanty. Tímto způsobem lze skládat hardwarově efektivní kvantové obvody, které ti umožní provádět práci v užitném měřítku při zachování zvladatelné úrovně šumu.
Více informací o fázích pass manageru najdeš v tématu Fáze Transpileru.
Architektura instrukční sady
Kromě snižování hloubky a složitosti kvantových obvodů je Transpiler navržen k transformaci instrukcí obsažených v daném QuantumCircuit tak, aby odpovídaly architektuře instrukční sady (ISA) konkrétního Backend. Obvody odpovídající ISA obsahují pouze instrukce podporované cílovým objektem Target Backend, jako jsou dostupné základní Gate hardwaru, měření, resety a operace řízeného toku, a splňují omezení daná konektivitou hardwaru, tedy objektem CouplingMap cíle. Při odesílání úlohy na Backend IBM Quantum® musí obvody odpovídat ISA daného Backend.
Fáze Transpileru
Předpřipravená transpilační pipeline Qiskitu se skládá ze šesti základních fází:
init– Tento průchod spouští veškeré počáteční průchody, které jsou nutné před vložením obvodu. Typicky zahrnuje rozbalení vlastních instrukcí a převod obvodu na jednoQubitové a dvouQubitové Gate. Ve výchozím nastavení ověřuje instrukce obvodu a překládá víceQubitové Gate na jednoQubitové a dvouQubitové.layout– Tento průchod aplikuje layout, který mapuje virtuální Qubity v tvém Circuit na fyzické Qubity QPU.routing– Tento průchod běží po aplikaci layoutu a vkládá Gate (tedy SWAP) do původního obvodu, aby byl kompatibilní s konektivitou QPU (coupling map).translation– Tento průchod překládá Gate v Circuit do základní sady instrukcí QPU.optimization– Tento průchod spouští optimalizační smyčku za účelem nalezení efektivnějších rozkladů kvantového obvodu, dokud není splněna podmínka (např. pevná hloubka).scheduling– Tato fáze je určena pro hardwarově uvědomělé průchody plánování. Pokud uživatel zadá metodu plánování, tato fáze zohledňuje veškerý nečinný čas v obvodu.
Pokud si přizpůsobuješ transpilační workflow, používej tyto fáze jako vodítko při vývoji.
Transpilace pomocí pass managerů
Doporučený způsob transpilace obvodu je vytvoření staged pass manageru a následné spuštění jeho metody run s tvým obvodem jako vstupem. Pomocí funkce generate_preset_pass_manager lze vygenerovat staged pass manager s rozumnými výchozími nastaveními.
Pokročilejší uživatelé mohou přizpůsobit sadu objektů PassManager a StagedPassManager a určit pořadí, ve kterém se každá fáze spustí. To může dramaticky změnit výsledný výstupní Circuit. Ve skutečnosti vlastní přístup k transpilaci kvantového algoritmu často produkuje efektivnější potlačení chyb než výchozí přístup. Vlastní přístup zahrnuje přepis kvantových obvodů tak, aby odpovídaly hardwarovým omezením a potlačovaly vliv šumu. Tok logiky tohoto nástroje je přizpůsobitelný a nemusí být lineární. Proces transpilace může připravit iterativní smyčky, podmíněné větve a další složité chování. Dobrým výchozím bodem při vývoji sady vlastních průchodů je prozkoumat výchozí posloupnost transformací.
Přehled transpilace pomocí pass managerů najdeš v části Transpilace pomocí pass managerů.
Výchozí transpilace
Pro jednodušší, ale méně přizpůsobitelný způsob použití Transpileru „hned po vybalení" použij funkci qiskit.compiler.transpile. Ta vygeneruje a spustí jeden z předpřipravených objektů StagedPassManager na základě, mimo jiné, příznaku optimization_level, který lze nastavit na 0, 1, 2 nebo 3. Vyšší úrovně generují optimalizovanější obvody za cenu delší doby transpilace.
Další kroky
- Chceš-li se naučit používat funkci
generate_preset_passmanager, začni tématem Výchozí nastavení a možnosti konfigurace transpilace. - Pokračuj ve studiu transpilace tématem Fáze Transpileru.
- Vyzkoušej průvodce Porovnání nastavení Transpileru.
- Vyzkoušej end-to-end příklad používající transpilované obvody v tutoriálu Odhad energie základního stavu Heisenbergova řetězce pomocí VQE.
- Viz dokumentace Transpile API.
- Zjisti, jak transpilovat obvody.