Rozpocznij pracę z QDK do poprawiania błędów

Microsoft Quantum Development Kit (QDK) zawiera Python narzędzia do opracowywania i testowania protokołów korekcji błędów kwantowych (QEC). Użyj modułu qdk.ec, aby analizować kody korekcji błędów, tworzyć protokoły wykonywalne, weryfikować deklaracje protokołów i analizować usterki obwodów. Użyj qdk.simulation, aby uruchamiać programy logiczne za pomocą tych protokołów.

Poznaj narzędzia do poprawiania błędów QDK

Proces korekcji błędów QDK używa tych pakietów i modułów:

Component Wykorzystaj ją do
qodec Definiowanie i zapisywanie kodów, zestawów instrukcji, gadżetów, warstw i kompletnych protokołów QEC.
qdk.ec Analizowanie kodów i gadżetów, tworzenie podstawowych qodecs, wyprowadzanie równań i audyt deklaracji protokołu.
qdk.simulation Uruchamiaj programy Quantum Intermediate Representation (QIR) za pomocą modułu qodec i zastosuj dekoder.
qdk.simulation.decoders Wybierz wbudowany dekoder syndromowy, ramki śledzenia lub połącz się z opcjonalnym deq dekoderem.
qdk.qre Oszacuj koszty przestrzeni, czasu i błędów modeli QEC na potrzeby szacowania zasobów odpornych na błędy.

qodec to formalny opis wykonywalnego protokołu QEC. Łączy instrukcje logiczne z obwodami fizycznymi za pośrednictwem co najmniej jednej warstwy. Pakiet qodec definiuje ten model danych i jego YAML reprezentację. Moduł qdk.ec wyprowadza fakty z modelu i sprawdza, czy jego deklaracje są zgodne z układami.

Aby uzyskać więcej informacji, zobacz qodec omówienie.

Moduł qdk.qre ma inny cel. Modeluje koszt zasobów schematu korekty błędów. Nie definiuje, nie audytuje ani nie uruchamia qodec gadżetów. Aby uzyskać więcej informacji na temat szacowania zasobów kwantowych w QDK, zobacz Co to jest narzędzie do szacowania zasobów kwantowych Microsoft Quantum?

Poznaj qodec składniki protokołu

Poniższe składniki definiują qodec protokół i obsługują jego wykonywanie.

Component Description
Code Statyczny zestaw stabilizatorów i operatorów logicznych, który definiuje przestrzeń kodu.
Zestaw instrukcji Operacje logiczne lub fizyczne obsługiwane przez warstwę qodec.
Gadżet Obwód, który implementuje instrukcję za pomocą operacji w następnej niższej warstwie.
Warstwa Mapowanie z jednego zestawu instrukcji na zestaw instrukcji niższego poziomu.
Encoding Połączenie między blokami logicznymi a kubitami obwodu na granicy gadżetu.
Sprawdź Równanie parzystości, które musi być równe zero, gdy zadeklarowana relacja zachodzi.
Odczyt Równanie, które mapuje wyniki obwodu i znaki ramki na wynik logiczny lub flagę.
Flag Pole odczytu o nazwie zgłasza, czy instrukcja spełnia warunek akceptacji.
Dekoder Składnik, który wykorzystuje dane syndromowe do wnioskowania poprawek i wyników logicznych.

Element qodec może zawierać kilka warstw. Górna warstwa może definiować operacje logiczne na zakodowanych blokach. Gadżety w górnej warstwie mogą wywoływać instrukcje w następnej niższej warstwie. Warstwa dolna zawiera operacje fizyczne uruchamiane przez symulator.

Przykładowy przepływ pracy protokołu

Typowy przepływ pracy zawiera sześć kroków. W poniższych krokach są używane funkcje i klasy z modułu qdk.ec .

  1. Zdefiniuj kod dostępu. Utwórz obwód qodec.Code ze stabilizatorami i operatorami logicznymi Pauli.
  2. Przeanalizuj kod. Użyj klasy CodeProfile class, aby sprawdzić operatory logiczne, obliczyć syndromy i obliczyć odległość kodu.
  3. Utwórz lub załaduj element qodec. Użyj funkcji build_qodec, aby utworzyć protokół punktu odniesienia lub załadować istniejący qodec z YAML.
  4. Ukończ i zweryfikuj protokół. Użyj funkcji filled, aby uzyskać obsługiwane równania sprawdzania i odczytu. Użyj funkcji audit, aby znaleźć niespójne lub niekompletne deklaracje.
  5. Analizuj błędy obwodu. Użyj klasy GadgetProfile, aby sprawdzić akcje logiczne, efekty błędów i odległość gadżetu.
  6. Uruchom programy logiczne. Skompiluj Q# lub OpenQASM kod do QIR. Przekaż elementy QIR i qodec do qdk.simulation.run_qir, a następnie wybierz dekoder i model szumu.

Poniższy kod przedstawia główne obiekty w tym przepływie pracy:

import qodec
from qdk import ec
from qdk.simulation import run_qir

code = qodec.Code(
    "C4",
    stabilizers=["X_0 X_1 X_2 X_3", "Z_0 Z_1 Z_2 Z_3"],
    x=["X_0 X_1", "X_0 X_2"],
    z=["Z_0 Z_2", "Z_0 Z_1"],
)

code_profile = ec.CodeProfile(code)
print("Code distance:", code_profile.distance())

protocol = ec.build_qodec(code, strategy="bare-css/v1", strict=False)
print(ec.audit(protocol))

# Compile a logical program to QIR before you call run_qir.
# results = run_qir(qir, qodec=protocol, shots=100)

Strategia bare-css/v1 w tym przykładzie tworzy prosty protokół odniesienia bez kubitów flagi. Pomaga to sprawdzić przepływ pracy, ale nie gwarantuje gadżetów odpornych na awarie. Przed wybraniem implementacji protokołu należy użyć gadget distance analysis.

Oddzielanie walidacji protokołu od analizy błędów

Inspekcje protokołów i analiza odległości oceniają różne aspekty protokołu QEC.

  • Audyty protokołu sprawdzają, czy zadeklarowany protokół jest zgodny z jego obwodami i równaniami, gdy nie wystąpią żadne usterki.
  • Analiza dystansu określa minimalną liczbę dozwolonych błędów lub uszkodzeń obwodu, które mogą powodować niewykrytą awarię logiczną.

Użyj funkcji audit, aby sprawdzić spójność danych bez zakłóceń. Inspekcja sprawdza algebrę kodu, deklaracje instrukcji, akcje gadżetów, kontrole, odczyty, flagi, relacje ramek i odwołania między obiektami qodec.

Audyt, który nie zgłasza żadnych problemów, nie gwarantuje odporności na awarie. Obwód może zaimplementować poprawną akcję logiczną bez błędów i nadal zakończyć się niepowodzeniem po pojedynczym uszkodzeniu fizycznym. Użyj metody CodeProfile.distance, aby przeanalizować kod, oraz metody GadgetProfile.distance, aby przeanalizować każdą implementację obwodu.

Przed użyciem protokołu do hałaśliwych symulacji uruchom audyt protokołu i przeanalizuj odległości kodu i elementów pomocniczych.

Wybierz strategię budowy

Funkcja build_qodec obsługuje dwie strategie konstruowania linii bazowej CSS .

Strategy Description
flagged-css/v1 Używa oznaczonej flagą CSS konstrukcji i wybiera liczbę flag z odległości kodu. Ta strategia jest domyślna.
bare-css/v1 Nie używa kubitów flag i pomija obliczanie odległości służące do wyboru liczby flag. Użyj go do inspekcji i wczesnych prac programistycznych.

Obie strategie próbują utworzyć następujące instrukcje logiczne:

  • prepare_z_all
  • prepare_x_all
  • syndrome
  • measure_z_all
  • measure_x_all
  • h_all
  • cx_all

Nie każdy kod obsługuje każdy wariant. W przypadku domyślnego ustawienia strict=Truebuild_qodec program zgłasza błąd, gdy nie może utworzyć i zweryfikować instrukcji. Z użyciem strict=False, build_qodec program zachowuje obsługiwane instrukcje i rejestruje wszystkie pominięte instrukcje w metadanych qodec.

Wybierz następne zadanie

Pełny notes przedstawiający cały przepływ pracy znajdziesz w repozytorium QDK, w sekcji Tworzenie i testowanie protokołu QEC.