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.
Naučte se používat Visual Studio Code (VS Code) k vytváření a odesílání Q# programů do skutečného kvantového hardwaru. Úlohy kvantového computingu můžete odeslat do Azure Quantum jako samostatný Q# program, kombinovat Q# s Python v projektu Q# a spustit Jupyter Notebook.
Q# Odesílání úloh doAzure Quantum
Naučte se používat VS Code ke spouštění, ladění a odesílání Q# programu do Azure Quantum.
Požadavky
Podrobnosti o instalaci najdete v QDK tématu Nastavení rozšíření.
- Pracovní prostor Azure Quantum ve vašem Azure předplatném. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření Azure Quantum pracovního prostoru.
- Nejnovější verze VS Code nebo otevřete VS Code na webu
- Nejnovější verze rozšíření Microsoftu Quantum Development Kit (QDK).
Načtení ukázkového Q# programu
V VS Code vyberte Soubor > Nový textový soubor a uložte soubor jako RandomNum.qs.
Otevřete RandomNum.qs a zadejte
sample, pak vyberte náhodný bit vzorek ze seznamu možností a uložte soubor.
Poznámka:
Můžete také otevřít vlastní Q# soubor. Pokud spustíte starší Q# program a narazíte na chyby, přečtěte si téma Testování a ladění.
Spusťte program Q#
Pokud chcete program otestovat místně na integrovaném simulátoru, klikněte na Spustit ze seznamu příkazů vedle operace vstupního bodu nebo stiskněte Kombinaci kláves Ctrl + F5. Výstup se zobrazí v konzole ladění.
Pro ladění programu před jeho odesláním do Azure Quantum klikněte na Ladit ze seznamu příkazů vedle vstupního bodu nebo stiskněte klávesu F5. Pomocí ovládacích prvků ladění v horní části můžete krokovat přes, vstoupit do a vystoupit z kódu. Další informace o ladění Q# programů naleznete v tématu Testování a ladění.
Vizualizace histogramu četnosti
Histogram frekvence představuje distribuci výsledků získaných z vícenásobného spuštění kvantového programu nebo "záběrů". Každý pruh v histogramu odpovídá možnému výsledku a jeho výška představuje počet pozorovaných výsledků. Histogram četnosti pomáhá vizualizovat rozdělení pravděpodobnosti těchto výsledků.
Vyberte Zobrazit –> Paleta příkazů a zadejte histogram, který vyvolá příkaz QDKSpustit soubor a zobrazit histogram. Také můžete zvolit Histogram ze seznamu příkazů, které předchází operaci vstupního bodu. Tuto možnost vyberte, pokud chcete otevřít okno histogramu Q# .
Zadejte počet snímků pro spuštění programu, například 100 snímků, a stiskněte Enter. Histogram se zobrazí v okně histogramu Q# .
Kliknutím na ikonu nastavení vlevo nahoře zobrazíte možnosti.
Kliknutím na pruh zobrazíte procento tohoto výsledku. V tomto případě existují dva možné výsledky, 0 a 1 a procento každého výsledku se blíží 50 %.
Návod
Histogram můžete přiblížit pomocí kolečka myši nebo gesta trackpadu. Při přiblížení můžete graf posunout stisknutím klávesy Alt při posouvání.
Vizualizace kvantového okruhu
Diagramy kvantových obvodů představují vizuální znázornění kvantových operací. Zobrazují tok qubitů v kvantovém programu, včetně použitých bran a měření. Další informace naleznete v Diagramy kvantových obvodů v Visual Studio Code.
Vyberte Zobrazit –> Paleta příkazů a napište circuit, který zobrazí příkaz QDK: Zobrazit okruh. Můžete také vybrat Circuit z CodeLens nad operací vstupního bodu.
Okruh je zobrazen v okně Q#. Diagram okruhu znázorňuje jeden qubitový registr, který je inicializován do stavu |0⟩. Pak se na qubit použije brána Hadamard, H, následovaná měřicí operací, která je znázorněna symbolem měřiče. Další informace najdete v tématu Konvence kvantových obvodů.
Připojte se k Azure Quantum a odešlete svou úlohu.
Úlohy můžete připojit a odeslat přímo z VS Codeaplikace . V tomto příkladu odešlete úlohu do simulátoru Rigetti.
Vyberte Zobrazit –> Paleta příkazů a zadejte QDK: Připojit se k Azure Quantum pracovnímu prostoru. Stiskněte klávesu Enter.
Vyberte Azure účet a podle pokynů se připojte k preferovanému adresáři, předplatnému a pracovnímu prostoru.
Poznámka:
Pokud máte připojovací řetězec, můžete vybrat Připojovací řetězec a vložit připojovací řetězec odpovídající vašemu Azure Quantum pracovnímu prostoru. Další informace najdete v tématu Připojení k pracovnímu prostoru Quantum pomocí připojovacího řetězce.
Po připojení rozbalte v podokně PrůzkumníkaQuantum Workspaces.
Rozšiřte svůj pracovní prostor a rozbalte poskytovatele Rigetti.
Poznámka:
Pokud dojde k Azure Quantumproblému s připojením, zobrazí se vedle názvu pracovního prostoru ikona upozornění. Najeďte myší na název pracovního prostoru, aby se zobrazily informace o chybě.
Vyberte rigetti.sim.qvm jako svůj target.
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.
Přidejte počet snímků nebo počet spuštění programu.
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.
Pokud chcete zobrazit výsledky, vyberte ikonu cloudu vedle názvu úlohy, abyste si stáhli výsledky z úložiště pracovního prostoru a zobrazili ho v VS Code.
Odeslat úlohy na Azure Quantum z Jupyter Notebook
Naučte se používat VS Code ke spuštění, ladění a odeslání souboruQ#Jupyter NotebookAzure Quantum.
Požadavky
Podrobnosti o instalaci najdete v QDK tématu Nastavení rozšíření.
Pracovní prostor Azure Quantum ve vašem Azure předplatném. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření Azure Quantum pracovního prostoru.
Prostředí Python s nainstalovaným Python nástrojem Pip .
VS Code s nainstalovaným Microsoftem Quantum Development Kit (QDK), Pythona Jupyter rozšířeními.
Knihovna
qdkPython s rozšířenímiazureajupytera balíčkemipykernel.python -m pip install --upgrade "qdk[azure,jupyter]" ipykernel
Spuštění a otestování programu v místním simulátoru
V VS Code, vyberte Zobrazit > příkazový panel 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í Python kód a naimportujte potřebné moduly:
from qdk import qsharp import qdk.azure- Modul
qdk.qsharpaktivuje%%qsharpmagický příkaz, který umožňuje zadat Q# kód přímo do buňky. - Tento
qdk.azuremodul poskytuje připojení k vašemu Azure Quantum pracovnímu prostoru.
Poznámka:
Jupyter Python Pokud se jádro
ipykernelnerozpoznalo, VS Code zobrazí se výzva k jeho instalaci.- Modul
Přidejte další buňku a zadejte tento Q# kód, který vrátí počet náhodných bitů zadaný uživatelem:
Poznámka:
Všimněte si, že jakmile zadáte příkaz
%%qsharpmagic, typ buňky poznámkového bloku se změní z Python na Q#.%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); results += [r]; } return results }K otestování operace můžete použít metodu
eval, která může volat jakoukoli Q# operaci, která byla dříve definovaná v poznámkovém bloku:qsharp.eval("RandomNBits(4)")[Zero, One, One, Zero]Ke spuštění programu do místního simulátoru použijte metodu
run. Zadejteshots, nebo počet spuštění programu, a simulátor vrátí výsledky jako seznam Python.qsharp.run("RandomNBits(4)", shots=10)[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Vizualizace kvantového okruhu
Kvantové okruhy můžete vizualizovat pomocí modulu qdk.widgets. Tento modul poskytuje widget, který vykresluje diagram kvantového obvodu jako obrázek SVG. Další informace naleznete v tématu Kvantové diagramy obvodů s Jupyter Notebook.
Přidejte do nové buňky následující kód pro vizualizaci okruhu:
from qdk.qsharp import circuit
from qdk.widgets import Circuit
Circuit(circuit("RandomNBits(4)"))
Další informace najdete v tématu Konvence kvantových obvodů.
Kompilujte vaši úlohu pomocí základního profilu
Při spouštění programů v místním kvantovém simulátoru můžete odeslat libovolný typ Q# programu. Azure Quantum Hardware targets ale zatím nepodporuje všechny možnosti potřebné ke spuštění všech Q# programů. Abyste mohli kompilovat a odesílat Q# programy, Azure Quantummusíte nastavit svůj target profil tak, aby bylo možné zjistit Q# , jaké možnosti target hardware podporuje. Aktuálně je to základní profil. Další informace naleznete v tématu Typy profilů v Azure Quantum.
Opětovné inicializace interpreta Q# a kompilace programu pomocí základního profilu:
initK nastavení profilu použijte metodu:from qdk import init, TargetProfile init(target_profile=TargetProfile.Base)Vzhledem k tomu, že jste interpret znovu inicializovali, musíte znovu spustit kód s novým profilem:
%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); results += [r]; } return results }Dále použijte metodu
compilek určení operace nebo funkce, která je vstupním bodem programu. Tento kód se zkompiluje do formátu QIR, který se pak dá odeslat do libovolného kvantového hardwaru:from qdk.qsharp import compile MyProgram = compile("RandomNBits(4)")
Připojte se k Azure Quantum a odešlete svou úlohu.
Teď, když máte program zkompilovaný do správného formátu, vytvořte Workspace objekt pro připojení k Azure Quantum. Použijte ID prostředku svého Azure Quantum pracovního prostoru k připojení. Zkopírujte ID prostředku z podokna Přehled ve svém pracovním prostoru na portálu Azure.
V nové buňce vyplňte ID prostředku ze svého pracovního Azure Quantum prostoru:
from qdk.azure import Workspace MyWorkspace = Workspace(resource_id="") # Fill in your resource IDget_targetsPomocí této metody můžete zobrazit dostupný hardware targets v pracovním prostoru:MyTargets = MyWorkspace.get_targets() print("This workspace's targets:") MyTargetsVyberte :
rigetti.sim.qvmtargetMyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")Nakonec pomocí
submitmetody odešlete program s jeho parametry a zobrazte výsledky:job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100) job.get_results(){'[0, 1, 1, 1]': 0.08, '[1, 1, 0, 0]': 0.1, '[0, 0, 1, 0]': 0.04, '[0, 1, 0, 0]': 0.05, '[1, 0, 1, 0]': 0.05, '[1, 0, 0, 0]': 0.07, '[0, 1, 0, 1]': 0.07, '[1, 0, 1, 1]': 0.07, '[0, 0, 0, 0]': 0.08, '[1, 1, 1, 0]': 0.05, '[0, 0, 0, 1]': 0.1, '[0, 0, 1, 1]': 0.04, '[0, 1, 1, 0]': 0.09, '[1, 0, 0, 1]': 0.04, '[1, 1, 1, 1]': 0.05, '[1, 1, 0, 1]': 0.02}Všechny vlastnosti úlohy jsou přístupné v
job.details, například:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id){'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...} Job name: MyQuantumJob Job status: Succeeded Job ID: 0150202e-9638-11ee-be2f-b16153380354
Další podrobnosti o úloze
Tento qdk.azure modul obsahuje další metody zobrazení podrobnějších dat úlohy.
job.get_results_histogram: Tato metoda vrátí slovník výsledků a počet snímků pro každé jedinečné měření. Například výsledky pro předchozí úlohu bylyprint(job.get_results_histogram()){ '[0, 1, 1, 1]' : {'Outcome' : [0, 1, 1, 1], 'Count' : 8}, '[1, 1, 0, 0]' : {'Outcome' : [1, 1, 0, 0], 'Count' : 10}, '[0, 0, 1, 0]' : {'Outcome' : [0, 0, 1, 0], 'Count' : 4}, '[0, 1, 0, 0]' : {'Outcome' : [0, 1, 0, 0], 'Count' : 5}, '[1, 0, 1, 0]' : {'Outcome' : [1, 0, 1, 0], 'Count' : 5}, '[1, 0, 0, 0]' : {'Outcome' : [1, 0, 0, 0], 'Count' : 7}, '[0, 1, 0, 1]' : {'Outcome' : [0, 1, 0, 1], 'Count' : 7}, '[1, 0, 1, 1]' : {'Outcome' : [1, 0, 1, 1], 'Count' : 7}, '[0, 0, 0, 0]' : {'Outcome' : [0, 0, 0, 0], 'Count' : 8}, '[1, 1, 1, 0]' : {'Outcome' : [1, 1, 1, 0], 'Count' : 5}, '[0, 0, 0, 1]' : {'Outcome' : [0, 0, 0, 1], 'Count' : 10}, '[0, 0, 1, 1]' : {'Outcome' : [0, 0, 1, 1], 'Count' : 4}, '[0, 1, 1, 0]' : {'Outcome' : [0, 1, 1, 0], 'Count' : 9}, '[1, 0, 0, 1]' : {'Outcome' : [1, 0, 0, 1], 'Count' : 4}, '[1, 1, 1, 1]' : {'Outcome' : [1, 1, 1, 1], 'Count' : 5}, '[1, 1, 0, 1]' : {'Outcome' : [1, 1, 0, 1], 'Count' : 2} }job.get_results_shots: Tato metoda vrátí seznam výsledků každého snímku. Například výsledky pro předchozí úlohu bylyprint(job.get_results_shots())[ [0, 1, 1, 1], [1, 0, 1, 1], [0, 0, 1, 1], [1, 1, 0, 1], [1, 0, 0, 0], [1, 0, 1, 1], [1, 1, 0, 1], ...]
Odeslání Python pomocí Q# úloh do Azure Quantum
Naučte se psát VS CodePython program, který volá Q# operace, připojit se pomocí AzurePython příkazů nebo Azure rozhraní příkazového řádku a odeslat úlohu.
Požadavky
Podrobnosti o instalaci najdete v QDK tématu Nastavení rozšíření.
- Pracovní prostor Azure Quantum ve vašem Azure předplatném. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření Azure Quantum pracovního prostoru.
- Prostředí Python s nainstalovaným Python nástrojem Pip .
- VS Code s nainstalovaným rozšířením Microsoft Quantum Development Kit (QDK) a Python.
- Knihovna
qdkPython sazuredoplňkem. - Azure Rozhraní příkazového řádku (CLI) s nainstalovaným nejnovějším Azure Quantum rozšířením
Vytvořte a importujte své operace Q#
V modulu qdk.qsharp můžete ukládat funkce a operace do Q# souborů a vytvářet Q# projekty , které umožňují volání libovolného z nich z Python kódu. To je užitečné hlavně v případě, že potřebujete spustit program, který přebírá vstupní parametry.
Podle pokynů vytvořte Q# projekt.
Otevřete nový textový soubor, přidejte následující Q# kód, který vrátí uživatelem zadaný počet náhodných bitů, a uložte soubor do
/srcadresáře v projektu jakoSource.qs.operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); results += [r]; } return results }V kořenové složce projektu (se souborem
qsharp.json) otevřete jiný soubor a uložte ho jakorandomNum.py.Přidejte následující kód pro načtení požadovaných importů:
from qdk import qsharp from qdk.azure import WorkspaceDále přidejte kód, který definuje Q# kořenovou složku projektu a otestuje target operaci v místním simulátoru. Operace je volána oborem <názvů>.<operation_name( )> a v tomto případě předáváte počet náhodných bitů, které se mají vrátit.
Poznámka:
Protože nebyl
Source.qszadán žádný obor názvů , kompilátor používá název souboru jako výchozí obor názvů -Source.RandomNBits(). Další informace naleznete v tématu Projekty a implicitní obory názvů.qsharp.init(project_root = '../MyProjectRootFolder') print(qsharp.eval("Source.RandomNBits(4)"))[Zero, One, One, Zero]Můžete také otestovat operaci pomocí
runmetody, která předá dalšíshotsparametr, a vrátí výsledky v Python seznamu. Nahraďte vrandomNum.pypředchozí příkaz print následujícím:result = qsharp.run("Source.RandomNBits(4)", shots=10) for x in result: print(x)[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Kompilujte vaši úlohu pomocí základního profilu
Při spouštění programů v místním kvantovém simulátoru můžete odeslat libovolný typ Q# programu.
Azure Quantum Hardware targets ale zatím nepodporuje všechny možnosti potřebné ke spuštění všech Q# programů. Abyste mohli kompilovat a odesílat Q# programy do Azure Quantum, musíte nastavit svůj target profil tak, aby Q# věděl, jaké možnosti váš target hardware podporuje. V současné době se jedná o profil Base nebo profil Adpative_RI. Další informace naleznete v tématu Typy profilů v Azure Quantum.
Poznámka:
Pro Q# pouze programy v VS Code, VS Code nastaví Base profil automaticky.
initK nastavení profilu použijte metodu:qsharp.init(project_root = '../MyProjectRootFolder', target_profile=qsharp.TargetProfile.Base)Poznámka:
Vzhledem k tomu, že znovu inicializujete
qsharpsvůj stav, musíte znovu nastavit parametrproject_root, aby kompilátor věděl, kde najít operaciRandomNBits. To bylo možné provést také v kroku 5 předchozího postupu.Pak použijte metodu
compilek určení operace nebo funkce, která je vstupním bodem programu. Kompilovaný program je pak možné odeslat do libovolného kvantového hardwaru:MyProgram = qsharp.compile("Source.RandomNBits(4)")
Připojte se k Azure Quantum a odešlete svou úlohu.
K Azure Quantum se můžete připojit a odeslat úlohu pomocí objektu WorkspacePython nebo se připojit a odeslat úlohu pomocí rozhraní příkazového řádku Azure. Použití Azure rozhraní příkazového řádku vyžaduje, abyste kompilovaný program uložili jako textový soubor a tento soubor odeslali pomocí příkazu rozhraní příkazového řádku.
Teď, když máte program zkompilovaný do správného formátu, vytvořte Workspace objekt pro připojení k Azure Quantum. Použijte ID prostředku svého Azure Quantum pracovního prostoru k připojení. Zkopírujte ID prostředku z podokna Přehled ve svém pracovním prostoru na portálu Azure.
Přidejte následující kód do
randomNum.pya vyplňte své ID prostředku z prostoru Azure Quantum workspace:workspace = Workspace(resource_id="") # Fill in your resource IDPoužijte metodu
get_targetsk zobrazení dostupného hardwaru targets v pracovním prostoru:MyTargets = workspace.get_targets() print("This workspace's targets:") for x in MyTargets: print(x)Vyberte :
rigetti.sim.qvmtargetMyTarget = workspace.get_targets("rigetti.sim.qvm")Nakonec použijte metodu
submitk odeslání programu s jeho parametry. Výsledky úlohy jsou vráceny jako Python slovník.job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100) results = job.get_results() print("\nResults: ", results)Pokud chcete extrahovat jenom hodnoty a zobrazit je:
for x in results: print(x)[0, 0, 0, 0] 0.3 [1, 0, 0, 0] 0.1 [1, 1, 1, 1] 0.3 [0, 1, 1, 1] 0.3Všechny vlastnosti úlohy jsou přístupné v
job.details, například:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id){'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...} Job name: MyPythonJob Job status: Succeeded Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
Další podrobnosti o úloze
Tento qdk.azurePython modul obsahuje další metody zobrazení podrobnějších dat úlohy.
job.get_results_histogram(): Tato metoda vrátí slovník výsledků a počet snímků pro každé jedinečné měření. Například výsledky pro předchozí úlohu bylyresults = job.get_results_histogram() for x in results.items(): print(x){ '[0, 0, 0, 0]' : {'Outcome' : [0, 0, 0, 0], 'Count' : 30}, '[1, 0, 0, 0]' : {'Outcome' : [1, 0, 0, 0], 'Count' : 10}, '[1, 1, 1, 1]' : {'Outcome' : [1, 1, 1, 1], 'Count' : 30}, '[0, 1, 1, 1]' : {'Outcome' : [0, 1, 1, 1], 'Count' : 30} }job.get_results_shots(): Tato metoda vrátí seznam výsledků každého snímku. Například výsledky pro předchozí úlohu bylyprint(job.get_results_shots())[ [0, 0, 0, 0], [1, 1, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0], [0, 1, 1, 1], [0, 0, 0, 0], ...]