Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 .
- Zdefiniuj kod dostępu. Utwórz obwód
qodec.Codeze stabilizatorami i operatorami logicznymi Pauli. - Przeanalizuj kod. Użyj klasy
CodeProfileclass, aby sprawdzić operatory logiczne, obliczyć syndromy i obliczyć odległość kodu. - 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. - Ukończ i zweryfikuj protokół. Użyj funkcji
filled, aby uzyskać obsługiwane równania sprawdzania i odczytu. Użyj funkcjiaudit, aby znaleźć niespójne lub niekompletne deklaracje. - Analizuj błędy obwodu. Użyj klasy
GadgetProfile, aby sprawdzić akcje logiczne, efekty błędów i odległość gadżetu. - 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_allprepare_x_allsyndromemeasure_z_allmeasure_x_allh_allcx_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
- Aby przygotować środowisko Python, zobacz Jak zainstalować QDK do korekty błędów.
- Aby zdefiniować kod i utworzyć protokół, zobacz Tworzenie i weryfikowanie protokołu QEC.
- Aby skompilować, symulować i dekodować programy logiczne, zobacz Uruchamianie i dekodowanie programów logicznych.
Pełny notes przedstawiający cały przepływ pracy znajdziesz w repozytorium QDK, w sekcji Tworzenie i testowanie protokołu QEC.