Aan de slag met QDK voor foutcorrectie

De Microsoft Quantum Development-kit (QDK) bevat Python hulpprogramma's voor het ontwikkelen en testen van quantumfoutcorrectieprotocollen. Gebruik de qdk.ec module om foutcorrectiecodes te analyseren, uitvoerbare protocollen te bouwen, protocoldeclaraties te valideren en fouten in het circuit te bestuderen. Gebruik qdk.simulation om logische programma's uit te voeren via deze protocollen.

Begrijp de QDK hulpprogramma's voor foutcorrectie

De QDK werkstroom voor foutcorrectie maakt gebruik van deze pakketten en modules:

Component Gebruik het om
qodec Codes, instructiesets, gadgets, lagen en volledige QEC-protocollen definiëren en opslaan.
qdk.ec Analyseer codes en gadgets, bouw basislijn qodecs, leid vergelijkingen af en controleer protocolverklaringen.
qdk.simulation Voer Quantum Intermediate Representation (QIR) programma's uit via een qodec en pas een decoder toe.
qdk.simulation.decoders Selecteer de ingebouwde syndroomdecoder, trackframes of maak verbinding met de optionele deq decoder.
qdk.qre Maak een schatting van de ruimte, tijd en foutkosten van QEC-modellen voor fouttolerante resourceraming.

Een qodec is een formele beschrijving van een uitvoerbaar QEC-protocol. Het verbindt logische instructies met fysieke circuits via een of meer lagen. Het qodec pakket definieert dit gegevensmodel en de YAML weergave ervan. De qdk.ec module leidt feiten af van het model en controleert of de declaraties overeenkomen met de circuits.

Zie het qodec overzicht voor meer informatie.

De qdk.qre module heeft een ander doel. Hiermee worden de resourcekosten van een foutcorrectieschema gemodelleerd. Er worden geen gadgets gedefinieerd, geaudit of uitgevoerd qodec gadgets. Voor meer informatie over kwantumresourceschatting in de , zie QDK

Begrijp de qodec protocolonderdelen

De volgende onderdelen definiëren een qodec protocol en ondersteunen de uitvoering ervan.

Component Description
Code Een statische set stabilisatoren en logische operators die een coderuimte definiëren.
Instructieset De logische of fysieke bewerkingen die een qodec laag ondersteunen.
Gadget Een circuit dat een instructie implementeert via bewerkingen in de volgende onderste laag.
Laag Een toewijzing van één instructieset naar een instructieset op lager niveau.
Codering De verbinding tussen logische blokken en circuit qubits op een gadgetgrens.
Controle Een pariteitsvergelijking die gelijk moet zijn aan nul wanneer de gedeclareerde relatie geldt.
Uitlezing Een functie die circuitresultaten en frametekens toewijst aan een logische uitkomst of markering.
Flag Een benoemde uitlezing die rapporteert of een instructie aan de acceptatievoorwaarde heeft voldaan.
Decoder Een onderdeel dat gebruikmaakt van syndroom-bewijs om correcties en logische resultaten af te leiden.

Een qodec kan verschillende lagen bevatten. De bovenste laag kan logische bewerkingen definiëren voor gecodeerde blokken. De gadgets in de bovenste laag kunnen instructies aanroepen in de laag direct eronder. De onderste laag bevat de fysieke bewerkingen die de simulator uitvoert.

Voorbeeld van protocolworkflow

Een typische werkstroom heeft zes stappen. In de volgende stappen worden functies en klassen uit de qdk.ec module gebruikt.

  1. Definieer een code. Maak een qodec.Code met stabilisatoren en logische Pauli operators.
  2. Analyseer de code. Gebruik de CodeProfile klasse om logische operatoren te inspecteren, syndromen te berekenen en de codeafstand te berekenen.
  3. Bouw of laad een qodec. Gebruik de build_qodec functie om een basislijnprotocol te maken of een bestaand qodec vanuit YAML te laden.
  4. Voltooi en valideer het protocol. Gebruik de functie filled om ondersteunde controlebit- en uitleesvergelijkingen af te leiden. Gebruik de audit functie om inconsistente of onvolledige declaraties te vinden.
  5. Circuitfouten analyseren. Gebruik de GadgetProfile klasse om logische acties, fouteffecten en gadgetafstand te inspecteren.
  6. Logische programma's uitvoeren. Compileer Q# of OpenQASM code naar QIR. Geef QIR en qdk.simulation.run_qir door aan qodec, en selecteer vervolgens een decoder en ruismodel.

De volgende code toont de hoofdobjecten in deze werkstroom:

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)

Met bare-css/v1 de strategie in dit voorbeeld wordt een eenvoudig basislijnprotocol gemaakt zonder flagqubits. Het helpt u bij het inspecteren van de workflow, maar garandeert geen fouttolerante gadgets. Gebruik gadgetafstandsanalyse voordat u een protocol-implementatie kiest.

Protocolvalidatie scheiden van foutanalyse

Protocolcontroles en afstandsanalyse beoordelen verschillende aspecten van een QEC-protocol.

  • Protocolcontroles controleren of het gedeclareerde protocol overeenkomt met de circuits en vergelijkingen wanneer er geen fouten optreden.
  • De afstandsanalyse bepaalt het minimale aantal toegestane fouten of circuitstoringen waarbij een logische fout onopgemerkt blijft.

Gebruik de audit functie om ruisloze consistentie te controleren. De audit controleert code algebra, instructiedeclaraties, gadgetacties, controles, lees-outs, vlaggen, framerelaties en verwijzingen tussen qodec objecten.

Een controle die geen problemen rapporteert, garandeert geen fouttolerantie. Een circuit kan de juiste logische actie zonder fouten implementeren en nog steeds mislukken na één fysieke fout. Gebruik de CodeProfile.distance methode om de code en de GadgetProfile.distance methode te analyseren om elke circuit-implementatie te analyseren.

Voordat u een protocol gebruikt voor ruissimulaties, voert u een protocolaudit uit en analyseert u code- en gadgetafstanden.

Een bouwstrategie kiezen

De build_qodec functie ondersteunt twee baseline-constructiestrategieën CSS.

Strategy Description
flagged-css/v1 Maakt gebruik van de gemarkeerde CSS constructie en selecteert het aantal vlaggen op basis van de codeafstand. Deze strategie is de standaardinstelling.
bare-css/v1 Gebruikt geen vlag-qubits en slaat de berekening van de afstand over die een vlagaantal selecteert. Gebruik het voor inspectie en vroege ontwikkeling.

Beide strategieën proberen deze logische instructies te maken:

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

Niet elke code ondersteunt elke optie. Met de standaardinstelling strict=True geeft build_qodec een fout wanneer het geen instructie kan bouwen en verifiëren. Met strict=False behoudt build_qodec de ondersteunde instructies en registreert elke overgeslagen instructie in de qodec metagegevens.

Uw volgende taak kiezen

Zie Een QEC-protocol ontwikkelen en testen in de QDK opslagplaats voor een volledig notebook dat de volledige werkstroom volgt.