Wprowadzenie do transpilacji
Transpilacja to proces przepisywania danego Circuit wejściowego tak, aby pasował do topologii konkretnego urządzenia kwantowego, oraz optymalizowania instrukcji Circuit pod kątem wykonania na zaszumionych komputerach kwantowych. Ta dokumentacja obejmuje narzędzia i przepływy pracy dla lokalnej transpilacji dostępnej dla wszystkich użytkowników Qiskit, a także dla opartego na chmurze Qiskit Transpiler Service dostępnego dla użytkowników Planów Premium, Flex i On-Prem (przez IBM Quantum Platform API). Jeśli używasz prymitywów i interesują cię wyłącznie domyślne opcje transpilacji zapewniane przez usługę Qiskit Runtime, przeczytaj temat Konfigurowanie kompilacji runtime dla Qiskit Runtime.
Proces transpilacji przyjmuje Circuit zawierający twoje instrukcje:
Transpilacja następnie przekształca go tak, aby używane były wyłącznie instrukcje dostępne na wybranym Backend, i optymalizuje te instrukcje w celu minimalizacji efektów szumu:
Będący centralnym komponentem Qiskit SDK, Transpiler jest zaprojektowany z myślą o modułowości i rozszerzalności. Jego głównym zastosowaniem jest pisanie nowych transformacji Circuit (znanych jako przebiegi Transpilera) i łączenie ich z innymi istniejącymi przebiegami, co znacznie zmniejsza głębokość i złożoność Circuit kwantowych. To, które przebiegi są ze sobą łączone i w jakiej kolejności, ma zasadniczy wpływ na końcowy wynik. Ten potok jest definiowany przez obiekty PassManager i StagedPassManager. StagedPassManager koordynuje wykonanie jednego lub kilku PassManager i określa kolejność ich uruchamiania, natomiast obiekt PassManager to jedynie zbiór jednego lub kilku przebiegów. Wyobraź sobie StagedPassManager jako dyrygenta orkiestry, PassManager jako poszczególne sekcje instrumentów, a obiekty Pass jako poszczególnych muzyków. W ten sposób możesz tworzyć sprzętowo-wydajne Circuit kwantowe, które pozwalają wykonywać prace w skali użytkowej przy jednoczesnym utrzymaniu szumu na zarządzalnym poziomie.
Więcej informacji o etapach menedżera przebiegów znajdziesz w temacie Etapy Transpilera.
Architektura zestawu instrukcji
Oprócz zmniejszania głębokości i złożoności Circuit kwantowych, Transpiler jest zaprojektowany do przekształcania instrukcji zawartych w danym QuantumCircuit tak, aby spełniały Architekturę Zestawu Instrukcji (ISA) konkretnego Backend. Circuit spełniające ISA składają się wyłącznie z instrukcji obsługiwanych przez Target Backend, takich jak dostępne bramki bazowe sprzętu, pomiary, resety i operacje sterowania przepływem, i są zgodne z ograniczeniami wynikającymi z połączeń sprzętu, czyli CouplingMap układu docelowego. Podczas przesyłania zadania do Backend IBM Quantum® Circuit muszą być zgodne z ISA tego Backend.
Etapy Transpilera
Wbudowany potok Transpilera Qiskit składa się z sześciu podstawowych etapów:
init— Ten przebieg uruchamia wszelkie wstępne przebiegi wymagane przed osadzeniem Circuit. Zazwyczaj obejmuje to rozwijanie niestandardowych instrukcji i konwersję Circuit do bramek jedno- i dwu-Qubitowych. Domyślnie waliduje instrukcje Circuit i tłumaczy bramki wieloQubitowe na bramki jedno- i dwu-Qubitowe.layout— Ten przebieg stosuje układ, mapując wirtualne Qubity w twoim Circuit na fizyczne Qubity QPU.routing— Ten przebieg jest uruchamiany po zastosowaniu układu i wstrzykuje bramki (czyli SWAPy) do oryginalnego Circuit, aby był zgodny z mapą sprzężeń QPU.translation— Ten przebieg tłumaczy bramki w Circuit na bazowy zestaw instrukcji QPU.optimization— Ten przebieg uruchamia pętlę optymalizacyjną w celu znalezienia bardziej wydajnych dekompozycji Circuit kwantowego, aż do spełnienia warunku (np. stałej głębokości).scheduling— Ten etap obsługuje przebiegi harmonogramowania uwzględniające specyfikę sprzętu. Jeśli użytkownik określi metodę harmonogramowania, ten etap uwzględnia cały czas bezczynności w Circuit.
Jeśli dostosowujesz przepływ pracy transpilacji, używaj tych etapów jako wskazówki podczas tworzenia.
Transpiluj z menedżerami przebiegów
Zalecanym sposobem transpilacji Circuit jest utworzenie etapowego menedżera przebiegów, a następnie wykonanie jego metody run z Circuit jako wejściem. Możesz użyć funkcji generate_preset_pass_manager, aby wygenerować etapowy menedżer przebiegów z rozsądnymi wartościami domyślnymi.
Bardziej zaawansowani użytkownicy mogą dostosowywać zestaw obiektów PassManager i StagedPassManager oraz określać kolejność uruchamiania każdego etapu. Może to radykalnie zmienić końcowy Circuit wyjściowy. W rzeczywistości niestandardowe podejście do transpilacji algorytmu kwantowego często zapewnia skuteczniejsze tłumienie błędów niż podejście domyślne. Polega ono na przepisywaniu Circuit kwantowych tak, aby spełniały ograniczenia sprzętowe i minimalizowały efekty szumu. Przepływ logiki dla tego łańcucha narzędzi jest konfigurowalny i nie musi być liniowy. Proces transpilacji może obejmować iteracyjne pętle, warunkowe gałęzie i inne złożone zachowania. Dobrym punktem wyjścia przy opracowywaniu zestawu niestandardowych przebiegów jest zbadanie domyślnej sekwencji transformacji.
Przegląd transpilacji przy użyciu menedżerów przebiegów znajdziesz w artykule Transpiluj z menedżerami przebiegów.
Domyślna transpilacja
Prostszego, choć mniej konfigurowalnego, „gotowego do użycia" sposobu korzystania z Transpilera dostarcza funkcja qiskit.compiler.transpile. Generuje ona i uruchamia jeden z predefiniowanych obiektów StagedPassManager na podstawie m.in. flagi optimization_level, która może przyjmować wartości 0, 1, 2 lub 3. Wyższe poziomy generują bardziej zoptymalizowane Circuit kosztem dłuższego czasu transpilacji.
Następne kroki
- Aby dowiedzieć się, jak używać funkcji
generate_preset_passmanager, zacznij od tematu Domyślne ustawienia transpilacji i opcje konfiguracji. - Kontynuuj naukę o transpilacji, korzystając z tematu Etapy Transpilera.
- Wypróbuj przewodnik Porównaj ustawienia Transpilera.
- Wypróbuj przykład end-to-end wykorzystujący transpilowane Circuit w samouczku Estymacja energii stanu podstawowego łańcucha Heisenberga z VQE.
- Zobacz dokumentację API Transpile.
- Dowiedz się, jak transpilować Circuit.