Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Sezení jsou klíčovou součástí hybridních kvantových výpočtů, která umožňuje seskupit několik úkolů kvantových výpočtů. Relace je logické seskupení jedné či více úloh, které odešlete do jednoho target. Každá relace má jedinečné ID připojené ke každé úloze v této relaci. Relace jsou užitečné, když chcete spouštět několik úloh kvantových výpočtů v sekvenci a mezi kvantovými úlohami spouštět klasický kód.
Tento článek vysvětluje architekturu relací v hybridních kvantových výpočtech a způsob vytvoření nové relace v Azure Quantum.
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í Azure Quantum prostor. Další informace najdete v tématu Vytvoření Azure Quantum pracovního prostoru.
Prostředí Python s nainstalovaným Python nástrojem Pip .
Nejnovější verze Visual Studio Code (VS Code) s nainstalovaným rozšířenímQDK, Python rozšířením a Jupyter rozšířením.
Knihovna
qdkPython . Chcete-li odesílat Qiskit a Cirq programy, nainstalujteazure,qiskitacirqrozšíření.pip install --upgrade "qdk[azure,qiskit,cirq]"
Co je relace?
V relacích můžete přesunout výpočetní zdroje klienta do cloudu pro nižší latenci a možnost spustit váš kvantový program opakovaně s různými parametry. Úlohy můžete logicky seskupit do jedné relace a upřednostnit úlohy v této relaci před úlohami, které nejsou relacemi. Stavy qubitů se mezi úlohami neuchovávají, ale úlohy v rámci relace mají kratší čekací dobu. Kratší doby fronty umožňují spouštět složité algoritmy, abyste mohli lépe organizovat a sledovat jednotlivé úlohy kvantového computingu.
Sezení jsou užitečná pro parametrizované kvantové algoritmy, kde se výstup jedné úlohy kvantových výpočtů používá k definování vstupních parametrů pro další úlohu kvantových výpočtů. Nejběžnějšími příklady tohoto typu algoritmu jsou Variational Quantum Eigensolvers (VQE) a Quantum Approximate Optimization Algorithms (QAOA).
Podporovaný hardware
Sezení jsou podporována u všech poskytovatelů kvantového výpočetního hardwaru. V některých případech se úlohy odeslané v rámci seance upřednostňují ve frontě tohoto prvku target. Další informace naleznete v tématu Cílové chování.
Jak vytvořit relaci
Pokud chcete vytvořit relaci, postupujte takto:
Tento příklad ukazuje, jak vytvořit relaci s Q# vloženým kódem v poznámkovém Jupyter bloku v VS Code.
Poznámka:
Relace se spravují pomocí Python, i když běží Q# vložený kód.
V VS Code otevřete nabídku Zobrazit a zvolte Paleta příkazů.
Zadejte a vyberte Vytvořit: Nový Jupyter Notebook.
V pravém horním rohu VS Code rozpozná a zobrazí verzi Python a virtuální Python prostředí, které byly vybrány pro poznámkový blok. Pokud máte více Python prostředí, 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í, přečtěte siJupyter NotebookVS Code informace o nastavení.
V první buňce poznámkového bloku spusťte následující kód:
from qdk.azure import Workspace workspace = Workspace(resource_id="") # add your resource IDPřidejte do poznámkového bloku novou buňku
qsharpPython a naimportujte balíček:from qdk import qsharpZvolte své kvantovétarget. V tomto příkladu target je simulátor IonQ.
target = workspace.get_targets("ionq.simulator")Vyberte konfigurace target profilu, buď
Base,Adaptive_RIneboUnrestricted.qsharp.init(target_profile=qsharp.TargetProfile.Base)Poznámka:
Adaptive_RItarget profilové úlohy 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
na pole úhlů ,anglejako 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
GenerateRandomBittřikrát, takže použijetetarget.submitk odeslání Q# operace stargetdaty 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é
Když do úlohy předáte argumenty jako parametry, argumenty se při zavolání naformátují do výrazu Q#
qsharp.compile. To znamená, že potřebujete naformátovat argumenty jako Q# objekty. V tomto příkladu, protože pole v Python jsou již vytištěna jako[item0, item1, ...], vstupní argumenty odpovídají formátování Q#. U jiných Python datových struktur budete možná potřebovat více zpracování, abyste získali řetězcové hodnoty vložené do Q# kompatibilním způsobem.Po vytvoření relace můžete pomocí
workspace.list_session_jobsnačíst seznam všech úloh v relaci. Další informace naleznete v tématu Správa relací.
Zamýšlené chování
Každý poskytovatel kvantového hardwaru definuje vlastní heuristiku, která nejlépe spravuje stanovení priorit úloh v rámci relace.
Quantinuum
Zvolíte-li odesílání úloh v rámci relace do Quantinuum target, vaše relace získá výhradní přístup k hardwaru, za předpokladu, že úlohy zadáte do fronty do jedné minuty od sebe. Potom se vaše úlohy přijímají a zpracovávají pomocí standardní logiky fronty a stanovení priority.