Interaktivní kvantové výpočty: relace
Tento článek vysvětluje architekturu interaktivních kvantových výpočtů, označovanou také jako relace, a postup vytvoření nové relace.
V tomto modelu hybridních kvantových výpočtů je možné přesunout výpočetní prostředek klienta do cloudu, což vede k nižší latenci a možnosti opakovat provádění kvantového okruhu s různými parametry. Úlohy lze logicky seskupit do jedné relace a úlohy v této relaci mohou mít prioritu před úlohami, které nejsou relacemi. I když se stavy qubitu mezi úlohami neuchovávají, relace umožňuje kratší dobu fronty úloh a delší problémy se spuštěním.
Požadavky
K vytvoření relace potřebujete následující 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ými platbou.
Pracovní prostor Azure Quantum. Další informace najdete v tématu Vytvoření pracovního prostoru Azure Quantum.
Prostředí Pythonu s nainstalovaným Pythonem a Pipem .
Balíček Azure Quantum
azure-quantum
. Pokud chcete použít Qiskit nebo Cirq, musíte balíček nainstalovatazure-quantum
se značkami [qiskit] nebo [cirq].pip install --upgrade azure-quantum[qiskit]
Co je relace?
Relace je logické seskupení jedné nebo více úloh odeslaných do jedné target. Každá relace má ke každé úloze v dané relaci připojené jedinečné ID.
Relace umožňují uspořádat více kvantových výpočetních úloh s možností spouštění klasického kódu mezi kvantovými úlohami. Budete moct spouštět složité algoritmy, které vám pomůžou lépe uspořádat a sledovat jednotlivé úlohy kvantových výpočtů.
Klíčovým uživatelským scénářem, ve kterém můžete chtít kombinovat úlohy v relaci, jsou parametrizované kvantové algoritmy, kde výstup jedné úlohy kvantového computingu informuje o parametrech další úlohy kvantového computingu. Nejběžnějšími příklady tohoto typu algoritmu jsou Variational Quantum Eigensolvers (VQE) a Quantum Approximate Optimization Algorithms (QAOA).
Podporovaný hardware
Relace jsou podporované u všech poskytovatelů hardwaru kvantových výpočtů, v současnosti IonQ, Quantinuum a Rigetti. V některých případech mají úlohy odeslané v rámci relace prioritu ve frontě daného objektu target. Další informace najdete v tématu Chování cíle.
Začínáme s relacemi
Relace se spravují pomocí Pythonu a dají se vytvářet pro libovolné kvantové programy QIR, včetně Q#programů , Qiskit a Cirq.
Tento příklad ukazuje, jak vytvořit relaci s Q# vloženým kódem pomocí Jupyter Notebook v editoru Visual Studio Code. Relace můžete vytvářet také pomocí programu v Pythonu , který vyvolá sousední Q# program.
Poznámka
Relace se spravují pomocí Pythonu, a to i při spuštění Q# vloženého kódu.
Ve VS Code vyberte Zobrazit > paletu příkazů a vyberte Vytvořit: Nový Jupyter Notebook.
V pravém horním rohu nástroj VS Code rozpozná a zobrazí verzi Pythonu a virtuální prostředí Pythonu vybrané pro poznámkový blok. Pokud máte více prostředí Pythonu, možná budete muset vybrat jádro pomocí nástroje pro výběr jádra v pravém horním rohu. Pokud se žádné prostředí nezjistilo, informace o nastavení najdete v tématu Poznámkové bloky Jupyter ve VS Code .
V první buňce poznámkového bloku spusťte příkaz
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Kliknutím na + Kód přidejte do poznámkového bloku novou buňku a naimportujte
qsharp
sadu Python SDK.import qsharp
Vyberte kvantum target podle vašeho výběru. V tomto příkladu používáte simulátor IonQ jako target.
target = workspace.get_targets("ionq.simulator")
Vyberte konfigurace vašeho target profilu, nebo
Base
Unrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
Napište svůj Q# program. Například následující Q# program vygeneruje náhodný bit. Pro ilustraci použití vstupních argumentů používá tento program jako vstup celé číslo
n
a pole úhlůangle
.%%qsharp open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Arrays; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
Dále vytvoříte relaci. Řekněme, že chcete operaci spustit
GenerateRandomBit
třikrát, takže pomocí příkazutarget.submit
odešlete Q# operaci starget
daty a kód třikrát zopakujete – ve skutečném scénáři můžete místo stejného kódu odeslat různé programy.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Důležité
Při předávání argumentů jako parametrů do úlohy se při volání
qsharp.compile
naformátují do výrazu Q# . To znamená, že při formátování argumentů jako Q# objektů musíte být opatrní. Vzhledem k tomu, že se pole v Pythonu už vytisknou jako [item0, item1, ...], vstupní argumenty odpovídají formátování, protože v tomto příkladu se pole v Pythonu Q# vytisknou. U jiných datových struktur Pythonu možná budete potřebovat více práce, abyste získali hodnoty řetězců vložené do objektu Q# kompatibilním způsobem.Po vytvoření relace můžete pomocí příkazu
workspace.list_session_jobs
načíst seznam všech úloh v relaci. Další informace najdete v tématu Správa relací.
Relace monitorování
V okně Správa úloh v pracovním prostoru Quantum můžete zobrazit všechny odeslané položky nejvyšší úrovně, včetně relací a jednotlivých úloh, které nejsou přidružené k žádné relaci.
- V pracovním prostoru Quantum vyberte okno Správa úloh .
- Identifikujte úlohy typu Relace. V tomto zobrazení můžete vidět jedinečné ID relace ve sloupci ID a monitorovat její stav. Stavy relace jsou:
- Čekání: Úlohy v rámci relace se spouštějí.
- Úspěšné: Relace byla úspěšně ukončena.
- Vypršení časového limitu: Pokud se v rámci relace po dobu 10 minut neposílají žádné nové úlohy, časový limit této relace vyprší. Další informace najdete v tématu Vypršení časových limitů relací.
- Selhání: Pokud úloha v rámci relace selže, relace se ukončí a nahlásí stav Selhání. Další informace najdete v tématu Zásady selhání úloh v rámci relací.
- Kliknutím na název relace zobrazíte další podrobnosti.
- Můžete zobrazit seznam všech úloh v rámci relace a sledovat jejich stav.
Cílové chování
Každý poskytovatel kvantového hardwaru definuje vlastní heuristiku, aby co nejlépe spravoval stanovení priority úloh v rámci relace.
Quantinuum
Pokud se rozhodnete odesílat úlohy v rámci relace do Quantinuum target, vaše relace bude mít výhradní přístup k hardwaru, pokud zapíšete úlohy do fronty do jedné minuty od sebe navzájem. Poté budou vaše úlohy přijaty a zpracovány pomocí standardní logiky řazení do fronty a stanovení priorit.
Související obsah
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