Co je Q# programovací jazyk a sada Quantum Development Kit?

Q# je opensourcový programovací jazyk Microsoftu pro vývoj a spouštění kvantových algoritmů. Je součástí sady SDK Quantum Development Kit (QDK), která nabízí sadu nástrojů, které vám pomůžou s procesem vývoje kvantového softwaru.

Jako programovací jazyk Q# kreslí známé prvky z Pythonu, C# a F# a podporuje základní procedurální model pro psaní programů se smyčkami, příkazy if/then a běžnými datovými typy. Zavádí také nové datové struktury a operace specifické pro kvantová data, jako je například odhad opakování do úspěchu a adaptivní fáze, které umožňují integraci kvantových a klasických výpočtů. Například řízení toku klasického programu může být založeno na výsledku kvantového měření.

Pomocí sady Quantum Development Kit můžete vytvářet programy, které běží na kvantovém hardwaru, nebo formulovat problémy, které běží na řešeních optimalizace inspirovaných kvantovou mechanikou v Azure Quantum, otevřeném cloudovém ekosystému s různorodou sadou kvantových řešení a technologií. Sada QDK nabízí podporu pro Q#, Qiskit a Cirq pro kvantové výpočty, takže pokud už pracujete v jiných vývojových jazycích, můžete své okruhy spouštět také v Azure Quantum.

Začínáme s Q#

Pokud se chcete rovnou podívat, můžete to prozkoumat Q# na portálu Azure Quantum bez nutnosti instalace. Další informace najdete v tématu Začínáme s Q# a poznámkovým blokem Azure Quantum.

Další možnosti vývojového prostředí najdete v tématu Nastavení sady Quantum Development Kit.

Kvantový programovací jazyk Q#

Q# je opensourcový kvantový programovací jazyk na vysoké úrovni pro vyjádření kvantových algoritmů. Je navržený tak, aby byl nezávislý na hardwaru, škáluje se na celou řadu kvantových aplikací a optimalizuje provádění. Další informace o Q# projektu vývoje jazyka najdete v úložišti návrhuQ# základních knihoven a na GitHubu.

Integrace s kvantovými a klasickými výpočty

Q# je samostatný jazyk, který nabízí vysokou úroveň abstrakce. Neexistuje žádná představa kvantového stavu nebo okruhu; Q# místo toho implementuje programy z hlediska příkazů a výrazů, podobně jako klasické programovací jazyky. Jedinečné kvantové funkce, jako je podpora funktorů a konstruktorů toku řízení, usnadňují například vyjádření fázového odhadu a algoritmů kvantové chemie .

Jazyk Q# podporuje integraci bohatých klasických a kvantových výpočtů. To umožňuje čisté vyjádření adaptivních algoritmů, jako je operace odhadu náhodné fáze chůze , které je obtížné vyjádřit přímo v modelu okruhu pevné posloupnosti kvantových bran.

Q# podporuje obecné klasické řízení toku během provádění algoritmu. Zejména klasické řízení toku je založené na výstupech kvantového měření, což výrazně usnadňuje psaní věcí, které závisí na průběžných měřeních. Například smyčka požadovaná pro pravděpodobnostní algoritmy, jako je Grover vyhledávání, může být snadno vyjádřena v Q#, místo toho, abyste se museli vrátit ke klasickému ovladači a otestovat, zda výsledek vyhovuje orákulum a opakování, pokud ne.

Qubity jako neprůsvné odkazy

V Q#systému jsou qubity prostředkem, který se v případě potřeby požaduje z modulu runtime a vrací se, když se už nepoužívá. To se podobá způsobu, jakým klasické jazyky pracují s pamětí haldy.

V Q# qubitech jsou modelovány jako neprůsažné datové typy, které představují odkaz na konkrétní dvoustavový kvantový systém, ať už fyzický nebo logický (opravený chybou), na kterém se můžou provádět kvantové operace. Toto je provozní zobrazení qubitů – to znamená, že qubity jsou definované tím, co s nimi můžete dělat.

O mapování z proměnné qubitu v programu na skutečný logický nebo fyzický qubit rozhoduje modul runtime a toto mapování může být odloženo, dokud nebude známa topologie a další podrobnosti o cílovém zařízení. Modul runtime zodpovídá za určení mapování, které umožňuje algoritmus spustit, včetně přenosu stavu qubitu a přemapování vyžadovaného během provádění.

Reprezentace použitá v Q# má zajímavý důsledek, že všechny skutečné kvantové výpočty jsou prováděny vedlejším efektem. Neexistuje žádný způsob, jak přímo interagovat s kvantovým stavem počítače; nemá vůbec žádnou softwarovou reprezentaci. Místo toho provádíte operace s entitami qubitu, které mají vedlejší účinek změny kvantového stavu. V podstatě je kvantový stav počítače neprůsvitnou globální proměnnou, která je nepřístupná s výjimkou malé sady primitiv (měření) příslušenství – a i tyto přístupové objekty mají vedlejší účinky na kvantový stav, a proto jsou skutečně "mutátory s výsledky" spíše než skutečnými přistupovači.

Respektujte fyzikální zákony

Kvantové programy by měly být vyžadovány, aby respektovaly fyzikální zákony. Například kopírování stavu qubitu nebo přímý přístup ke stavu qubitu není možné v nástroji Q#.

Q# Proto nemá schopnost přímo introspekce do stavu qubitu nebo jiných vlastností kvantové mechaniky, což zaručuje, že program může být fyzicky spuštěn na libovolném kvantovém Q# počítači. Q# Místo toho má program schopnost volat operace a funkce, jako DumpOperation operationje , k extrakci klasických informací z qubitu, které umožňují ověření a kontrolu stavu, aby se usnadnilo ladění pomocí simulátoru. Další informace najdete v tématu testování a ladění.

Nezávislá na hardwaru

Q# je nezávislý na hardwaru, což znamená, že poskytuje prostředky k vyjádření a využití výkonných konceptů kvantových výpočtů nezávisle na tom, jak se hardware bude v budoucnu vyvíjet. Aby bylo možné je používat v široké škále aplikací, Q# umožňuje vytvářet opakovaně použitelné komponenty a vrstvy abstrakcí. Aby bylo možné dosáhnout výkonu s rostoucí velikostí kvantového Q# hardwaru, kvantový programovací jazyk zajišťuje škálovatelnost aplikací i úsilí o vývoj. I když úplná složitost takových výpočtů vyžaduje další vývoj hardwaru, Q# je možné programy cílit na spouštění na různých kvantových hardwarových back-endech v Azure Quantum.

Efektivní provádění

Jazyk Q# se zaměřuje na vyjádření informací pro optimalizaci provádění kvantových komponent nezávisle na kontextu, ve kterém jsou vyvolány. Q# umožňuje vývojáři sdělit své znalosti o výpočtu, aby kompilátor mohl učinit informované rozhodnutí o tom, jak ho přeložit na instrukce, a využívat informace o komplexní aplikaci, která není k dispozici pro vývojáře.

Další informace o funkcích sady QDK a obecných částech, které jsou součástí Q# programu, najdete v Q# uživatelské příručce pro kvantový programovací jazyk.

Sada Quantum Development Kit

Sada Quantum Development Kit je plnohodnotná vývojová sada, Q# kterou můžete používat s běžnými nástroji a jazyky k vývoji kvantových aplikací, které běží na kvantovém hardwaru nebo v cloudových nebo místních kvantových simulátorech. Program Q# se může zkompilovat do samostatné aplikace, spustit v Jupyter Notebook nebo být volána hostitelským programem napsaným v jazyce Python nebo .NET.

Když zkompilujete a spustíte program, vytvoří instanci kvantového simulátoru a předá mu váš kód Q#. Simulátor podle kódu Q# vytvoří simulované qubity a podle zadaných transformací bude manipulovat s jejich stavy. Výsledky kvantových operací ze simulátoru se pak vrátí do programu. Izolování kódu Q# v simulátoru zajišťuje, že algoritmy budou odpovídat zákonům kvantové fyziky a budou správně fungovat i na kvantových počítačích.

Všechno, co potřebujete k psaní a spouštění Q# programů, včetně kompilátoru Q#Q#, knihoven a kvantových simulátorů, je předem nasazené v hostovaných poznámkových blocích Jupyter v Azure Portal. QDK je také možné nainstalovat a spustit z místního počítače, takže můžete používat upřednostňované integrované vývojové prostředí a jazyk místně a odesílat úlohy do kvantových hardwarových nebo cloudových simulátorů v Azure Quantum nebo pracovat s místními simulátory. Další informace najdete v tématu Konfigurace kvantových vývojových prostředí.

Pracovní postup kvantového vývoje s využitím sady QDK

Následující diagram znázorňuje fáze, kterými kvantový program prochází od nápadu k dokončení implementace v Azure Quantum, a nástroje, které QDK nabízí pro každou fázi.

Diagram znázorňující pracovní postup vývoje kvantového programování

Poznámka

Pro všechny kroky pracovního postupu použijete stejný Q# kód. V krátkodobém horizontu možná budete muset některé části kódu upravit, aby se zohlednila aktuální hardwarová omezení. V dlouhodobém horizontu ale budete moct přepínat mezi různými simulátory a poskytovateli hardwaru bez jakýchkoli úprav kódu.

Psaní kvantového programu

Pokud chcete začít trénovat a psát programy Q# bez instalace dalšího softwaru, můžete použít hostované poznámkové bloky Jupyter Notebook, které jsou dostupné v pracovním prostoru Azure Quantum v Azure Portal. Galerie ukázek obsahuje kolekci ukázek poznámkových bloků s poznámkami – vyberte ukázku, kterou chcete prozkoumat, a spusťte ji na cloudových simulátorech nebo skutečných kvantových počítačích.

Pokud dáváte přednost místnímu vývojovému prostředí, můžete program Q# vytvořit pomocí poznámkových bloků Jupyter s jádrem IQ# nebo rozšíření QDK pro Visual Studio Code a Visual Studio 2022 a pak je spustit na kvantovém hardwaru nebo cloudových nebo místních simulátorech.

Bez ohledu na to, které prostředí dáváte přednost, můžete sledovat Q# kurzy a začít psát kvantové programy a zkoumat kvantové koncepty, jako jsou superpozice, propletení, Groverův kvantový algoritmus a další kvantové jevy.

Pokud nemáte účet Azure a chcete to zkusit Q# bez místní instalace sady QDK, můžete pomocí Binderu Q# spustit ukázky v Jupyter Notebooks online.

Prozkoumání knihoven specifických pro doménu

KnihovnyQ# vám pomůžou udržet kód na vysoké úrovni a umožní vám spouštět složité kvantové operace, aniž byste museli navrhovat sekvence operací nízké úrovně. Nové Q# projekty automaticky zahrnují standardní knihovnuQ#, která poskytuje sadu základních a velmi užitečných funkcí a operací, které lze použít při psaní kvantových programů v nástroji Q#.

Kromě standardní knihovny obsahuje sada QDK knihovnu kvantové chemie pro simulaci problémů s kvantovou dynamikou a elektronickou strukturou na kvantových počítačích, knihovnu kvantového strojového učení , která poskytuje implementaci sekvenčních klasifikátorů, které využívají kvantové výpočty ke spouštění hybridních kvantových/klasických experimentů strojového učení, a kvantovou číselnou knihovnu , která poskytuje podporu široké škály numerických funkcí.

Spouštění programů v simulátorech

Jakmile napíšete svůj program, QDK nabízí sadu kvantových simulátorů – klasických programů, které simulují chování kvantového systému – abyste mohli spustit malou instanci programu a zjistit, co dělá bez skutečného přístupu k hardwaru. Kvantové programy můžete spouštět na plnohodnotném kvantovém simulátoru, simulátoru Toffoli s omezeným rozsahem, řídkém simulátoru pro systémy s větším počtem qubitů a dokonce pomocí simulátoru šumuQ# simulovat chování programů pod vlivem hlučných prostředí.

Podívejte se na úplný seznam kvantových simulátorů.

Odhad prostředků

Před spuštěním na kvantovém hardwaru budete muset zjistit, jestli váš program může běžet na existujícím hardwaru a kolik prostředků bude spotřebovávat. Pomocí simulátoru trasování můžete odhadnout, kolik qubitů a kvantových bran potřebujete, a ladit klasický kód, který je součástí kvantového programu.

Svůj kvantový program můžete také odeslat do cíle Azure Quantum Resource Estimator v Azure Portal. Nástroj Azure Quantum Resource Estimator vypočítá odhad fyzických prostředků po rozložení tím, že bere v úvahu předpoklady o parametrech qubitu, kódech oprav kvantových chyb a rozpočtu chyb. Je zdarma a vyžaduje účet Azure.

Odesílání úloh do služby Azure Quantum

Azure Quantum je cloudová kvantová výpočetní služba Azure s různorodou sadou kvantových řešení a technologií. Azure Quantum zajišťuje otevřenou, flexibilní a budoucí cestu ke kvantovému computingu, která umožňuje spouštět program na kvantovém hardwaru. Qiskit, Cirq a Q# programy můžete spouštět na několika kvantových systémech. Aktuální seznam podporovaných poskytovatelů hardwaru najdete v tématu Poskytovatelé kvantových výpočtů .

Tip

První uživatelé automaticky získají bezplatné kredity Azure Quantumv hodnotě 500 USD pro použití u každého zúčastněného poskytovatele kvantového hardwaru. Pokud jste využili všechny kredity a potřebujete víc, můžete se přihlásit do programu Azure Quantum Credits.

Po vytvoření pracovního prostoru Azure Quantum můžete odesílat své Q# programy (označované také jako úlohy) do Azure Quantum prostřednictvím upřednostňovaného vývojového prostředí, a to jak místně, tak online. Další informace najdete v tématu o odesílání Q# úloh. Můžete také spouštět a odesílat kvantové obvody napsané v Qiskitu nebo Cirqu.

Následující diagram znázorňuje základní pracovní postup po odeslání úlohy:

Diagram znázorňující pracovní postup po odeslání úlohy do Azure Quantum

Azure Quantum nabízí některé z nejpůsobivějších a nejrozmanitějších kvantových prostředků, které jsou dnes k dispozici od špičkových pracovníků v oboru. Se službou Azure Quantum a QDK můžete psát kvantové výpočty a programy pro optimalizaci inspirované kvantovou mechanikou a odesílat je do Azure Quantum ke spouštění na kvantovém hardwaru a řešitele optimalizace.

Další kroky

Pokud se chcete dozvědět více, kvantové katy poskytují dobrý úvod do konceptů kvantových výpočtů , jako jsou běžné kvantové operace a manipulace s qubity.