target Přizpůsobení parametrů estimátoru prostředků
Tento článek ukazuje, jak přizpůsobit target parametry nástroje Azure Quantum Resource Estimator tak, aby odpovídaly charakteristikám počítače, které používáte target. Estimátor prostředků používá tyto parametry k odhadu prostředků potřebných ke spuštění kvantového algoritmu na kvantovém počítači.
Poznámka
Pokud při práci s nástrojem pro posouzení prostředků narazíte na nějaký problém, podívejte se na stránku Řešení potíží.
Požadavky
Prostředí Pythonu s nainstalovaným Pythonem a Pipem .
Nejnovější verze editoru Visual Studio Code nebo otevřete VS Code na webu.
VS Code s nainstalovanou sadou Azure Quantum Development Kit, Pythonem a rozšířeními Jupyter .
Nejnovější azure Quantum
qsharp
aqsharp-widgets
balíčky.python -m pip install --upgrade qsharp qsharp-widgets
Cílové parametry
Estimátor prostředků vypočítá odhad prostředků, jako je počet qubitů a doba běhu, které by byly potřeba k implementaci daného kvantového algoritmu pomocí dané technologie qubitu a s pevnou sadou možností architektury.
Proto estimátor prostředků přijímá sadu vstupů s předdefinovaných hodnotami, které vám umožní snadno začít:
- Model fyzického qubitu, který definuje vlastnosti základních fyzických qubitů.
- Schéma QEC (Quantum Error Correction), což je předpokládané schéma oprav kvantových chyb.
- Rozpočet chyb, což je celková povolená chyba, to znamená, kolikrát může program zrušit úspěch.
- Omezení na úrovni komponenty, což jsou počet logických cyklů a počet kopií T factory.
- Destilační jednotky specifikují algoritmy destilace v továrnách T.
- Paretův odhad hranice pro spuštění více odhadů počtu qubitů a modulu runtime pro stejný algoritmus.
Parametry fyzického qubitu
Když estimátor prostředků modeluje předpoklady fyzických qubitů, používá k provozu qubitů dvě různé fyzické instrukční sady. Fyzická instrukční sada může být buď brána, nebo majorana. Instrukční sada založená na branách poskytuje měření s jedním qubitem, jedno qubitovou bránu (včetně bran T) a dvou qubitovou bránu. Instrukční sada Majorana poskytuje fyzickou bránu T, jedno qubitové měření a operace měření spojení se dvěma qubity.
Můžete si vybrat ze šesti předdefinovaných parametrů qubitu, z nichž čtyři mají sady instrukcí založené na bráně a dva s instrukční sadou Majorana. Tyto modely qubitů pokrývají celou řadu provozních dob a chybovosti, což umožňuje dostatečné zkoumání nákladů na prostředky potřebných k umožnění praktických kvantových aplikací.
Parametr Qubitu | Třída rozhraní Python API | Description |
---|---|---|
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" |
GATE_NS_E3 , GATE_NS_E4 |
Provozní doby a věrnosti mohou odpovídat budoucím verzím supravodicích transmonových qubitů nebo qubitů spinu, které obvykle mají provozní doby v režimu nanosekund. U těchto qubitů se předpokládá, že operace hradla a měření mají 50 ns a 100 ns. Míra chyb brány s jedním a dvěma qubity se předpokládá jako hodnota $10^{-3}$ jako realistická targeta $10^{-4}$ jako optimistická target hodnota pro vertikálně navyšovaný systém. |
"qubit_gate_us_e3" , "qubit_gate_us_e4" |
GATE_US_E3 , GATE_US_E4 |
Provozní doby a věrnosti můžou odpovídat budoucím verzím qubitů založených na iontech, které mají obvykle provozní doby v mikrosekundovém režimu. Na základě typických předpokladů pro iontové qubity se předpokládá, že brány a operace měření budou trvat 100 μs. Míra chyb pro cliffordská hradla s jedním qubitem je $10^{-3}$ jako realistická target a $10^{-4}$ jako optimistická target, zatímco míra chyb pro jedno qubitová ne Cliffordová hradla (brána T) je $10^{-6}$. U dvou qubitových bran je chybovost $10^{-3}$ jako realistická target a $10^{-4}$ jako optimistická target. |
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" |
MAJ_NS_E4 , MAJ_NS_E6 |
Provozní doby a věrnosti můžou odpovídat budoucím vylepšeným verzím qubitů Majorana. U těchto qubitů se předpokládá, že operace hradla a měření budou trvat 100 ns. Aby bylo možné zohlednit topologickou ochranu v hardwaru, míra společných měření s jedním qubitem a dvěma qubity (Cliffordovské chybovosti) se předpokládá jako $10^{-4}$ jako realistický targeta $10^{-6}$ jako optimistický target. Jiné než Cliffordovy operace v této architektuře nemají topologickou ochranu, míra chyb u fyzických bran T, které nejsou cliffordovými branami, je 5 %. |
Poznámka
Pokud není zadaná jiná hodnota, výchozí hodnota pro qubitový model je "qubit_gate_ns_e3"
.
Kompletní předdefinované parametry qubitu jsou pro referenci následující:
{
"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
}
}
Předávání předdefinovaných parametrů qubitu
Existují dva způsoby, jak programově určit předdefinované parametry qubitu. Název modelu qubitu pro qubitParams
třídu můžete vybrat při spuštění příkazu qsharp.estimate
. Pokud například chcete vybrat "qubit_maj_ns_e6"
parametr qubitu, zapište:
qsharp.estimate("RunProgram()", params=
{"qubitParams": {
"name": "qubit_maj_ns_e6"
},
})
Parametry EstimatorParams
qubitu můžete také předat třídě pomocí QubitParams
příkazu . Pokud například chcete vybrat MAJ_NS_E6
parametr qubitu, zapište:
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)
Přizpůsobení předdefinovaných parametrů qubitu
Předdefinované parametry qubitu můžete přizpůsobit zadáním názvu a následnou aktualizací všech ostatních hodnot. Pokud například chcete snížit chybovost měření dvou qubitů v "qubit_maj_ns_e4", zapište:
qsharp.estimate("RunProgram()", params=
{"qubitParams": {
"name": "qubit_maj_ns_e4",
"twoQubitJointMeasurementErrorRate": 1e-5,
},
})
Nebo můžete předat pokyny ve formě seznamu.
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
Parametry qubitů pro qubity založené na bráně
Identifikátor Pythonu | Datový typ | Description |
---|---|---|
name |
řetězec | Název modelu qubitu |
instruction_set |
"gate_based" | Základní technologie qubitů |
one_qubit_measurement_time |
řetězec času | Doba provozu měření s jedním qubitem ($t_{\rm meas}$) v ns |
one_qubit_gate_time |
řetězec času | Doba operace pro jedno qubitovou bránu ($t_{\rm gate}$) v ns |
two_qubit_gate_time |
řetězec času | Doba provozu pro dvou qubitovou bránu v ns |
t_gate_time |
řetězec času | Doba provozu pro jedno qubitovou bránu mimo Clifford v ns |
one_qubit_measurement_error_rate |
float | Míra chyb při měření s jedním qubitem |
one_qubit_gate_error_rate |
float | Míra chyb pro Cliffordovou bránu s jedním qubitem ($p$) |
two_qubit_gate_error_rate |
float | Míra chyb pro dvou qubitovou Cliffordovou bránu |
t_gate_error_rate |
float | Míra chyb při přípravě stavu jiného než Clifforda s jedním qubitem ($p_T$) |
idle_error_rate |
float | Míra chyb odpovídající nečinnosti |
Následující kód ukazuje, jak zadat vlastní parametry qubitu pro instrukční sadu založenou na bráně:
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
Poznámka
Pokud nejsou zadané, výchozí hodnoty pro two_qubit_gate_time
a one_qubit_gate_time
t_gate_time
, výchozí hodnoty pro two_qubit_gate_error_rate
a t_gate_error_rate
a výchozí one_qubit_gate_error_rate
hodnota pro idle_error_rate
se nastaví na one_qubit_measurement_error_rate
.
Parametry qubitů pro qubity Majorana
Identifikátor Pythonu | Datový typ | Description |
---|---|---|
name |
řetězec | Název modelu qubitu |
instruction_set |
"majorana" | Základní technologie qubitů |
one_qubit_measurement_time |
řetězec času | Doba provozu měření s jedním qubitem ($t_{\rm meas}$) v ns |
two-qubit_joint_measurement_time |
řetězec času | Provozní doba pro měření dvou qubitů v ns |
t_gate_time |
řetězec času | Doba provozu pro jedno qubitovou bránu mimo Clifford v ns |
one_qubit_measurement_error_rate |
float | Míra chyb při měření s jedním qubitem |
two_qubit_joint_measurement_error_rate |
float | Míra chyb při měření dvou qubitů |
t_gate_error_rate |
float | Míra chyb při přípravě stavu s jedním qubitem mimo Clifford ($p_T$) |
idle_error_rate |
float | Míra chyb odpovídající nečinné rychlosti |
Minimální šablona pro instrukční sadu založenou na Majoraně se všemi požadovanými hodnotami je:
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
Poznámka
Pokud není zadán, hodnoty pro two_qubitJointMeasurementTime
a výchozí hodnotu one_qubit_measurement_time
, hodnoty pro two_qubit_joint_measurement_error_rate
a t_gate_error_rate
výchozí one_qubit_measurement_error_rate
hodnoty pro a výchozí hodnota pro idle_error_rate
one_qubit_measurement_error_rate
t_gate_time
hodnotu .
Pro one_qubit_measurement_error_rate
a two_qubit_joint_measurement_error_rate
můžete zadat chybovost odpovídající naměřené hodnotě readout
a zpracování process
měření. Tyto hodnoty můžou být <double>
čísla nebo dvojice čísel. Příklad:
params.qubit_params.two_qubit_joint_measurement_error_rate = \
MeasurementErrorRate(process=0.00005, readout=0.00007)
Poznámka
Pokud v měření qubitu Majorana zadáte jednu číselnou hodnotu pro chybovost s jedním qubitem a dvěma qubity, může být míra chyb čtení i zpracování stejná.
Důležité
Všechny hodnoty, které nejsou zadané, budou mít výchozí hodnotu, například určení "qubit": {"oneQubitGateTime":"200 ns"}
bude modelovat qubit založený na bráně, ve kterém je čas brány se dvěma qubity i jeden qubitový čas brány 200 ns. U jednotek je třeba zadat časové řetězce, což jsou čísla s plovoucí desetinnou čárkou s dvojitou přesností, následované mezerou a časovou jednotkou pro tyto hodnoty, kde jsou možné časové přípony ns
, µs
(nebo us
), ms
a s
.
Schémata oprav kvantových chyb
K provádění kvantových aplikací v praktickém měřítku by kvantové operace měly mít nízkou chybovost. Tato míra targets chyb je obvykle nad rámec možností nezpracovaných fyzických qubitů. K překonání tohoto omezení jsou dvě klíčové techniky, které tvoří stavební bloky rozsáhlých kvantových počítačů, kvantová oprava chyb (QEC) a výpočty odolné proti chybám. Zaprvé nám QEC umožňuje sestavit několik fyzických qubitů náchylných k chybám a vytvořit spolehlivější logický qubit, který zachovává kvantové informace lépe než základní fyzické qubity.
Vzdálenost kódu opravy chyb (nebo jen krátká vzdálenost kódu) je parametr, který řídí počet chyb, které lze opravit. Tedy chybovost logických qubitů a počet fyzických qubitů, které jsou potřeba k jejich kódování. Přesnost i počet fyzických qubitů se zvyšuje se vzdáleností kódu. Cílem je najít minimální vzdálenost kódu, která může dosáhnout požadované frekvence chyb pro konkrétní aplikaci.
Estimátor prostředků používá k modelování logických chyb s využitím exponenciálního modelu následující vzorec.
$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$
kde $d$ je vzdálenost kódu, $p$ je míra fyzických chyb a $p^*$ je prahová hodnota pro opravu kvantových chyb. Fyzická míra chyb $p$ se extrahuje z parametrů qubitu jako nejhorší míra chyb jakékoli fyzické operace Clifford v zařízení.
Konkrétně $p = {}$ max(one_qubit_measurement_error_rate
, one_qubit_gate_error_rate
, two_qubit_gate_error_rate
) pro parametry qubitu s instrukční sadou založenou na bráně a $p = {}$ max(one_qubit_measurement_error_rate
, two_qubit_joint_measurement_error_rate
) pro parametry qubitu s instrukční sadou Majorana. Schémata QEC mají obvykle prahovou hodnotu chybovosti $p^*$ pod kterou oprava chyb potlačí chyby.
Protokol QEC | Třída rozhraní PYTHON API | Description |
---|---|---|
"surface_code " |
SURFACE_CODE |
Kód povrchu založený na bráně je založen na arXiv:1208.0928 a arXiv:1009.3686. Kód povrchu Majorany je založen na arXiv:1909.03002 a arXiv:2007.00307. |
"floquet_code " |
FLOQUET_CODE |
Pouze pro qubity Majorana. Kód floquet je založen na arXiv:2202.11829. |
Poznámka
Pokud není zadána jiná hodnota, výchozí hodnota pro schéma QEC je "surface_code".
Přesné parametry pro každé předdefinované schéma QEC (včetně předfaktorové $a$, které lze extrahovat číselně pro simulace) jsou následující.
{
"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)"
}
}
Předávání předdefinovaných schémat QEC
Existují dva způsoby, jak určit předdefinovaná schémata QEC. Při spuštění qsharp.estimate
můžete pro třídu vybrat název "qecScheme"
modelu QEC. Pokud například chcete vybrat floquet kód, napište:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code"
}
})
Pomocí třídy můžete také předat seznam parametrů EstimatorParams
odhaduQECScheme
. Pokud například chcete vybrat floquet kód, napište:
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)
Přizpůsobení předdefinovaných schémat QEC
Předdefinovaná schémata QEC můžete přizpůsobit tak, že zadáte název a pak aktualizujete kteroukoli z ostatních hodnot. Pokud chcete například zvýšit pre-faktor přechodu v kódu floquet, napište:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code",
"crossingPrefactor": 0.07,
}
})
Poznámka
Pokud není zadáno, hodnoty pro "logicalCycleTime"
a výchozí hodnoty "oneQubitMeasurementTime"
jsou , výchozí hodnota pro "errorCorrectionThreshold"
0.01
a výchozí hodnota pro "crossingPrefactor"
0.03
"physicalQubitsPerLogicalQubit"
hodnotu .
Přizpůsobení schémat QEC
Nástroj Pro posouzení prostředků může abstrahovat přizpůsobené schéma QEC založené na výše uvedeném vzorci tím, že zadá hodnoty pro "crossingPrefactor"
$a$ a "errorCorrectionThreshold"
$p^*$. Dále je potřeba zadat "logicalCycleTime"
, tj. čas provedení jedné logické operace, který závisí na vzdálenosti kódu a předpokladech fyzické doby operace podkladových fyzických qubitů. Nakonec druhý vzorec vypočítá "physicalQubitsPerLogicalQubit"
, tj. počet fyzických qubitů potřebných ke kódování jednoho logického qubitu na základě vzdálenosti kódu.
Jako šablonu pro schémata QEC můžete použít následující kód:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"crossingPrefactor": <double>,
"errorCorrectionThreshold": <double>,
"logicalCycleTime": <formula string>,
"physicalQubitsPerLogicalQubit": <formula string>
}
})
Uvnitř vzorců můžete použít proměnné one_qubit_gate_time
, two_qubit_gate_time
, one_qubit_measurement_time
a two_qubit_joint_measurement_time
, jejichž hodnoty jsou převzaty z odpovídajícího pole z fyzických parametrů qubitu, a také proměnnou eccDistance
pro vzdálenost kódu vypočítanou pro logický qubit na základě vlastností fyzického qubitu, prahové hodnoty opravy chyb a prefactoru přechodu. Časové proměnné a eccDistance
lze použít k popisu logicalCycleTime
vzorce. Pro vzorec lze použít pouze vzorec physicalQubitsPerLogicalQubit
eccDistance
.
Rozpočet chyb
Celkový rozpočet chyby $\epsilon$ nastaví celkovou tolerovanou chybu algoritmu, tj. povolenou pravděpodobnost selhání algoritmu. Jeho globální hodnota musí být mezi 0 a 1 a výchozí hodnota je 0,001, což odpovídá 0,1 %. Jinými slovy, algoritmus může selhat maximálně jednou za 1000 spuštění. Tento parametr je vysoce specifický pro aplikaci.
Pokud například používáte Shorův algoritmus pro faktoring celých čísel, může být tolerována velká hodnota pro rozpočet chyb, protože je možné zkontrolovat, že výstupy jsou skutečně primárními faktory vstupu. Na druhou stranu může být pro algoritmus, který řeší problém s řešením, který nejde efektivně ověřit, potřeba menší rozpočet chyb.
Rozpočet chyb odpovídá součtu tří částí:
$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$
Pokud není zadán žádný další parametr, je rozpočet chyby $\epsilon$ rovnoměrně rozdělený a vztahuje se na chyby $\epsilon_{\log}$ pro implementaci logických qubitů, rozpočet chyby $\epsilon_{\rm dis}$ vytváří stavy T prostřednictvím destilace a rozpočet chyb $\epsilon_{\rm syn}$ syntetizuje rotační brány s libovolnými úhly.
Všimněte si, že pro destilaci a syntézu rotace jsou příslušné chybové rozpočty $\epsilon_{\rm dis}$ a $\epsilon_{\rm syn}$ rovnoměrně rozdělené mezi všechny požadované stavy T a všechny požadované rotační brány. Pokud vstupní algoritmus neobsahuje brány rotace, je rozpočet chyb rovnoměrně rozdělený na logické chyby a chyby stavu T.
Předání rozpočtu chyb
Existují dva způsoby, jak určit rozpočet chyb nastavením čísla mezi 0 a 1. Rozpočet chyb můžete předat při spuštění příkazu qsharp.estimate
. Pokud například chcete vybrat rozpočet chyby 1/3, napište:
qsharp.estimate("RunProgram()", params=
{'errorBudget': 0.333
})
Do třídy můžete také předat parametry EstimatorParams
rozpočtu chyby.
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)
Můžete také jednotlivě určit každou komponentu rozpočtu chyby. Součet všech hodnot je celkový rozpočet chyb a musí být mezi 0 a 1. Pokud kvantový algoritmus neobsahuje stavy T nebo rotace, pak hodnoty t_states
a rotations
mohou být 0.
Následující kód ukazuje, jak zadat parametr rozpočtu chyby se stavy T a obměny:
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
Omezení
Třídu můžete použít "constraints"
k použití omezení na úrovni komponent T factory . Úpravou omezení můžete optimalizovat odhady směrem ke snížení počtu qubitů nebo snížení běhu.
Parametr | Datový typ | Popis |
---|---|---|
logical_depth_factor |
float | Ovládejte dobu provádění. Pokud má hodnotu větší než 1, počáteční počet logických cyklů, označovaný také jako logická hloubka, se tímto číslem vynásobí. Snížením logical_depth_factor hodnoty můžete zvýšit počet vyvolání T továrny v daném čase, což vede k menšímu počtu kopií T factory potřebných k vytvoření stejného počtu stavů T. Když snížíte počet kopií T factory, modul runtime algoritmu se odpovídajícím způsobem zvýší. Faktor škálování pro celkový modul runtime může být větší, protože kvůli dalšímu počtu cyklů se zvyšuje požadovaná logická míra chyb. |
max_t_factories |
integer | Maximální počet kopií T factory. Nástroj Pro posouzení prostředků určuje požadované prostředky výběrem optimálního počtu kopií T factory, který minimalizuje počet použitých fyzických qubitů, bez ohledu na čas. Parametr max_t_factories omezuje maximální počet kopií, a proto odpovídajícím způsobem upravte počet logických cyklů. Další informace najdete v tématu Fyzický odhad T factory. |
max_duration |
řetězec času | Maximální doba běhu algoritmu. Estimátor prostředků přijímá v okamžiku pouze jedno omezení max_duration nebo max_physical_qubits , ale ne dvě. Pokud max_duration je zadána, nástroj Pro posouzení prostředků se pokusí najít nejlepší odhad mezi max_physical_qubits řešeními omezený maximálním zadaným počtem. |
max_physical_qubits |
integer | Maximální počet fyzických qubitů pro algoritmus Estimátor prostředků přijímá v okamžiku pouze jedno omezení max_duration nebo max_physical_qubits , ale ne dvě. Pokud max_physical_qubits je zadána, nástroj Pro posouzení prostředků se pokusí najít nejlepší odhad mezi max_duration řešeními omezený maximálním zadaným počtem. |
Následující kód ukazuje, jak určit omezení pro kvantový algoritmus:
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
Poznámka
Pokud je hodnota zadaná max_duration
nebo max_physical_qubits
je příliš malá na to, aby bylo možné najít proveditelné řešení, vrátí nástroj Pro odhad prostředků chybu. Pokud nejsou zadána žádná max_duration
max_physical_qubits
omezení, cílem nástroje Pro posouzení prostředků je najít řešení s nejkratším časem.
Tip
Můžete použít max_duration
a max_physical_qubits
k ovlivnění prostoru řešení a potenciálně najít řešení s delším modulem runtime, ale menším počtem qubitů ve srovnání s řešeními bez těchto omezení. Existuje kompromis mezi modulem runtime a počtem qubitů a tento kompromis lze efektivně spravovat u některých algoritmů s různými účinky na různé algoritmy. Tabulka IV v [arXiv:2211.07629] ukazuje efektivní využití kompromisu mezi počtem qubitů a modulem runtime pro algoritmy kvantové dynamiky. Další informace najdete v tématu Odhad kvantových prostředků s ukázkami omezení času nebo počtu qubitů .
Destilační jednotky
Pomocí třídy můžete zadat specifikace pro algoritmy DistillationUnitSpecification
destilace továren T. Specifikace může být buď předdefinovaná, nebo vlastní. Předdefinovanou specifikaci můžete zadat tak, že vyberete název destilační jednotky: 15-1 RM
nebo 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)
V obou případech znamená notace 15-1 15 vstupních stavů T a 1 výstupní stav T. Destilační 15-1 space-efficient
jednotka používá méně qubitů, ale 15-1 RM
vyžaduje více modulu runtime. Další informace najdete v tématu Tabulka VI.
Tip
Použití předdefinovaných destilačních jednotek poskytuje lepší výkon v porovnání s vlastními jednotkami.
Přizpůsobení jednotek destilace
Můžete si přizpůsobit vlastní destilační jednotky. Přesné parametry pro destilační jednotky jsou následující.
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"
}
})
Očekává se, že všechny číselné parametry budou kladné. Určuje displayName
, jak se destilační jednotka zobrazí ve výstupních výsledcích.
Následující kód ukazuje, jak zadat parametry jednotky destilace pro kvantový algoritmus pomocí DistillationUnitSpecification
třídy a ProtocolSpecificDistillationUnitSpecification
třídy.
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
Vzorce pro failure_probability_formula
a output_error_rate_formula
jsou vlastní vzorce se základními aritmetickými operacemi, konstantami a pouze třemi parametry:
clifford_error_rate
, označuje se také jakoc
.readout_error_rate
, označuje se také jakor
.input_error_rate
, označuje se také jakoz
.
Podívejte se na následující příklady vlastních vzorců používajících dlouhý a krátký zápis. Tyto příklady znázorňují vzorce používané ve výchozím nastavení v rámci standardní implementace.
Parametr | Dlouhý vzorec | Krátký vzorec |
---|---|---|
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" |
Alespoň jeden z parametrů physical_qubit_specification
nebo logical_qubit_specification
by měl být poskytnut. Pokud je k dispozici pouze první, lze destilační jednotku použít na fyzické qubity. Pokud je k dispozici pouze to druhé, lze destilační jednotku použít na logické qubity. Pokud jsou k dispozici oba typy qubitů, lze destilační jednotku použít na oba typy qubitů.
Parametr logical_qubit_specification_first_round_override
lze zadat pouze v případě, že logical_qubit_specification
je zadaný. Pokud ano, přepíše hodnoty logical_qubit_specification
v případě, že jsou použity v prvním kole destilace. Hodnota <protocol specific parameters>
požadovaná pro logical_qubit_specification_first_round_override
by měla odpovídat schématu:
{
"numUnitQubits": <int>,
"durationInQubitCycleTime": <double>
}
Paretův odhad hranice
Při odhadování prostředků algoritmu je důležité zvážit kompromis mezi počtem fyzických qubitů a modulem runtime algoritmu. Můžete zvážit přidělení co největšího počtu fyzických qubitů, abyste snížili běh algoritmu. Počet fyzických qubitů je však omezený počtem fyzických qubitů dostupných na kvantovém hardwaru. Pochopení kompromisu mezi modulem runtime a škálováním systému je jedním z důležitějších aspektů odhadu prostředků.
Paretův odhad hranice poskytuje více odhadů pro stejný algoritmus, z nichž každý ukazuje kompromisy mezi počtem qubitů a modulem runtime.
Poznámka
Pokud nástroj Pro posouzení prostředků spustíte v editoru Visual Studio Code pomocí Q#možnosti : Vypočítat odhady prostředků , paretův odhad hranice je ve výchozím nastavení povolený.
Pokud spustíte Nástroj pro posouzení prostředků v Pythonu "estimateType"
, musíte zadat parametr jako "frontier"
.
result = qsharp.estimate("RunProgram()", params=
{"qubitParams": { "name": "qubit_maj_ns_e4" },
"qecScheme": { "name": "surface_code" },
"estimateType": "frontier", # Pareto frontier estimation
}
)
Pokud chcete vizualizovat výsledky paretovského odhadu EstimatesOverview
hranice, můžete použít funkci . Tato funkce zobrazí výsledky odhadu hranic v tabulce a prostoroprostorovém diagramu. Další informace najdete v tématu Prostoroprostorový diagram.
from qsharp_widgets import EstimatesOverview
EstimatesOverview(result)
Poznámka
Pokud při práci s nástrojem pro posouzení prostředků narazíte na nějaký problém, podívejte se na stránku Řešení potíží nebo se obraťte na AzureQuantumInfo@microsoft.com.
Další kroky
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro