Začínáme s programy v Q# a editorem Visual Studio Code

V tomto článku najdete postup použití VC Code k vytvoření a odeslání úloh kvantových výpočtů Q#, Jupyter Notebook nebo Pythonu do Azure Quantum pomocí VS Code.

Odesílání úloh Q# do Azure Quantum

Naučte se používat VS Code ke spuštění, ladění a odeslání programu Q# do Azure Quantum.

Požadavky

Podrobnosti o instalaci najdete v tématu Instalace moderní sady QDK ve VS Code.

Načtení ukázkového programu v Q#

  1. Ve VS Code vyberte File New Text File (Nový textový soubor) > a uložte soubor jako RandomNum.qs.

  2. Otevřete RandomNum.qs a zadejte sample, pak v seznamu možností vyberte Náhodný bitový vzorek a soubor uložte.

    Snímek obrazovky se souborem Q# v editoru Visual Studio Code zobrazující seznam ukázek kódu při zápisu slova ukázka do souboru

Poznámka

Můžete také otevřít vlastní soubor s jazykem Q#. Pokud spustíte starší program q# a narazíte na chyby, přečtěte si téma Testování a ladění nebo Migrace programů do moderní sady QDK.

Spuštění programu v jazyce Q#

  1. Pokud chcete otestovat místní spuštění programu v integrovaném simulátoru, klikněte v seznamu příkazů níže @EntryPoint()na Spustit nebo stiskněte Ctrl+F5. Výstup se zobrazí v konzole ladění.

  2. Pokud chcete program před odesláním do Azure Quantum ladit, klikněte v seznamu příkazů níže @EntryPoint()na Ladit nebo stiskněte klávesu F5. Pomocí ovládacích prvků ladění v horní části můžete krokovat, do kódu a z kódu. Další informace o ladění programů v Q# najdete v tématu Testování a ladění.

    Snímek obrazovky se souborem Q# v editoru Visual Studio Code, který ukazuje, kde najít objektiv kódu pomocí příkazů pro spuštění a ladění

Vykreslení histogramu frekvence

Histogram frekvence představuje rozdělení výsledků získaných z vícenásobného spuštění kvantového programu neboli "záběrů". Každý pruh v histogramu odpovídá možnému výsledku a jeho výška představuje počet pozorování výsledku. Histogram frekvence pomáhá vizualizovat rozdělení pravděpodobnosti těchto výsledků.

  1. Vyberte Zobrazit –> Paleta příkazů a zadejte histogram, který by měl vyvolat soubor Q#: Run (Spustit soubor) a zobrazit možnost histogramu . Můžete také kliknout na Histogram ze seznamu příkazů níže @EntryPoint(). Tuto možnost vyberte, pokud chcete otevřít okno histogramu Q#.

    Snímek obrazovky se souborem Q# v editoru Visual Studio Code, který ukazuje, kde najít objektiv kódu pomocí příkazu histogram

  2. Zadejte několik snímků , které se mají spustit, například 100 snímků, a stiskněte Enter. Histogram se zobrazí v okně histogramu Q#.

  3. Kliknutím na ikonu nastavení vlevo nahoře zobrazíte možnosti.

    Snímek obrazovky s oknem histogramu Q# v editoru Visual Studio Code, který ukazuje, jak zobrazit nastavení

  4. 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 %.

    Snímek obrazovky s oknem histogramu Q# v editoru Visual Studio Code

Tip

Histogram můžete přiblížit pomocí kolečka myši nebo gesta trackpadu. Při přiblížení můžete graf posunovat stisknutím klávesy Alt při posouvání.

Připojení k Azure Quantum a odeslání úlohy

Úlohy můžete připojit a odesílat přímo z nástroje VS Code. V tomto příkladu odešlete úlohu do simulátoru Rigetti.

  1. Vyberte Zobrazit –> Paleta příkazů a zadejte Q#: Připojit k pracovnímu prostoru Azure Quantum. Stiskněte Enter.

  2. Vyberte Účet Azure 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í pracovnímu prostoru Azure Quantum. Další informace najdete v tématu Připojení k pracovnímu prostoru Quantum pomocí připojovací řetězec.

  3. Po připojení rozbalte v podokně Průzkumník položku Pracovní prostory Quantum.

  4. Rozbalte pracovní prostor a rozbalte poskytovatele Rigetti .

    Poznámka

    Pokud dojde k problému s připojením ke službě Azure Quantum, 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ě.

  5. Jako rigetti.sim.qvmtargetvyberte .

    Snímek obrazovky editoru Visual Studio Code znázorňující výběr simulátoru Rigetti jako target.

  6. Výběrem ikony přehrávání napravo od target názvu spusťte odesílání aktuálního programu q#. Pokud se zobrazí automaticky otevírané okno, vyberte Změnit profil QIR target a pokračujte.

    Snímek obrazovky editoru Visual Studio Code ukazující, jak spustit simulátor Rigetti jako target.

  7. Přidejte název pro identifikaci úlohy.

  8. Přidejte počet snímků nebo počet spuštění programu.

  9. Stisknutím klávesy Enter úlohu odešlete. Stav úlohy se zobrazí v dolní části obrazovky.

  10. Rozbalte položku Úlohy a najeďte myší na úlohu, která zobrazí časy a stav úlohy.

  11. Výsledky zobrazíte tak, že výběrem ikony cloudu vedle názvu úlohy stáhnete výsledky z úložiště pracovního prostoru a zobrazíte je ve VS Code.

    Snímek obrazovky editoru Visual Studio Code ukazující, jak stáhnout a zobrazit výsledky kvantové úlohy

Odesílání úloh poznámkových bloků Jupyter do Azure Quantum

Naučte se používat VS Code ke spuštění, ladění a odeslání Jupyter Notebook Q# do Azure Quantum. Kroky v tomto článku platí také pro poznámkové bloky Jupyter na místním serveru Jupyter nebo poznámkové bloky na portálu Azure Quantum.

Požadavky

Podrobnosti o instalaci najdete v tématu Instalace moderní sady QDK ve VS Code.

Spuštění a testování programu v místním simulátoru

  1. Ve VS Code vyberte Zobrazit > paletu příkazů a vyberte Vytvořit: Nový Jupyter Notebook.

  2. 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 .

  3. V první buňce poznámkového bloku spusťte příkaz

    import qsharp
    import azure.quantum
    
    • Modul qsharp aktivuje %%qsharp příkaz magic, který umožňuje zadat kód Q# přímo do buňky.
    • Modul azure-quantum poskytuje možnosti připojení k pracovnímu prostoru Azure Quantum.

    Poznámka

    Pokud se jádro ipykernel Jupyter Pythonu nezjistí, VS Code vás vyzve k jeho instalaci.

  4. Přidejte další buňku a zadejte tento kód Q#, který vrátí počet náhodných bitů zadaný uživatelem:

    %%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();
            set results += [r];
        }
        return results
    }
    
  5. K otestování operace můžete použít metodu eval , která může volat libovolnou operaci Q# dříve definovanou v poznámkovém bloku:

    qsharp.eval("RandomNBits(4)")
    
    [Zero, One, One, Zero]
    
  6. Pokud chcete program spustit do místního simulátoru, použijte metodu run . shotsZadejte , nebo kolikrát se má program spustit, a simulátor vrátí výsledky jako seznam Pythonu.

    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]]
    

Kompilace úlohy pomocí základního profilu

Při spouštění programů v místním kvantovém simulátoru můžete odeslat libovolný typ programu q#. Hardware targets Azure Quantum ale zatím nepodporuje všechny funkce potřebné ke spouštění všech programů v jazyce Q#. Pokud chcete kompilovat a odesílat programy v Q# do Azure Quantum, musíte nastavit profil target tak, aby Q# sděloval, které funkce váš target hardware podporuje. V současné době se jedná o základní profil. Další informace najdete v tématu Typy profilů v Azure Quantum.

Pokud chcete znovu inicializovat interpret jazyka Q# a zkompilovat program pomocí základního profilu:

  1. init K nastavení profilu použijte metodu:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Vzhledem k tomu, že jste interpret znovu inicializovali, musíte kód znovu spustit 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();
            set results += [r];
        }
        return results
    }
    
  3. Dále pomocí compile metody určete operaci nebo funkci, která je vstupním bodem programu. Tím se kód zkompiluje do formátu QIR, který pak můžete odeslat na libovolný kvantový hardware:

    MyProgram = qsharp.compile("RandomNBits(4)")
    

Připojení k Azure Quantum a odeslání úlohy

Teď, když máte program zkompilovaný do správného formátu, vytvořte azure.quantum.Workspace objekt pro připojení k Azure Quantum. K připojení použijete ID prostředku pracovního prostoru Azure Quantum. ID prostředku a umístění je možné zkopírovat ze stránky přehledu pracovního prostoru v Azure Portal.

  1. V nové buňce vyplňte ID prostředku a umístění z pracovního prostoru Azure Quantum:

    MyWorkspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. Pomocí metody get_targets zobrazte dostupný hardware targets v pracovním prostoru:

    MyTargets = MyWorkspace.get_targets()
    print("This workspace's targets:")
    MyTargets
    
  3. Vyberte :rigetti.sim.qvmtarget

    MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
    
  4. Nakonec použijte metodu submit k odeslání programu s parametry a zobrazení výsledků:

    job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100)
    job.get_results()
    
    {'Histogram': ['[0, 0, 0, 0]',
      0.3,
      '[1, 0, 0, 0]',
      0.1,
      '[1, 1, 1, 1]',
      0.3,
      '[0, 1, 1, 1]',
      0.3]}
    
  5. Všechny vlastnosti úlohy jsou přístupné v job.detailsnástroji , 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
    

Odeslání Pythonu s úlohami Q# do Azure Quantum

Naučte se používat VS Code k napsání programu v Pythonu, který volá operace Q#, připojení k Azure pomocí příkazů Pythonu nebo Azure CLI a odeslání úlohy.

Požadavky

Podrobnosti o instalaci najdete v tématu Instalace moderní sady QDK ve VS Code.

Vytvoření a import operací v Q#

qsharp Pomocí balíčku můžete ukládat funkce a operace do souborů jazyka Q# a vytvářet projekty Q#, které vám umožní volat do libovolného z nich z kódu Pythonu. To je užitečné hlavně v případě, že potřebujete spustit program, který přebírá vstupní parametry.

  1. Postupujte podle pokynů k vytvoření projektu v jazyce Q#.

  2. Otevřete nový textový soubor, přidejte následující kód jazyka Q#, který vrátí počet náhodných bitů zadaný uživatelem, a uložte soubor do projektu jako source.qs.

    Poznámka

    Všimněte si, že tento kód Q# nemá @EntryPoint funkci jako program v jazyce Q# (viz Odesílání úloh Q# do Azure Quantum), ale na rozdíl od Jupyter Notebook vyžaduje obor názvů (viz Odesílání úloh Jupyter Notebook do Azure Quantum).

    namespace Sample {
    
      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();
               set results += [r];
            }
            return results
      }
    }
    
  3. Ve stejné složce otevřete jiný soubor a uložte ho jako randomNum.py.

  4. Přidejte následující kód pro import qsharp modulů a azure.quantum .

    import qsharp
    import azure.quantum
    
  5. Dále přidejte kód pro definování kořenové složky projektu Q# a otestujte spuštění operace v target místním simulátoru. Operace se volá podle <oboru názvů>.<operation_name( )> a v tomto případě předáváte počet náhodných bitů, které se mají vrátit.

    qsharp.init(project_root = '/MyProjectRootFolder')
    print(qsharp.eval("Sample.RandomNBits(4)"))
    
    [Zero, One, One, Zero]
    
  6. Operaci můžete také otestovat pomocí run metody, která předá další shots parametr a vrátí výsledky v seznamu Pythonu. V randomNum.pysouboru nahraďte předchozí příkaz print následujícím příkazem:

    result = qsharp.run("Sample.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]]
    

Kompilace úlohy pomocí základního profilu

Při spouštění programů v místním kvantovém simulátoru můžete odeslat libovolný typ programu V# . Hardware targets Azure Quantum ale zatím nepodporuje všechny možnosti potřebné ke spuštění všech programů V# . Pokud chcete kompilovat a odesílat programy v Q# do Azure Quantum, musíte nastavit profil target tak, aby Q# říkal, které funkce podporuje váš target hardware. V současné době se jedná o základní profil. Další informace najdete v tématu Typy profilů v Azure Quantum.

Poznámka

V případě programů v jazyce Q# v editoru VS Code nastaví VS Code základní profil automaticky.

  1. init K nastavení profilu použijte metodu:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Pak pomocí compile metody určete operaci nebo funkci, která je vstupním bodem programu. Kompilovaný program je pak možné odeslat na jakýkoli kvantový hardware:

    MyProgram = qsharp.compile("Sample.RandomNBits(4)")
    

Připojení k Azure Quantum a odeslání úlohy

Můžete se připojit k Azure Quantum a odeslat úlohu pomocí objektu vytvořeného Workspace v Pythonu nebo připojit a odeslat úlohu pomocí Azure CLI. Použití Azure CLI vyžaduje, abyste zkompilovaný program uložili jako textový soubor a odeslali ho pomocí příkazu rozhraní příkazového řádku.

Teď, když máte program zkompilovaný do správného formátu, vytvořte azure.quantum.Workspace objekt pro připojení k Azure Quantum. K připojení použijete ID prostředku pracovního prostoru Azure Quantum. ID prostředku a umístění je možné zkopírovat ze stránky přehledu pracovního prostoru v Azure Portal.

  1. Do souboru přidejte následující kód randomNum.pya vyplňte ID prostředku a umístění z pracovního prostoru Azure Quantum:

    workspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. Použijte metodu get_targets k zobrazení dostupného hardwaru targets v pracovním prostoru:

    MyTargets = workspace.get_targets()
    print("This workspace's targets:")
    for x in MyTargets:
        print(x)
    
  3. Vyberte :rigetti.sim.qvmtarget

    MyTarget = workspace.get_targets("rigetti.sim.qvm")
    
  4. Nakonec použijte metodu submit k odeslání programu s jeho parametry. Výsledky úlohy se vrátí jako slovník Pythonu.

    job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100)
    results = job.get_results()
    print("\nResults: ", results)
    
  5. Extrahování pouze hodnot a jejich zobrazení:

    resultList = results.get("Histogram")
    for x in resultList:
        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.3
    
  6. Všechny vlastnosti úlohy jsou přístupné v job.detailsnástroji , 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ší kroky