Začínáme s relacemi
Relace jsou klíčovou funkcí hybridních kvantových výpočtů, které umožňují seskupit několik úloh kvantových výpočtů.
Tento článek vysvětluje architekturu relací v hybridních kvantových výpočtech a postup vytvoření nové relace.
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ým 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 jednoho target. Každá relace má jedinečné ID připojené ke každé úloze v této relaci.
V relacích se výpočetní prostředek klienta může přesunout do cloudu, což vede k nižší latenci a možnosti opakování 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 být upřednostňovány před úlohami, které nejsou relacemi. I když se stavy qubitů mezi úlohami neuchovávají, relace umožňuje kratší dobu fronty pro úlohy a delší problémy se spouštěním.
Relace umožňují uspořádat několik úloh kvantového computingu s možností spouštění klasického kódu mezi kvantovými úlohami. Budete moct spouštět složité algoritmy, abyste mohli lépe organizovat a sledovat jednotlivé úlohy kvantového computingu.
Klíčový uživatelský scénář, ve kterém můžete chtít kombinovat úlohy v relaci, je parametrizovaný kvantový algoritmus, kde výstup jedné úlohy kvantového computingu informuje parametry 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 podporovány u všech poskytovatelů hardwaru kvantových výpočtů. V některých případech jsou úlohy odeslané v rámci relace prioritní ve frontě targettéto . Další informace najdete v tématu Target chování.
Jak vytvořit relaci
Pokud chcete vytvořit relaci, postupujte takto:
Tento příklad ukazuje, jak vytvořit relaci s vloženým kódem Q# pomocí poznámkového bloku Jupyter v editoru Visual Studio Code. Relace můžete vytvořit také pomocí programu Pythonu, který vyvolá sousední Q# program.
Poznámka:
Relace se spravují pomocí Pythonu, i když běží Q# vložený kód.
Ve VS Code vyberte paletu Zobrazit > příkaz a vyberte Vytvořit: Nový poznámkový blok Jupyter.
V pravém horním rohu nástroj VS Code rozpozná a zobrazí verzi Pythonu a virtuálního prostředí Pythonu, které bylo vybráno 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 nebylo zjištěno žádné prostředí, informace o nastavení najdete v poznámkových blocích Jupyter v editoru 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řidáte do poznámkového bloku novou buňku a naimportujete
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 target profilu, buď
Base
,Adaptive_RI
neboUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Poznámka:
Adaptive_RI
target úlohy profilu jsou v současné době podporovány v Quantinuum targets. Další informace najdete v tématu Integrované hybridní kvantové výpočty.Napište svůj Q# program. Například následující Q# program vygeneruje náhodný bit. Chcete-li ilustrovat použití vstupních argumentů, tento program přebírá celé číslo
n
a pole úhlů ,angle
jako vstup.%%qsharp import Std.Measurement.*; import Std.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 použijetetarget.submit
k odeslání Q# operace starget
daty a třikrát zopakujete kód – ve skutečném scénáři můžete chtít 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 jsou při volání
qsharp.compile
formátovány do výrazu Q# . To znamená, že při formátování argumentů jako Q# objektů musíte být opatrní. V tomto příkladu jsou pole v Pythonu již vytištěna jako [item0, item1, ...], vstupní argumenty odpovídají Q# formátování. U jiných datových struktur Pythonu možná budete potřebovat více zpracování, abyste získali řetězcové hodnoty vložené do Q# kompatibilního způsobu.Po vytvoření relace můžete načíst
workspace.list_session_jobs
seznam všech úloh v relaci. Další informace naleznete v tématu Správa relací.
Target chování
Každý poskytovatel kvantového hardwaru definuje vlastní heuristiku, která nejlépe spravuje stanovení priorit úloh v rámci relace.
Quantinuum
Pokud se rozhodnete odesílat úlohy v rámci relace do Quantinuum target, bude mít vaše relace výhradní přístup k hardwaru, pokud zařadíte úlohy do fronty do jedné minuty od sebe. Potom se vaše úlohy přijmou a zpracují pomocí standardní logiky fronty a stanovení priority.