Spouštění hybridních úloh kvantových výpočtů s adaptivním target profilem
Hybridní computing kombinuje klasické a kvantové výpočetní procesy k řešení složitých problémů.
V hybridním computingu klasický kód řídí provádění kvantových operací na základě měření středního okruhu, zatímco fyzické qubity zůstávají aktivní. Ke spouštění složitých problémů můžete použít běžné programovací techniky, jako jsou vnořené podmíněné volání, smyčky a volání funkcí, a snížit tak počet potřebných snímků. Díky technikám opětovného použití qubitu můžou větší programy běžet na počítačích s menším počtem qubitů.
Tento článek vysvětluje, jak odesílat hybridní úlohy do Azure Quantum pomocí QIR Adaptive RItarget profilu. Profil adaptivní ri target nabízí podporu měření středního okruhu, toku řízení na základě měření, resetování qubitu a klasického celočíselného výpočtu.
Požadavky
- Účet Azure s aktivním předplatným. Pokud nemáte účet Azure, zaregistrujte se zdarma a zaregistrujte si předplatné s průběžným platbou.
- Pracovní prostor Azure Quantum. Další informace najdete v tématu Vytvoření pracovního prostoru Azure Quantum.
- Pokud chcete odesílat Q# samostatné programy, potřebujete následující požadavky:
- Visual Studio Code s nainstalovaným rozšířením Azure Quantum Development Kit
- Nejnovější verze rozšíření AzureQuantum Development Kit.
- Pokud chcete odeslat Python + Q# programy, potřebujete následující požadavky:
Prostředí Pythonu s nainstalovaným Pythonem a Pipem
Azure Quantum
azure-quantum
aqsharp
balíčky.pip install --upgrade azure-quantum qsharp
Podporovaný targets
Pokud chcete spouštět hybridní úlohy kvantových výpočtů, musíte vybrat kvantového poskytovatele, který podporuje profil adaptivní rezervované instancetarget.
V současné době se v Quantinuutargets podporuje adaptivní target profil ve službě Azure Quantum.
Odesílání adaptivních úloh RI
Pokud chcete odesílat hybridní úlohy kvantových výpočtů, musíte profil nakonfigurovat target jako QIR Adaptive RI, kde ri představuje "qubit Reset a Integer computations".
Profil QIR Adaptive RItarget nabízí podporu měření středního okruhu, toku řízení založeného na měření, resetování qubitu a klasického celočíselného výpočtu.
Hybridní kvantové úlohy můžete do Azure Quantum odesílat jako Q# samostatné programy nebo programy Python + Q# programy. Pokud chcete nakonfigurovat target profil pro hybridní kvantové úlohy, prohlédnou si následující části.
Pokud chcete nakonfigurovat profil pro hybridní úlohy v editoru target Visual Studio Code, postupujte takto:
- Otevřete program v editoru Q# Visual Studio Code.
- Vyberte Zobrazit –> Paleta příkazů a zadejteQ#: Nastavte profil Azure Quantum QIRtarget. Stiskněte klávesu Enter.
- Vyberte možnost QIR Adaptive RI.
Jakmile nastavíte QIR Adaptive RI jako target profil, můžete svůj Q# program odeslat jako hybridní kvantovou úlohu do Quantinuum.
- Vyberte Zobrazit –> Paleta příkazů a zadejte Q#: Připojte se k pracovnímu prostoru Azure Quantum. Stiskněte klávesu Enter.
- Vyberte účet Azure a podle pokynů se připojte k preferovanému adresáři, předplatnému a pracovnímu prostoru.
- Po připojení rozbalte v podokně Průzkumníka pracovní prostory Quantum.
- Rozbalte pracovní prostor a rozbalte poskytovatele Quantinuum .
- Vyberte libovolnou dostupnou targetpoložku Quantinuum, například quantinuum.sim.h1-1e.
- Výběrem ikony přehrávání napravo od target názvu zahájíte odesílání aktuálního Q# programu.
- Přidejte název pro identifikaci úlohy a počet snímků.
- Stisknutím klávesy Enter odešlete úlohu. Stav úlohy se zobrazí v dolní části obrazovky.
- Rozbalte úlohy a najeďte myší na úlohu, která zobrazuje časy a stav vaší úlohy.
Podporované funkce
Následující tabulka uvádí podporované funkce pro hybridní kvantové výpočty s Quantinuum v Azure Quantum.
Podporovaná funkce | Notes |
---|---|
Hodnoty Dynamics | Logické hodnoty a celá čísla, jejichž hodnota závisí na výsledku měření |
Smyčky | Pouze klasické smyčky ohraničené |
Libovolný tok řízení | Použití větvení if/else |
Měření středního obvodu | Využívá klasické prostředky registru. |
Opakované použití qubitu | Podporováno |
Klasické výpočty v reálném čase | 64bitové aritmetické aritmetické celé číslo se 64bitovým signedm Využívá klasické prostředky registru. |
Sada QDK poskytuje targetkonkrétní zpětnou vazbu, pokud Q# nejsou u vybraného targetjazyka podporované funkce. Pokud váš Q# program při spouštění hybridních kvantových úloh obsahuje nepodporované funkce, zobrazí se vám v době návrhu chybová zpráva. Další informace najdete na wikistráně QIR.
Poznámka:
Pokud chcete získat odpovídající zpětnou vazbu, musíte vybrat příslušný QIR Adaptive RItarget profil, abyste získali odpovídající zpětnou vazbu při použití Q# funkcí, které target nepodporuje.
Pokud chcete zobrazit podporované funkce v akci, zkopírujte následující kód do Q# souboru a přidejte další fragmenty kódu.
import Microsoft.Quantum.Measurement.*;
import Microsoft.Quantum.Math.*;
import Microsoft.Quantum.Convert.*;
operation Main() : Result {
use (q0, q1) = (Qubit(), Qubit());
H(q0);
let r0 = MResetZ(q0);
// Copy here the code snippets below to see the supported features
// in action.
// Supported features include dynamic values, classically-bounded loops,
// arbitrary control flow, and mid-circuit measurement.
r0
}
Quantinuum podporuje dynamické booly a celá čísla, což znamená logické hodnoty a celá čísla, která závisí na výsledcích měření. Všimněte si, že r0
typ Result
, který lze použít ke generování dynamických logických hodnot a celočíselné hodnoty.
let dynamicBool = r0 != Zero;
let dynamicBool = ResultAsBool(r0);
let dynamicInt = dynamicBool ? 0 | 1;
Quantinuum podporuje dynamické logické hodnoty a celá čísla, ale nepodporuje dynamické hodnoty pro jiné datové typy, například double. Zkopírujte následující kód, abyste viděli zpětnou vazbu týkající se omezení dynamických hodnot.
let dynamicDouble = r0 == One ? 1. | 0.; // cannot use a dynamic double value
let dynamicInt = r0 == One ? 1 | 0;
let dynamicDouble = IntAsDouble(dynamicInt); // cannot use a dynamic double value
let dynamicRoot = Sqrt(dynamicDouble); // cannot use a dynamic double value
I když nejsou u některých datových typů podporovány dynamické hodnoty, je možné tyto datové typy stále používat se statickými hodnotami.
let staticRoot = Sqrt(4.0);
let staticBigInt = IntAsBigInt(2);
V určitých situacích se nedají použít ani dynamické hodnoty podporovaných typů. Například Quantinuum nepodporuje dynamická pole, tj. matice, jejichž velikost závisí na výsledku měření. Quantinuum nepodporuje ani dynamicky vázané smyčky. Zkopírujte následující kód, abyste viděli omezení dynamických hodnot.
let dynamicInt = r0 == Zero ? 2 | 4;
let dynamicallySizedArray = [0, size = dynamicInt]; // cannot use a dynamically-sized array
let staticallySizedArray = [0, size = 10];
// Loops with a dynamic condition are not supported by Quantinuum.
for _ in 0..dynamicInt {
Rx(PI(), q1);
}
// Loops with a static condition are supported.
let staticInt = 3;
for _ in 0..staticInt {
Rx(PI(), q1);
}
Quantinuum podporuje tok řízení, včetně if/else
větvení, pomocí statických i dynamických podmínek. Větvení dynamických podmínek se také označuje jako větvení na základě výsledků měření.
let dynamicInt = r0 == Zero ? 0 | 1;
if dynamicInt > 0 {
X(q1);
}
let staticInt = 1;
if staticInt > 5 {
Y(q1);
} else {
Z(q1);
}
Quantinuum podporuje smyčky s klasickými podmínkami a včetně if
výrazů.
for idx in 0..3 {
if idx % 2 == 0 {
Rx(ArcSin(1.), q0);
Rz(IntAsDouble(idx) * PI(), q1)
} else {
Ry(ArcCos(-1.), q1);
Rz(IntAsDouble(idx) * PI(), q1)
}
}
Quantinuum podporuje měření středního okruhu, tj. větvení na základě výsledků měření.
if r0 == One {
X(q1);
}
let r1 = MResetZ(q1);
if r0 != r1 {
let angle = PI() + PI() + PI()* Sin(PI()/2.0);
Rxx(angle, q0, q1);
} else {
Rxx(PI() + PI() + 2.0 * PI() * Sin(PI()/2.0), q1, q0);
}
Odhad nákladů na hybridní úlohu kvantového computingu
Náklady na spuštění hybridní úlohy kvantového computingu na hardwaru Quantinuum můžete odhadnout tak, že ji nejprve spustíte v emulátoru.
Po úspěšném spuštění v emulátoru:
- V pracovním prostoru Azure Quantum vyberte Správa úloh.
- Vyberte úlohu, kterou jste odeslali.
- V místní nabídce Podrobnosti úlohy vyberte Odhad nákladů, abyste viděli, kolik kreditů emulátoru Quantinuum bylo použito. Toto číslo se překládá přímo na počet řadičů domény (kvantových kreditů Quantinuum), které jsou potřeba ke spuštění úlohy na hardwaru Quantinuum.
Poznámka:
Quantinuum zruší registraci celého okruhu a vypočítá náklady na všechny cesty kódu, ať už jsou podmíněně spuštěné nebo ne.
Ukázky hybridních kvantových výpočtů
Následující ukázky najdete v Q# úložišti ukázek kódu. Předvádějí aktuální sadu funkcí pro hybridní kvantové výpočty.
Tří qubitový kód opakování
Tato ukázka ukazuje, jak vytvořit tří qubitový kód opakování, který lze použít k detekci a opravě chyb překlopení bitů.
Využívá integrované funkce hybridního výpočetního prostředí ke zjištění počtu provedení opravy chyb, zatímco stav logického registru qubitu je koherentní.
Ukázku kódu najdete tady.
Odhad iterativní fáze
Tento ukázkový program ukazuje odhad iterativní fáze v rámci Q#. Pomocí odhadu iterativní fáze vypočítá vnitřní součin mezi dvěma dvojrozměrnými vektory kódovanými na target qubitu a qubitem ancilla. Další řídicí qubit je také inicializován, což je jediný qubit používaný k měření.
Okruh začíná kódováním dvojice vektorů na qubitu target a qubitu ancilla. Potom použije operátor Oracle na celý registr, který je řízen řídicím qubitem, který je nastavený ve stavu $\ket +$. Řízený operátor Oracle generuje fázi ve stavu $\ket 1$ řídicího qubitu. To pak lze přečíst použitím brány H na řídicí qubit, aby fáze byla při měření pozorovatelná.
Ukázku kódu najdete tady.
Poznámka:
Tento ukázkový kód napsali členové týmu KPMG Quantum v Austrálii a spadají pod licenci MIT. Ukazuje rozšířené možnosti QIR Adaptive RItargets a využívá ohraničené smyčky, volání klasických funkcí za běhu, vnořené podmíněné if příkazy, měření mid okruhu a opakované použití qubitu.