Erste Schritte mit QDK zur Fehlerkorrektur

Die Microsoft Quantum Development Kit (QDK) enthält Python Tools zum Entwickeln und Testen von Protokollen zur Quantenfehlerkorrektur (QEC). Verwenden Sie das qdk.ec Modul, um Fehlerkorrekturcodes zu analysieren, ausführbare Protokolle zu erstellen, Protokolldeklarationen zu überprüfen und Schaltkreisfehler zu untersuchen. Verwenden Sie qdk.simulation, um logische Programme über diese Protokolle auszuführen.

Die QDK Fehlerkorrekturtools verstehen

Der QDK Fehlerkorrekturworkflow verwendet die folgenden Pakete und Module:

Component Verwenden Sie es, um
qodec Definieren und speichern Sie Codes, Anweisungssätze, Gadgets, Ebenen und vollständige QEC-Protokolle.
qdk.ec Analysieren Sie Codes und Gadgets, erstellen Sie baseline qodecs, leiten Sie Gleichungen ab und prüfen Sie Protokolldeklarationen.
qdk.simulation Führen Sie Quantum Intermediate Representation-Programme (QIR) durch einen qodec aus und wenden Sie einen Decoder an.
qdk.simulation.decoders Wählen Sie den integrierten Syndromdecoder aus, verfolgen Sie Frames oder verbinden Sie sich mit dem optionalen deq Decoder.
qdk.qre Schätzen Sie die Raum-, Zeit- und Fehlerkosten von QEC-Modellen für die fehlertolerante Ressourcenschätzung.

Ein qodec ist eine formale Beschreibung eines ausführbaren QEC-Protokolls. Es verbindet logische Anweisungen mit physischen Schaltkreisen über eine oder mehrere Schichten. Das qodec Paket definiert dieses Datenmodell und seine YAML Darstellung. Das qdk.ec Modul leitet Fakten vom Modell ab und überprüft, ob seine Deklarationen mit seinen Schaltkreisen übereinstimmen.

Weitere Informationen finden Sie in der qodec Übersicht.

Das qdk.qre Modul hat einen anderen Zweck. Es modelliert die Ressourcenkosten eines Fehlerkorrekturschemas. Dies definiert, prüft oder führt qodec-Gadgets nicht aus. Weitere Informationen zur Quantumsressourcenschätzung finden Sie unter QDKWas ist der Microsoft Quantum-Ressourcenschätzer?

Verstehen Sie die qodec Protokollkomponenten

Die folgenden Komponenten definieren ein qodec Protokoll und unterstützen seine Ausführung.

Component Description
Code Ein statischer Satz von Stabilisatoren und logischen Operatoren, die einen Codebereich definieren.
Befehlssatz Die logischen oder physischen Operationen, die eine qodec-Ebene unterstützt.
Gadget Eine Schaltung, die eine Anweisung durch Vorgänge in der nächsten unteren Ebene implementiert.
Ebene Eine Zuordnung von einem Anweisungssatz zu einem Anweisungssatz auf niedrigerer Ebene.
Codieren Die Verbindung zwischen logischen Blöcken und Schaltkreis-Qubits an einer Gadgetgrenze.
Prüfen Eine Paritätsgleichung, die gleich Null sein muss, wenn die deklarierte Beziehung gilt.
Anzeige Eine Gleichung, die Schaltkreisergebnisse und Framezeichen einem logischen Ergebnis oder Kennzeichen zuordnet.
Flag Eine benannte Anzeige, die meldet, ob eine Anweisung ihre Annahmebedingung erfüllt hat.
Decoder Eine Komponente, die Syndrominformationen verwendet, um Korrekturen und logische Ergebnisse abzuleiten.

Ein qodec kann mehrere Ebenen enthalten. Die oberste Ebene kann logische Vorgänge über codierte Blöcke definieren. Die Gadgets auf der obersten Ebene können Anweisungen in der nächsten unteren Ebene aufrufen. Die untere Ebene enthält die physischen Vorgänge, die der Simulator ausführt.

Beispiel-Workflow für Protokolle

Ein typischer Workflow hat sechs Schritte. In den folgenden Schritten werden Funktionen und Klassen aus dem qdk.ec Modul verwendet.

  1. Definieren Sie einen Code. Erstellen Sie einen qodec.Code mit Stabilisierungselementen und logischen Pauli-Operatoren.
  2. Analysieren Sie den Code. Verwenden Sie die CodeProfile Klasse, um logische Operatoren zu untersuchen, Syndrome zu berechnen und Codeabstand zu berechnen.
  3. Erstellen oder laden Sie ein qodec. Verwenden Sie die build_qodec Funktion, um ein Basisprotokoll zu erstellen oder ein vorhandenes qodec aus YAML zu laden.
  4. Schließen Sie das Protokoll ab und validieren Sie es. Verwenden Sie die filled-Funktion, um Formeln für unterstützte Prüf- und Auslesevorgänge abzuleiten. Verwenden Sie die audit Funktion, um inkonsistente oder unvollständige Deklarationen zu finden.
  5. Schaltkreisfehler analysieren. Verwenden Sie die GadgetProfile Klasse, um logische Aktionen, Fehlereffekte und Gadgetabstand zu untersuchen.
  6. Führen Sie Logikprogramme aus. Kompilieren Sie Q#- oder OpenQASM-Code zu QIR. Übergeben Sie QIR und qodec an qdk.simulation.run_qir, und wählen Sie dann ein Decoder- und Rauschmodell aus.

Der folgende Code zeigt die Hauptobjekte in diesem Workflow:

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)

Die bare-css/v1 Strategie in diesem Beispiel erstellt ein einfaches Basisprotokoll ohne Flag-Qubits. Es hilft Ihnen, den Workflow zu prüfen, aber es garantiert keine fehlertoleranten Gadgets. Führen Sie eine Analyse der Gadgetabstände durch, bevor Sie sich für eine Protokollimplementierung entscheiden.

Protokollvalidierung von der Fehleranalyse trennen

Protokoll-Audits und Entfernungsanalysen bewerten verschiedene Aspekte eines QEC-Protokolls.

  • Protokollprüfungen überprüfen, ob das deklarierte Protokoll seinen Schaltkreisen und Gleichungen entspricht, wenn keine Fehler auftreten.
  • Die Distanzanalyse bestimmt die minimale Anzahl zulässiger Fehler oder Schaltkreisfehler, die zu einem nicht erkannten logischen Fehler führen können.

Verwenden Sie die audit Funktion, um rauschlose Konsistenz zu überprüfen. Das Audit überprüft Codealgebra, Anweisungsdeklarationen, Gadgetaktionen, Prüfungen, Lesevorgänge, Flags, Framebeziehungen und Verweise zwischen qodec Objekten.

Eine Überwachung, bei der keine Probleme festgestellt werden, ist keine Garantie für Fehlertoleranz. Ein Schaltkreis kann die richtige logische Aktion ohne Fehler implementieren und nach einem physischen Fehler trotzdem fehlschlagen. Verwenden Sie die CodeProfile.distance Methode, um den Code und die GadgetProfile.distance Methode zu analysieren, um jede Schaltkreisimplementierung zu analysieren.

Bevor Sie ein Protokoll für laute Simulationen verwenden, führen Sie eine Protokollprüfung durch und analysieren Sie Code- und Gadget-Abstände.

Baustrategie auswählen

Die build_qodec Funktion unterstützt zwei grundlegende CSS Konstruktionsstrategien.

Strategy Description
flagged-css/v1 Verwendet die markierte CSS Konstruktion und wählt die Anzahl der Flags aus dem Codeabstand aus. Diese Strategie ist die Standardeinstellung.
bare-css/v1 Verwendet keine Flag-Qubits und überspringt die Entfernungsberechnung, die eine Flaganzahl auswählt. Verwenden Sie dies zur Inspektion und frühen Entwicklung.

Beide Strategien versuchen, diese logischen Anweisungen zu erstellen:

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

Nicht jeder Code unterstützt jeden Kandidaten. Mit der Standardeinstellung strict=True löst build_qodec einen Fehler aus, wenn keine Anweisung erstellt und überprüft werden kann. Mit strict=False behält build_qodec nur die unterstützten Anweisungen bei und zeichnet jede übersprungene Anweisung in den qodec-Metadaten auf.

Wählen Sie Ihre nächste Aufgabe aus

Ein vollständiges Notebook, das dem vollständigen Workflow folgt, finden Sie unter Entwickeln und Testen eines QEC-Protokolls im QDK Repository.