Przejdź do głównej treści
Ten projekt jest w wersji beta. Znalazłeś błąd? Otwórz zgłoszenie na GitHub. Masz pytanie lub pomysł? Zapytaj w Discussions — chętnie poznamy Twoją opinię!
Jak oceniasz jakość tłumaczenia tej strony?

Wprowadzenie do transpilacji

Przegląd transpilacji i odpowiednich narzędzi — lokalnych lub chmurowych.

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. Jeśli używasz prymitywów i interesują cię wyłącznie domyślne opcje transpilacji zapewniane przez IBM Quantum Compute Service, przeczytaj temat Techniki łagodzenia i tłumienia błędów.

Proces transpilacji przyjmuje Circuit zawierający twoje instrukcje:

Dwu-Qubitowy Circuit kwantowy zawierający bramkę Hadamarda i dwie bramki CNOT.

Transpilacja następnie przekształca go tak, aby używane były wyłącznie instrukcje dostępne na wybranym Backend, i optymalizuje te instrukcje, aby zminimalizować skutki szumu:

Ten sam dwu-Qubitowy Circuit kwantowy po transpilacji. Zawiera bramki RZ, X, SX i ECR.


Transpiler, jeden z kluczowych komponentów Qiskit SDK, zaprojektowano z myślą o modułowości i rozszerzalności. Jego głównym zastosowaniem jest pisanie nowych transformacji obwodów (znanych jako przebiegi transpilera) i łączenie ich z innymi istniejącymi przebiegami, co znacznie zmniejsza głębokość i złożoność obwodów kwantowych. To, które przebiegi są łączone razem i w jakiej kolejności, ma ogromny wpływ na wynik końcowy. Ten potok jest określany przez obiekty PassManager i StagedPassManager. StagedPassManager organizuje wykonanie jednego lub więcej PassManagers i określa kolejność ich wykonywania, podczas gdy obiekt PassManager jest jedynie zbiorem jednego lub więcej przebiegów. Pomyśl o StagedPassManager jako o dyrygencie w orkiestrze, o PassManagers jako o różnych sekcjach instrumentów, a o obiektach Pass jako o poszczególnych muzykach. W ten sposób możesz tworzyć obwody kwantowe efektywne sprzętowo, które pozwalają wykonywać obliczenia w skali użytecznej (utility scale) przy jednoczesnym utrzymaniu szumu na kontrolowanym 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:

  1. 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.

  2. layout — Ten przebieg stosuje układ, mapując wirtualne Qubity w twoim Circuit na fizyczne Qubity QPU.

  3. 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.

  4. translation — Ten przebieg tłumaczy bramki w Circuit na bazowy zestaw instrukcji QPU.

  5. 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).

  6. 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​

Zalecenia