Megosztás a következőn keresztül:


Az target erőforrásbecslő paramétereinek testreszabása

Ez a cikk bemutatja, hogyan szabhatja testre az target Azure Quantum Resource Estimator paramétereit a megcélzott gép jellemzőinek megfelelően. Az Erőforrásbecslő ezeket a paramétereket használja a kvantum-algoritmus kvantumszámítógépen való futtatásához szükséges erőforrások becslésére.

Feljegyzés

Ha probléma merül fel az erőforrás-becslés használata során, tekintse meg a hibaelhárítási oldalt.

Előfeltételek

Target Paraméterek

Az Erőforrásbecslő kiszámítja az erőforrások becslését, például a qubitek számát és a futási időt, amely egy adott kvantumalgoritmus adott qubit-technológiával és rögzített architekturális választási lehetőségekkel való implementálásához szükséges.

Az erőforrásbecslő ezért bemenetek készletét használja előre definiált értékekkel a kezdéshez:

  • Fizikai qubitmodell, amely meghatározza a mögöttes fizikai qubitek tulajdonságait.
  • Kvantumhiba-korrekciós (QEC) séma, amely a feltételezett kvantumhiba-korrekciós séma.
  • Hibakeret, amely az általánosan megengedett hiba, vagyis az a szám, ahányszor a programnak engedélyezve van a sikertelen leiratkozás.
  • Az összetevő szintjén megkötések , amelyek a logikai ciklusok száma és a T-gyári példányok száma.
  • Lepárlási egységek a T-gyárak desztillációs algoritmusainak megadásához.
  • Pareto frontier estimate to run multiple estimates of number of qubits and runtime for the same algorithm.

Tipp.

Ha már ismer néhány előre kiszámított becslést egy művelethez, ezeket is beépítheti, és optimalizálhatja az erőforrásbecslő végrehajtását. További információ: Ismert becslések használata az erőforrásbecslővel.

Fizikai qubitparaméterek

Amikor az erőforrásbecslő modellezi a fizikai qubit-feltételezéseket, két különböző fizikai utasításkészletet használ a qubitek üzemeltetéséhez. A fizikai utasításkészlet lehet kapualapú vagy Majorana. A kapualapú utasításkészlet egy qubites mérést, egy qubites kaput (beleértve a T kapukat) és két qubites kapukat biztosít. A Majorana utasításkészlet fizikai T-kaput, egy qubites mérést és két qubites közös mérési műveleteket biztosít.

Hat előre definiált qubitparaméter közül választhat, amelyek közül négy kapualapú utasításkészlettel, kettő pedig Majorana utasításkészlettel rendelkezik. Ezek a qubitmodellek számos működési időt és hibaarányt fednek le, ami lehetővé teszi a gyakorlati kvantumalkalmazások engedélyezéséhez szükséges erőforrásköltségek megfelelő feltárását.

Qubit paraméter Python API-osztály Leírás
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" GATE_NS_E3 , GATE_NS_E4 A műveleti idő és a hűség a szupravezető transmon qubitek vagy a spin qubitek jövőbeli verzióinak felelhet meg, amelyek általában a nanoszekundumos rendszerben rendelkeznek műveleti idővel. Ezen qubitek esetében a kapu- és a mérési műveletek 50 ns, illetve 100 ns értékre számítanak. Az egy qubites és a két qubites kapu hibaaránya reálisan target$10^{-3}$, a felskálázott rendszerek optimistajaként target pedig $10^{-4}$ lesz.
"qubit_gate_us_e3" , "qubit_gate_us_e4" GATE_US_E3 , GATE_US_E4 A műveleti idők és a hűségek megfelelhetnek a qubitek ionokon alapuló jövőbeli verzióinak, amelyek általában a mikroszekundumos rendszerben rendelkeznek műveleti idővel. Az ion qubitek tipikus feltételezései alapján a kapu- és a mérési műveletek 100 μs-t feltételeznek. Az egy qubites Clifford-kapuk hibaaránya reálisan target $10^{-3}$ és optimistaként target$10^{-4}$ , míg az egy qubites nem Clifford kapuk (T kapu) hibaaránya $10^{-6}$. A két qubites kapuk esetében a hibaarány $10^{-3}$ reálistarget, optimista target$10^{-4}$ .
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" MAJ_NS_E4 , MAJ_NS_E6 A műveleti idő és a hűség a Majorana qubitek jövőbeli továbbfejlesztett verzióinak felelhet meg. Ezen qubitek esetében a kapu- és mérési műveletek 100 ns-t feltételeznek. A hardver topológiai védelmének figyelembevétele érdekében az egy qubites és a két qubites közös mérési hibaarányok (Clifford-hibaarányok) reálisan target$10^{-4}$ , optimistaként targetpedig $10^{-6}$ lesznek . A nem Clifford-műveletek ebben az architektúrában nem rendelkeznek topológiai védelemmel, a nem Clifford fizikai T kapuk hibaaránya 5%.

Feljegyzés

Ha nincs megadva más érték, a qubitmodell alapértelmezett értéke ."qubit_gate_ns_e3"

Előre definiált qubitparaméterek paraméterei

Referenciaként a teljes előre definiált qubitparaméterek a következők:

{
    "qubitParams": {
        "name": "qubit_gate_ns_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-3
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_ns_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-4
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e4",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "twoQubitJointMeasurementErrorRate": 1e-4,
        "tGateErrorRate": 0.05
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e6",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-6,
        "twoQubitJointMeasurementErrorRate": 1e-6,
        "tGateErrorRate": 0.01
    }
}

Előre definiált qubitparaméterek átadása

Az előre definiált qubitparaméterek programozott módon történő megadásának két módja van. Futtatáskor qsharp.estimatekiválaszthatja az qubitParams osztály qubitmodelljének nevét. Például a qubit paraméter kiválasztásához "qubit_maj_ns_e6" írja be a következőt:

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e6"
                    },
                })

A qubitparamétereket az osztálynak is átadhatja a EstimatorParams használatávalQubitParams. Például a qubit paraméter kiválasztásához MAJ_NS_E6 írja be a következőt:

from qsharp.estimator import EstimatorParams, QubitParams

params = EstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E6 # qubit_maj_ns_e6 qubit parameter

qsharp.estimate("RunProgram()", params=params)

Előre definiált qubitparaméterek testreszabása

Az előre definiált qubitparaméterek testre szabhatók a név megadásával, majd a többi érték frissítésével. Ha például csökkenteni szeretné a két qubites közös mérés hibaarányát a "qubit_maj_ns_e4"-ban, írja be a következőt:

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e4",
                        "twoQubitJointMeasurementErrorRate": 1e-5,
                    },
                })

Vagy egy lista formájában is átadhatja az utasításokat.

from qsharp.estimator import EstimatorParams, QubitParams

params = MicrosoftEstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E4
params.qubit_params.two_qubit_joint_measurement_error_rate = 1e-5

Qubit-paraméterek a Gate-alapú qubitekhez

Python-azonosító Adattípus Leírás
name húr A qubitmodell neve
instruction_set "gate_based" Mögöttes qubit-technológia
one_qubit_measurement_time idősztring Egy qubites mérés ($t_{\rm meas}$) műveleti ideje ns-ben
one_qubit_gate_time idősztring Egy qubites kapu ($t_{\rm gate}$) működési ideje ns-ben
two_qubit_gate_time idősztring Két qubites kapu működési ideje ns-ben
t_gate_time idősztring Egy qubites, nem Clifford-kapu működési ideje ns-ben
one_qubit_measurement_error_rate float Egy qubites mérés hibaaránya
one_qubit_gate_error_rate float Egy qubites Clifford-kapu hibaaránya ($p$)
two_qubit_gate_error_rate float Két qubites Clifford-kapu hibaaránya
t_gate_error_rate float Hibaarány az egy qubites, nem Clifford állapot előkészítéséhez ($p_T$)
idle_error_rate float Üresjáratnak megfelelő hibaarány

Az alábbi kód bemutatja, hogyan adható meg egyéni qubitparaméter egy kapualapú utasításkészlethez:

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "gate_based"
params.qubit_params.t_gate_error_rate = 0.03
params.qubit_params.t_gate_time = "10 ns"
params.qubit_params.idle_error_rate = 0.02

Feljegyzés

Ha nincs megadva, a következő értékeket two_qubit_gate_time t_gate_time adja meg, és az alapértelmezett one_qubit_gate_timeértékeket, az értékeket t_gate_error_rate two_qubit_gate_error_rate és az alapértelmezett one_qubit_gate_error_rateértékeket, valamint az idle_error_rate alapértelmezett értékeket a következőreone_qubit_measurement_error_rate: .

Qubit-paraméterek Majorana qubitekhez

Python-azonosító Adattípus Leírás
name húr A qubitmodell neve
instruction_set "majorana" Mögöttes qubit-technológia
one_qubit_measurement_time idősztring Egy qubites mérés ($t_{\rm meas}$) műveleti ideje ns-ben
two-qubit_joint_measurement_time idősztring Két qubites mérés műveleti ideje ns-ben
t_gate_time idősztring Egy qubites, nem Clifford-kapu működési ideje ns-ben
one_qubit_measurement_error_rate float Egy qubites mérés hibaaránya
two_qubit_joint_measurement_error_rate float Két qubites mérés hibaaránya
t_gate_error_rate float Hibaarány az egy qubites, nem Clifford állapot előkészítéséhez ($p_T$)
idle_error_rate float Üresjáratnak megfelelő hibaarány

A Majorana-alapú utasításkészlet minimális sablonja az összes szükséges értékkel:

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "majorana"
params.qubit_params.one_qubit_measurement_time = "10 ns"
params.qubit_params.one_qubit_measurement_error_rate = 0.01

Feljegyzés

Ha nincs megadva, a következő értékeket two_qubitJointMeasurementTime t_gate_time adja meg, és az alapértelmezett one_qubit_measurement_timeértékeket, az értékeket t_gate_error_rate two_qubit_joint_measurement_error_rate és az alapértelmezett one_qubit_measurement_error_rateértékeket, valamint az idle_error_rate alapértelmezett értékeket a következőreone_qubit_measurement_error_rate: .

two_qubit_joint_measurement_error_rateItt one_qubit_measurement_error_rate adhatja meg a mérési kiolvasásoknak és readouta mérésfeldolgozásnak processmegfelelő hibaarányokat. Ezek az értékek számok vagy számpárok lehetnek <double> . Például:

params.qubit_params.two_qubit_joint_measurement_error_rate = \
    MeasurementErrorRate(process=0.00005, readout=0.00007)

Feljegyzés

Ha egyetlen numerikus értéket ad meg az egy qubites és a két qubites hibaarányokhoz a Majorana qubitmérésben, akkor az olvasási és a folyamathibák aránya is egyenlő lehet.

Fontos

A nem megadott értékek alapértelmezett értéket vesznek fel, például a megadásával "qubit": {"oneQubitGateTime":"200 ns"} egy kapualapú qubitet modellezünk, amelyben a két qubites kapuidő és az egy qubites kapuidő is 200 ns. Egységek esetén meg kell adnia az idősztringeket, amelyek kettős pontosságú lebegőpontos számok, majd egy szóköz és az ilyen értékek időegysége, ahol lehetséges, az idő utótagjai nsa következők: ( µs vagy us), msés s.

Kvantumhiba-korrekciós sémák

A gyakorlati léptékű kvantumalkalmazások végrehajtásához a kvantumműveletnek alacsony hibaarányúnak kell lennie. Ezek a hibaarányok targets általában túlmutatnak a nyers fizikai qubitek képességein. A korlátozás leküzdése érdekében a kvantumhibák javítása (QEC) és a hibatűrő számítások két kulcsfontosságú technika, amelyek a nagy léptékű kvantumszámítógépek építőelemeit alkotják. Először is a QEC lehetővé teszi, hogy több hibalehetőséget okozó fizikai qubitet írjunk, és egy megbízhatóbb logikai qubitet hozzunk létre, amely jobban megőrzi a kvantumadatokat, mint a mögöttes fizikai qubitek.

Az erőforrásbecslő a következő képletet használja a logikai hibaarányok exponenciális modellel való modellezéséhez,

$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$

ahol $a$ egy keresztezési előtényező, $d$ a kód távolsága, $p$ a fizikai hibaarány, $p^*$ pedig a kvantumhibák korrekciós küszöbértéke. A $a$ keresztezési előtényező numerikusan kinyerhető szimulációkhoz.

A kód távolsága $d$ egy olyan paraméter, amely szabályozza a kijavítható hibák számát. Így a kód távolsága határozza meg a logikai qubitek hibaarányát és a kódolásukhoz szükséges fizikai qubitek számát. A pontosság és a fizikai qubitek száma is növekszik a kód távolságával. A QEC-sémák célja, hogy megtalálják azt a minimális kódtávolságot, amely képes elérni az adott alkalmazáshoz beállított szükséges hibaarányt.

A fizikai hibaarány $p$ a qubit paramétereiből nyerhető ki az eszközön végrehajtott fizikai Clifford-művelet legrosszabb esetbeni hibaarányaként. Különösen $p = {}$ max(one_qubit_measurement_error_rate, one_qubit_gate_error_rate, ) two_qubit_gate_error_ratea kapualapú utasításkészlettel rendelkező qubitparaméterekhez, és $p = {}$ max(one_qubit_measurement_error_rate, two_qubit_joint_measurement_error_rate) a Majorana utasításkészlettel rendelkező qubitparaméterekhez. A QEC-sémák általában hibaarány-küszöbértéket $p^*$ érték alatt, amely alatt a hibajavítás elnyomja a hibákat.

Az Azure Quantum Resource Estimator két előre definiált QEC-sémát támogat: egy felületi kódot és egy floquet-kódot.

QEC-protokoll Python API-osztály Leírás
"surface_code" SURFACE_CODE A kapualapú felületkód alapja az arXiv:1208.0928 és az arXiv:1009.3686. A Majorana felületkódja az arXiv:1909.03002 és arXiv:2007.00307 alapján történik.
"floquet_code" FLOQUET_CODE Csak Majorana qubitekhez. A floquet-kód az arXiv:2202.11829-en alapul.

Feljegyzés

Ha nincs megadva más érték, a QEC-séma alapértelmezett értéke a "surface_code".

Előre definiált QEC-sémák paraméterei

Az előre definiált QEC-sémák pontos paraméterei a következők.

{
    "qubitParams": {
        "instructionSet": "GateBased",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.03,
        "logicalCycleTime": "(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.0015,
        "crossingPrefactor": 0.08,
        "logicalCycleTime": "20 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "floquet_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.07,
        "logicalCycleTime": "3 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "4 * codeDistance * codeDistance + 8 * (codeDistance - 1)"
    }
}

Előre definiált QEC-sémák átadása

Az előre definiált QEC-sémák kétféleképpen határozhatók meg. Futtatáskor qsharp.estimatekiválaszthatja az "qecScheme" osztály QEC-modelljének nevét. A floquet kód kiválasztásához például írja be a következőt:

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code"
                    }
                })

A becslési paraméterek listáját is átadhatja az EstimatorParams osztálynak az QECScheme osztály használatával. A floquet kód kiválasztásához például írja be a következőt:

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.qec_scheme.name = QECScheme.FLOQUET_CODE # floquet code QEC scheme

qsharp.estimate("RunProgram()", params=params)

Előre definiált QEC-sémák testreszabása

Az előre definiált QEC-sémákat testre szabhatja a név megadásával, majd a többi érték frissítésével. Ha például növelni szeretné a keresztezési előtényezőt a floquet-kódban, írja be a következőt:

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code",
                        "crossingPrefactor": 0.07,
                    }
                })

Feljegyzés

Ha nincs megadva, akkor az alapértelmezett "physicalQubitsPerLogicalQubit" "oneQubitMeasurementTime""logicalCycleTime" érték, az "errorCorrectionThreshold" alapértelmezett 0.01érték a következő lesz, az alapértelmezett érték pedig a "crossingPrefactor" következő.0.03

A QEC-sémák testreszabása

Az erőforrásbecslő a fenti képleten alapuló testreszabott QEC-sémát absztrakcióra képes a $a$ és a "crossingPrefactor" "errorCorrectionThreshold" $p^*$ értékének megadásával. Emellett meg kell adnia az "logicalCycleTime"egyetlen logikai művelet végrehajtásának idejét, amely a kód távolságától és a mögöttes fizikai qubitek fizikai műveleti idő feltételezésétől függ. Végül egy második képlet kiszámítja az "physicalQubitsPerLogicalQubit"egy logikai qubit kódolásához szükséges fizikai qubitek számát a kód távolsága alapján.

A következő kódot használhatja sablonként a QEC-sémákhoz:

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "crossingPrefactor": <double>,
                        "errorCorrectionThreshold": <double>,
                        "logicalCycleTime": <formula string>,
                        "physicalQubitsPerLogicalQubit": <formula string>
                    }
                })                

A képleteken belül használhatja azokat a változókat one_qubit_gate_time, two_qubit_gate_time, one_qubit_measurement_timeés two_qubit_joint_measurement_time, amelyek értékei a megfelelő mezőből származnak a fizikai qubit paramétereiből, valamint a logikai qubithez kiszámított kódtávolság változóját eccDistance a fizikai qubit tulajdonságai, a hibajavítási küszöbérték és a keresztezési előbontás alapján. Az időváltozók, és eccDistance a képlet leírására logicalCycleTime használhatók. A képlethez physicalQubitsPerLogicalQubit csak a eccDistance képlet használható.

Hiba a költségvetésben

A teljes hibakeret $\epsilon$ az algoritmus általánosan tolerált hibáját állítja be, vagyis az algoritmus megengedett hiba valószínűségét. A globális értéknek 0 és 1 közöttinek kell lennie, az alapértelmezett érték pedig 0,001, amely 0,1%-nak felel meg. Más szóval az algoritmus 1000 végrehajtás során legfeljebb egyszer hiúsulhat meg. Ez a paraméter kifejezetten alkalmazásspecifikus.

Ha például Shor-algoritmust futtat egész számok faktorálásához, a hibakeret nagy értéke eltűrhető, mivel ellenőrizheti, hogy a kimenetek valóban a bemenet elsődleges tényezői-e. Másfelől kisebb hibakeretre lehet szükség ahhoz, hogy egy algoritmus megoldjon egy megoldással kapcsolatos problémát, amelyet nem lehet hatékonyan ellenőrizni.

A hibakeret három rész összegének felel meg:

$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$

A $\epsilon_{\log}$ logikai hibák a logikai qubitek implementálásának hibája, a $\epsilon_{\rm dis}$ T állapothiba a T-állapotok lepárláson keresztüli előállításának hibája, a $\epsilon_{\rm syn}$ forgatókapuhiba pedig a forgókapuk tetszőleges szögekkel történő szintetizálásának hibája.

Feljegyzés

Ha nincs megadva más érték, a $\epsilon$ hibakeret egységesen oszlik el a logikai hiba, a T állapothiba és a rotációs kapu hibája között.

Vegye figyelembe, hogy a lepárlás és a forgásszintézis esetében a $\epsilon_{\rm dis}$ és a $\epsilon_{\rm syn}$ hibakeretek egységesen vannak elosztva az összes szükséges T-állam és az összes szükséges forgatókapu között. Ha a bemeneti algoritmusban nincsenek rotációs kapuk, a hibakeret egységesen logikai hibákra és T-állapothibákra oszlik.

Hibakeret átadása

A hibakeret kétféleképpen határozható meg, ha 0 és 1 közötti számot ad meg. Futtatáskor qsharp.estimateátadhatja a hibakeretet. Ha például egy 1/3-as hibakeretet szeretne kiválasztani, írja be a következőt:

qsharp.estimate("RunProgram()", params=
                {'errorBudget': 0.333
                })

A hiba tervezett paramétereit az osztálynak EstimatorParamsis átadhatja.

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.error_budget = 0.333 # error budget of 1/3

qsharp.estimate("RunProgram()", params=params)

Emellett külön-külön is megadhatja a hibakeret minden összetevőjét. Az összes érték összege a teljes hibakeret, és 0 és 1 között kell lennie. Ha egy kvantum-algoritmus nem tartalmaz T állapotokat vagy forgásokat, akkor az értékek t_states rotations 0 vagy 0 lehetnek.

Az alábbi kód bemutatja, hogyan adhatja meg a hiba tervezett paraméterét T állapotokkal és forgatásokkal:

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()
params.error_budget.logical = 0.01
params.error_budget.t_states = 0.02
params.error_budget.rotations = 0.03

Megszorítások

Az "constraints" osztály használatával korlátozásokat alkalmazhat a T-gyári összetevő szintjén. A korlátozások módosításával optimalizálhatja a becsléseket a qubitek számának csökkentése vagy a futtatókörnyezet csökkentése érdekében.

Paraméter Adattípus Leírás
logical_depth_factor float A végrehajtási idő szabályozása. Ha értéke 1-nél nagyobb, akkor a logikai ciklusok kezdeti számát , más néven logikai mélységet megszorozza ez a szám. A csökkentéssel logical_depth_factornövelheti a T-gyár meghívásának számát egy adott időpontban, ami kevesebb T-gyári példányt eredményez, amelyek ugyanannak a T-állapotnak a előállításához szükségesek. Ha csökkenti a T-gyári példányok számát, az algoritmus futásideje ennek megfelelően növekszik. A teljes futtatókörnyezet skálázási tényezője nagyobb lehet, mivel a szükséges logikai hibaarány a ciklusok további száma miatt nő.
max_t_factories egész szám A T-gyári példányok maximális száma. Az Erőforrásbecslő úgy határozza meg a szükséges erőforrásokat, hogy kiválasztja az optimális számú T-gyári példányt, amely minimalizálja a felhasznált fizikai qubitek számát, az időterhelés figyelembe vétele nélkül. A max_t_factories paraméter korlátozza a példányok maximális számát, ezért ennek megfelelően módosítsa a logikai ciklusok számát. További információ: T factory physical becslés.
max_duration idősztring Az algoritmus maximális futtatókörnyezete. Az erőforrásbecslő jelenleg csak egyet max_duration vagy max_physical_qubits korlátozást fogad el, kettőt azonban nem. Ha max_duration meg van adva, az erőforrásbecslő megpróbálja megtalálni a legjobb becslést max_physical_qubits a megadott maximális számmal korlátozott megoldások között.
max_physical_qubits egész szám Az algoritmushoz tartozó fizikai qubitek maximális száma. Az erőforrásbecslő jelenleg csak egyet max_duration vagy max_physical_qubits korlátozást fogad el, kettőt azonban nem. Ha max_physical_qubits meg van adva, az erőforrásbecslő megpróbálja megtalálni a legjobb becslést max_duration a megadott maximális számmal korlátozott megoldások között.

Az alábbi kód bemutatja, hogyan adhatja meg a kvantum-algoritmusok korlátait:

from qsharp.estimator import EstimatorParams

params = EstimatorParams()

params.constraints.max_duration = "1 s"
params.constraints.logical_depth_factor = 1.5
params.constraints.max_t_factories = 10

Feljegyzés

Ha a megadott érték túl kicsi ahhoz, hogy max_duration max_physical_qubits megvalósítható megoldást találjon, az erőforrás-becslés hibát ad vissza. Ha nincs megadva sem max_duration max_physical_qubits korlátozás, az erőforrásbecslő a legrövidebb idő alatt keres megoldást.

Tipp.

Használhatja max_duration és max_physical_qubits befolyásolhatja a megoldásteret, és olyan megoldásokat is találhat, amelyek hosszabb futásidejű, de kisebb számú qubitet tartalmaznak a korlátozások nélküli megoldásokhoz képest. A futtatókörnyezet és a qubitek száma között kompromisszum áll fenn, és ez a kompromisszum néhány algoritmus esetében hatékonyan kezelhető, és a különböző algoritmusokra eltérő hatással van. A [arXiv:2211.07629] iv. táblázata a kvantumdinamikai algoritmusok qubitjeinek és futtatókörnyezetének tényleges kihasználtságát szemlélteti. További információ: Kvantumerőforrás-becslés idő vagy qubitkorlátok száma mintával.

Desztillációs egységek

Az osztályban megadhatja a T-gyárak desztillációs algoritmusainak specifikációit.DistillationUnitSpecification A specifikáció lehet előre definiált vagy egyéni. Előre definiált specifikációt a desztillációs egység nevének kiválasztásával adhat meg: 15-1 RM vagy 15-1 space-efficient.

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.name = "15-1 RM" # predefined distillation unit

params.distillation_unit_specifications.append(unit)

Mindkét esetben a 15-1 jelölés 15 bemeneti T állapotot és 1 kimeneti T állapotot jelent. A 15-1 space-efficient lepárlási egység kevesebb qubitet használ, mint 15-1 RM amennyit használ, de több futtatókörnyezetet igényel. További információkért lásd a VI. táblázatot.

Tipp.

Az előre definiált desztillációs egységek jobb teljesítményt nyújtanak az egyéniekkel összehasonlítva.

A desztillációs egységek testreszabása

Testre szabhatja saját desztillációs egységeit. A desztillációs egységek pontos paraméterei a következők.

qsharp.estimate("RunProgram()", params=
                    {"distillationUnitSpecifications": {
                        "displayName": <string>, 
                        "numInputTs": <int>,
                        "numOutputTs": <int>,
                        "failureProbabilityFormula": <string>,
                        "outputErrorRateFormula": <string>,
                        "physicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecificationFirstRoundOverride": <protocol specific parameters>, # Only if "logicalQubitSpecification"
                        }
                })

A numerikus paraméterek várhatóan pozitívak lesznek. Megadja displayName , hogy a lepárlási egység hogyan jelenjen meg a kimeneti eredményekben.

Az alábbi kód bemutatja, hogyan adhatja meg a desztillációs egység paramétereit egy kvantum-algoritmushoz az osztály és az DistillationUnitSpecification ProtocolSpecificDistillationUnitSpecification osztály használatával.

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification, ProtocolSpecificDistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.display_name = "T"
unit.failure_probability_formula = "c"
unit.output_error_rate_formula = "r"
unit.num_input_ts = 1
unit.num_output_ts = 2

physical_qubit_specification = ProtocolSpecificDistillationUnitSpecification()
physical_qubit_specification.num_unit_qubits = 1
physical_qubit_specification.duration_in_qubit_cycle_time = 2
unit.physical_qubit_specification = physical_qubit_specification

A képletek failure_probability_formula output_error_rate_formula olyan egyéni képletek, amelyek alapszintű aritmetikai műveleteket, állandókat és csak három paramétert használnak:

  • clifford_error_rate, más néven c.
  • readout_error_rate, más néven r.
  • input_error_rate, más néven z.

Tekintse meg az alábbi példákat az egyéni képletekre hosszú és rövid jelöléssel. Ezek a példák a standard implementációban alapértelmezés szerint használt képleteket szemléltetik.

Paraméter Hosszú képlet Rövid képlet
failure_probability_formula "15.0 * input_error_rate + 356,0 * clifford_error_rate" "15,0 * z + 356,0 * c"
output_error_rate_formula "35,0 * input_error_rate ^ 3 + 7,1 * clifford_error_rate" "35,0 * z ^ 3 + 7,1 * c"

Legalább egy paramétert physical_qubit_specification logical_qubit_specification meg kell adni. Ha csak az előbbi van megadva, a desztillációs egység alkalmazható fizikai qubitekre. Ha csak az utóbbi van megadva, a lepárlási egység alkalmazható logikai qubitekre. Ha mindkettő rendelkezésre áll, a desztillációs egység mindkét qubittípusra alkalmazható.

A paraméter logical_qubit_specification_first_round_override csak akkor adható meg, ha logical_qubit_specification meg van adva. Ha igen, felülbírálja a lepárlás első fordulójában alkalmazott eset értékeit logical_qubit_specification . A szükséges értéknek <protocol specific parameters> logical_qubit_specification_first_round_override követnie kell a sémát:

{
    "numUnitQubits": <int>,
    "durationInQubitCycleTime": <double>
}

Pareto határbecslés

Egy algoritmus erőforrásainak becslésekor fontos figyelembe venni a fizikai qubitek száma és az algoritmus futtatókörnyezete közötti kompromisszumot. Az algoritmus futásidejének csökkentése érdekében fontolja meg a lehető legtöbb fizikai qubit lefoglalását. A fizikai qubitek számát azonban a kvantumhardverben elérhető fizikai qubitek száma korlátozza. Az erőforrás-becslés egyik legfontosabb aspektusa a futtatókörnyezet és a rendszerméret közötti kompromisszum megértése.

A Pareto-határbecslés több becslést is biztosít ugyanahhoz az algoritmushoz, amelyek mindegyike a qubitek száma és a futtatókörnyezet közötti kompromisszumokat mutatja.

Feljegyzés

Ha a Visual Studio Code-ban futtatja az Erőforrás-becslést a Q#: Erőforrásbecslések kiszámítása lehetőséggel, a Pareto-határbecslés alapértelmezés szerint engedélyezve van.

Ha a Pythonban futtatja az Erőforrásbecslőt, a paramétert a "estimateType" következőképpen kell megadnia "frontier": .

result = qsharp.estimate("RunProgram()", params=
                    {"qubitParams": { "name": "qubit_maj_ns_e4" },
                    "qecScheme": { "name": "surface_code" },
                    "estimateType": "frontier", # Pareto frontier estimation
                    }
                )

Ha a Pareto-határbecslés eredményeit szeretné vizualizálni, használhatja a függvényt EstimatesOverview . Ez a függvény a határbecslés eredményeit jeleníti meg táblázatban és egy téridő-diagramban. További információ: Téridő diagram.

from qsharp_widgets import EstimatesOverview

EstimatesOverview(result)

Feljegyzés

Ha probléma merül fel az erőforrásbecslő használata során, tekintse meg a hibaelhárítási lapot, vagy lépjen kapcsolatba a problémával AzureQuantumInfo@microsoft.com.

Következő lépések