Rychlý start: Vytvoření kvantového generátoru náhodných čísel v Azure Quantum

Poznámka

Příklady v tomto tématu používají sadu Microsoft Quantum Development Kit (Classic QDK) a ještě nejsou kompatibilní se sadou Azure Quantum Development Kit Preview (Moderní sada QDK). Další informace o moderní sadě QDK najdete na wikiwebu QSharp Na GitHubu.

Naučte se používat Azure Quantum k vytvoření jednoduchého kvantového generátoru náhodných čísel.

Požadavky

K dokončení tohoto kurzu potřebujete

Vytvoření projektu Q# v editoru Visual Studio Code

  1. Ve VS Code otevřete nabídku Zobrazení a vyberte Paleta příkazů.

  2. Zadejte Q#: Create New Project (Q#: Create New Project).

  3. Vyberte Standalone console application (Samostatná konzolová aplikace).

  4. Vyberte adresář, do kterého chcete uložit svůj projekt, například váš domovský adresář. Jako název projektu zadejte QuantumRNG a potom vyberte Create Project (Vytvořit projekt).

  5. V okně, které se zobrazí v dolní části, vyberte Open new project (Otevřít nový projekt).

  6. Měli byste vidět dva soubory: QuantumRNG.csproj , soubor projektu a Program.qs, který obsahuje počáteční kód.

  7. Začněte tím, že otevřete soubor QuantumRNG.csproj a přidáte ExecutionTarget vlastnost, která vám poskytne zpětnou vazbu při návrhu o kompatibilitě vašeho programu pro hardware IonQ.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>ionq.qpu</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Obsah souboru Program.qs nahraďte programem:

    namespace QuantumRNG {
        open Microsoft.Quantum.Intrinsic;
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Canon;
    
        @EntryPoint()
        operation GenerateRandomBits() : Result[] {
            use qubits = Qubit[4];
            ApplyToEach(H, qubits);
            return MultiM(qubits);
        }
    }
    

Poznámka

Pokud chcete získat další informace o tomto kódu programu, přečtěte si téma Vytvoření prvního programu v jazyce Q# pomocí sady Quantum Development Kit.

Příprava Azure CLI

Dále připravíme vaše prostředí pro spuštění programu v pracovním prostoru, který jste vytvořili.

  1. V nabídce Editoru Visual Studio Code vyberte Terminál>Nový terminál.

  2. Přihlaste se k Azure pomocí svých přihlašovacích údajů. Získáte seznam předplatných přidružených k vašemu účtu.

    az login
    
  3. Zadejte předplatné, které chcete použít, z předplatného přidruženého k vašemu účtu Azure. ID předplatného najdete také v přehledu pracovního prostoru v Azure Portal.

    az account set -s MySubscriptionID
    
  4. Použijte quantum workspace set k výběru pracovního prostoru, který jste vytvořili výše jako výchozí pracovní prostor. Všimněte si, že je také potřeba zadat skupinu prostředků a umístění, ve kterém jste ji vytvořili:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Poznámka

    Parametr MyLocation ve výše uvedeném příkladu je oblast zadaná na stránce Vytvořit kvantový pracovní prostor při použití kroků v tématu Vytvoření pracovního prostoru Azure Quantum. Oblast a umístění jsou synonyma. Hodnota parametru může být vyjádřena ve smíšených a malých písmenech v uvozovkách, -l "West US 2"například , nebo malá písmena bez mezer nebo uvozovek, například -l westus2.

  5. V pracovním prostoru jsou k dispozici různí targets poskytovatelé, které jste přidali při vytváření pracovního prostoru. Seznam všech dostupných targets položek můžete zobrazit pomocí příkazu az quantum target list -o table:

    az quantum target list -o table
    

    V závislosti na vybraném poskytovateli uvidíte:

    Provider      Target-id                                            Current Availability    Average Queue Time (seconds)
    ------------  ---------------------------------------------------  ----------------------  ------------------------------
    ionq          ionq.qpu                                             Available               38715
    ionq          ionq.qpu.aria-1                                      Available               2042052
    ionq          ionq.simulator                                       Available               2
    microsoft-qc  microsoft.estimator                                  Available               0
    quantinuum    quantinuum.hqs-lt-s1                                 Available               232817
    quantinuum    quantinuum.hqs-lt-s1-apival                          Available               331
    quantinuum    quantinuum.hqs-lt-s2                                 Unavailable             0
    quantinuum    quantinuum.hqs-lt-s2-apival                          Available               7
    quantinuum    quantinuum.hqs-lt-s1-sim                             Available               19488
    quantinuum    quantinuum.hqs-lt-s2-sim                             Available               1577
    quantinuum    quantinuum.hqs-lt                                    Available               0
    quantinuum    quantinuum.qpu.h1-1                                  Available               232817
    quantinuum    quantinuum.sim.h1-1sc                                Available               331
    quantinuum    quantinuum.qpu.h1-2                                  Unavailable             0
    quantinuum    quantinuum.sim.h1-2sc                                Available               7
    quantinuum    quantinuum.sim.h1-1e                                 Available               19488
    quantinuum    quantinuum.sim.h1-2e                                 Available               1577
    quantinuum    quantinuum.qpu.h1                                    Unavailable             0
    rigetti       rigetti.sim.qvm                                      Available               5
    rigetti       rigetti.qpu.aspen-11                                 Unavailable             0
    rigetti       rigetti.qpu.aspen-m-2                                Available               5
    rigetti       rigetti.qpu.aspen-m-3                                Available               5
    Microsoft     microsoft.paralleltempering-parameterfree.cpu        Available               0
    Microsoft     microsoft.paralleltempering.cpu                      Available               0
    Microsoft     microsoft.simulatedannealing-parameterfree.cpu       Available               0
    Microsoft     microsoft.simulatedannealing.cpu                     Available               0
    Microsoft     microsoft.tabu-parameterfree.cpu                     Available               0
    Microsoft     microsoft.tabu.cpu                                   Available               0
    Microsoft     microsoft.qmc.cpu                                    Available               0
    Microsoft     microsoft.populationannealing.cpu                    Available               0
    Microsoft     microsoft.populationannealing-parameterfree.cpu      Available               0
    Microsoft     microsoft.substochasticmontecarlo.cpu                Available               0
    Microsoft     microsoft.substochasticmontecarlo-parameterfree.cpu  Available               0
    

    Poznámka

    Když odešlete úlohu v Azure Quantum, počká ve frontě, dokud nebude poskytovatel připraven spustit váš program. Sloupec targetAverage Queue Time (Průměrná doba fronty) příkazu seznamu ukazuje, kolik sekund nedávno spustily úlohy čekající ve frontě. Můžete tak získat představu o tom, jak dlouho možná budete muset čekat.

Simulace programu ve zprostředkovatele IonQ

Než spustíte program na skutečném hardwaru, doporučujeme ho nejprve simulovat (pokud je to možné na základě požadovaného počtu qubitů), abyste měli jistotu, že váš algoritmus dělá to, co chcete. IonQ naštěstí poskytuje idealizovaný simulátor, který můžete použít.

Poznámka

Programy v jazyce Q# můžete také simulovat místně pomocí simulátoru :::no-loc text="Úplný stav::: .

Spusťte program pomocí az quantum execute --target-id ionq.simulator -o tablepříkazu . Tento příkaz zkompiluje program, odešle ho do Azure Quantum a počká, dokud IonQ nedokončí simulaci programu. Po dokončení se zobrazí histogram, který by měl vypadat podobně jako následující:

az quantum execute --target-id ionq.simulator -o table
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.06250000   ▐█                      |
[1,0,0,0]  0.06250000   ▐█                      |
[0,1,0,0]  0.06250000   ▐█                      |
[1,1,0,0]  0.06250000   ▐█                      |
[0,0,1,0]  0.06250000   ▐█                      |
[1,0,1,0]  0.06250000   ▐█                      |
[0,1,1,0]  0.06250000   ▐█                      |
[1,1,1,0]  0.06250000   ▐█                      |
[0,0,0,1]  0.06250000   ▐█                      |
[1,0,0,1]  0.06250000   ▐█                      |
[0,1,0,1]  0.06250000   ▐█                      |
[1,1,0,1]  0.06250000   ▐█                      |
[0,0,1,1]  0.06250000   ▐█                      |
[1,0,1,1]  0.06250000   ▐█                      |
[0,1,1,1]  0.06250000   ▐█                      |
[1,1,1,1]  0.06250000   ▐█                      |

To ukazuje stejnou frekvenci pro každý z 16 možných stavů měření 4 qubitů, což je to, co očekáváme od idealizovaného simulátoru! To znamená, že jsme připraveni ji spustit na QPU.

Spuštění programu na hardwaru

Ke spuštění programu na hardwaru použijeme asynchronní příkaz az quantum job submitpro odeslání úlohy . Stejně jako příkaz execute se tento příkaz zkompiluje a odešle program, ale nebude čekat na dokončení provádění. Tento model doporučujeme pro spuštění na hardwaru, protože možná budete muset chvíli počkat, než se úloha dokončí. Pokud chcete získat představu o tom, jak dlouho to může být, můžete spustit příkaz, az quantum target list -o table jak je popsáno výše.

az quantum job submit --target-id ionq.qpu -o table
 Name        ID                                   Status    Target    Submission time
 ----------  ------------------------------------  --------  --------  ---------------------------------
 QuantumRNG  5aa8ce7a-25d2-44db-bbc3-87e48a97249c  Waiting   ionq.qpu  2020-10-22T22:41:27.8855301+00:00

Tabulka ukazuje, že vaše úloha byla odeslána a čeká na její spuštění. Pokud chcete zkontrolovat stav, použijte az quantum job show příkaz a nezapomeňte nahradit job-id parametr výstupem ID předchozím příkazem, například:

 az quantum job show -o table --job-id 5aa8ce7a-25d2-44db-bbc3-87e48a97249c 
 Name        ID                                   Status    Target    Submission time
 ----------  ------------------------------------  --------  --------  ---------------------------------
 QuantumRNG  5aa8ce7a-25d2-44db-bbc3-87e48a97249c  Waiting   ionq.qpu  2020-10-22T22:41:27.8855301+00:00

Nakonec se Status ve výše uvedené tabulce změní na Succeeded. Jakmile to uděláte, můžete získat výsledky z úlohy spuštěním az quantum job outputpříkazu :

az quantum job output -o table --job-id 5aa8ce7a-25d2-44db-bbc3-87e48a97249c 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

Histogram, který obdržíte, se může mírně lišit od výše uvedeného, ale měli byste zjistit, že stavy jsou obecně pozorovány se stejnou frekvencí.

Požadavky

K dokončení tohoto kurzu potřebujete

Vytvoření projektu Q# v editoru Visual Studio Code

  1. Ve VS Code otevřete nabídku Zobrazení a vyberte Paleta příkazů.

  2. Zadejte Q#: Create New Project (Q#: Create New Project).

  3. Vyberte Standalone console application (Samostatná konzolová aplikace).

  4. Vyberte adresář, do kterého chcete uložit svůj projekt, například váš domovský adresář. Jako název projektu zadejte QuantumRNG a potom vyberte Create Project (Vytvořit projekt).

  5. V okně, které se zobrazí v dolní části, vyberte Open new project (Otevřít nový projekt).

  6. Měli byste vidět dva soubory: QuantumRNG.csproj , soubor projektu a Program.qs, který obsahuje počáteční kód.

  7. Začněte tím, že otevřete soubor QuantumRNG.csproj a přidáte ExecutionTarget vlastnost, která poskytuje zpětnou vazbu v době návrhu o kompatibilitě programu pro hardware společnosti Quantinuum.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum.qpu.h1-1</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Obsah souboru Program.qs nahraďte programem:

    namespace QuantumRNG {
        open Microsoft.Quantum.Intrinsic;
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Canon;
    
        @EntryPoint()
        operation GenerateRandomBits() : Result[] {
            use qubits = Qubit[4];
            ApplyToEach(H, qubits);
            return MultiM(qubits);
        }
    }
    

Poznámka

Pokud chcete získat další informace o tomto kódu programu, přečtěte si téma Vytvoření prvního programu v jazyce Q# pomocí sady Quantum Development Kit.

Příprava Azure CLI

Dále připravíme vaše prostředí pro spuštění programu v pracovním prostoru, který jste vytvořili.

  1. V nabídce Editoru Visual Studio Code vyberte Terminál>Nový terminál.

  2. Přihlaste se k Azure pomocí svých přihlašovacích údajů. Získáte seznam předplatných přidružených k vašemu účtu.

    az login
    
  3. Zadejte předplatné, které chcete použít, z předplatného přidruženého k vašemu účtu Azure. ID předplatného najdete také v přehledu pracovního prostoru v Azure Portal.

    az account set -s MySubscriptionID
    
  4. Použijte quantum workspace set k výběru pracovního prostoru, který jste vytvořili výše jako výchozí pracovní prostor. Všimněte si, že je také potřeba zadat skupinu prostředků a umístění, ve kterém jste ji vytvořili:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Poznámka

    Parametr MyLocation ve výše uvedeném příkladu je oblast zadaná na stránce Vytvořit pracovní prostor Quantum při použití kroků v části Vytvoření pracovního prostoru Azure Quantum. Oblast a Umístění jsou synonyma. Hodnota parametru může být vyjádřena ve smíšených malých a malých písmenech v uvozovkách, -l "West US 2"například , nebo malá písmena bez mezer nebo uvozovek, například -l westus2.

  5. V pracovním prostoru jsou k dispozici různí targets poskytovatelé než poskytovatelé, které jste přidali při vytváření pracovního prostoru. Pomocí příkazu az quantum target list -o tablemůžete zobrazit seznam všech dostupných targets možností:

    Poznámka

    Nedávno target se změnily názvy pro nástroje Quantinuum Syntax Checker, Emulators a QPU. Aktualizované názvy se používají v tomto tématu. Podrobnosti najdete v tématu o poskytovateli Quantinuum .

    az quantum target list -o table
    

    který vám poskytne výstup

    Provider      Target-id                                            Current Availability    Average Queue Time (seconds)
    ------------  ---------------------------------------------------  ----------------------  ------------------------------
    ionq          ionq.qpu                                             Available               38715
    ionq          ionq.qpu.aria-1                                      Available               2042052
    ionq          ionq.simulator                                       Available               2
    microsoft-qc  microsoft.estimator                                  Available               0
    quantinuum    quantinuum.hqs-lt-s1                                 Available               232817
    quantinuum    quantinuum.hqs-lt-s1-apival                          Available               331
    quantinuum    quantinuum.hqs-lt-s2                                 Unavailable             0
    quantinuum    quantinuum.hqs-lt-s2-apival                          Available               7
    quantinuum    quantinuum.hqs-lt-s1-sim                             Available               19488
    quantinuum    quantinuum.hqs-lt-s2-sim                             Available               1577
    quantinuum    quantinuum.hqs-lt                                    Available               0
    quantinuum    quantinuum.qpu.h1-1                                  Available               232817
    quantinuum    quantinuum.sim.h1-1sc                                Available               331
    quantinuum    quantinuum.qpu.h1-2                                  Unavailable             0
    quantinuum    quantinuum.sim.h1-2sc                                Available               7
    quantinuum    quantinuum.sim.h1-1e                                 Available               19488
    quantinuum    quantinuum.sim.h1-2e                                 Available               1577
    quantinuum    quantinuum.qpu.h1                                    Unavailable             0
    rigetti       rigetti.sim.qvm                                      Available               5
    rigetti       rigetti.qpu.aspen-11                                 Unavailable             0
    rigetti       rigetti.qpu.aspen-m-2                                Available               5
    rigetti       rigetti.qpu.aspen-m-3                                Available               5
    Microsoft     microsoft.paralleltempering-parameterfree.cpu        Available               0
    Microsoft     microsoft.paralleltempering.cpu                      Available               0
    Microsoft     microsoft.simulatedannealing-parameterfree.cpu       Available               0
    Microsoft     microsoft.simulatedannealing.cpu                     Available               0
    Microsoft     microsoft.tabu-parameterfree.cpu                     Available               0
    Microsoft     microsoft.tabu.cpu                                   Available               0
    Microsoft     microsoft.qmc.cpu                                    Available               0
    Microsoft     microsoft.populationannealing.cpu                    Available               0
    Microsoft     microsoft.populationannealing-parameterfree.cpu      Available               0
    Microsoft     microsoft.substochasticmontecarlo.cpu                Available               0
    Microsoft     microsoft.substochasticmontecarlo-parameterfree.cpu  Available               0
    

    Poznámka

    Když odešlete úlohu ve službě Azure Quantum, počká ve frontě, dokud poskytovatel nebude připravený spustit váš program. Sloupec targetAverage Queue Time (Průměrná doba fronty) příkazu seznamu ukazuje, kolik sekund nedávno čekaly úlohy ve frontě. Získáte tak představu o tom, jak dlouho budete muset čekat.

Kontrola programu v nástroji pro kontrolu syntaxe Quantinuum

Než program spustíte na skutečném hardwaru, doporučujeme ho nejprve spustit v kvantovém simulátoru (pokud je to možné, na základě požadovaného počtu qubitů), aby se zajistilo, že váš algoritmus dělá to, co chcete.

Pokud chcete program spustit pomocí kontroly syntaxe Quantinuum, odešlete následující příkaz:

az quantum execute --target-id quantinuum.sim.h1-1sc -o table

Tento příkaz zkompiluje program, odešle ho do kontroly syntaxe Quantinuum a počká, dokud nedokončí simulaci programu. Po dokončení se zobrazí histogram podobný tomuto:

Result     Frequency
---------  -----------  ----------------------
[0,0,0,0]  1.00000000   |████████████████████|

Při pohledu na histogram si můžete všimnout, že generátor náhodných čísel pokaždé vrátil hodnotu 0, což není příliš náhodné. Důvodem je to, že zatímco kontrola syntaxe zajišťuje úspěšné spuštění kódu na hardwaru Quantinuum, vrátí také hodnotu 0 pro každé kvantové měření. Pro generátor skutečně náhodných čísel musíte okruh spustit na kvantovém hardwaru.

Spuštění programu na hardwaru

Ke spuštění programu na hardwaru použijeme příkaz az quantum job submitpro asynchronní odesílání úloh . Podobně jako u execute příkazu se program zkompiluje a odešle, ale nebude čekat na dokončení provádění. Tento model doporučujeme pro spuštění na hardwaru, protože možná budete muset chvíli počkat, než se úloha dokončí. Pokud chcete získat představu o tom, jak dlouho to může být, můžete spustit příkaz az quantum target list -o table , jak je popsáno výše.

az quantum job submit --target-id quantinuum.qpu.h1-1 -o table
 Name        ID                                    Status    Target                Submission time
 ----------  ------------------------------------  --------  --------              ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   quantinuum.qpu.h1-1   2020-01-12T22:41:27.8855301+00:00

Tabulka ukazuje, že vaše úloha byla odeslána a čeká na její spuštění. Pokud chcete zkontrolovat stav, použijte az quantum job show příkaz . Nezapomeňte nahradit job-id parametr výstupem ID předchozího příkazu, například:

 az quantum job show -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
 Name        ID                                    Status    Target               Submission time
 ----------  ------------------------------------  --------  --------             ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   quantinuum.qpu.h1-1  2020-10-22T22:41:27.8855301+00:00

Status ve výše uvedené tabulce se změní na Succeeded. Jakmile to uděláte, můžete získat výsledky z úlohy spuštěním az quantum job outputpříkazu :

az quantum job output -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

Zobrazený histogram se může mírně lišit od výše uvedeného histogramu, ale měli byste zjistit, že stavy jsou obecně pozorovány se stejnou frekvencí.

Požadavky

K dokončení tohoto kurzu potřebujete

Vytvoření projektu Q# v editoru Visual Studio Code

  1. Ve VS Code otevřete nabídku View (Zobrazení ) a vyberte Command Palette (Paleta příkazů).

  2. Zadejte Q#: Create New Project (Vytvořit nový projekt).

  3. Vyberte Standalone console application (Samostatná konzolová aplikace).

  4. Vyberte adresář, do kterého chcete uložit svůj projekt, například váš domovský adresář. Jako název projektu zadejte QuantumRNG a potom vyberte Create Project (Vytvořit projekt).

  5. V okně, které se zobrazí v dolní části, vyberte Open new project (Otevřít nový projekt).

  6. Měly by se zobrazit dva soubory: QuantumRNG.csproj , soubor projektu a Program.qs, který obsahuje počáteční kód.

  7. Začněte otevřením souboru QuantumRNG.csproj a přidáním ExecutionTarget vlastnosti, která poskytuje zpětnou vazbu v době návrhu týkající se kompatibility programu pro hardware společnosti Rigetti.

    <Project Sdk="Microsoft.Quantum.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>rigetti.qpu.aspen-m-3</ExecutionTarget>
      </PropertyGroup>
    </Project>
    
  8. Obsah souboru Program.qs nahraďte programem :

    namespace QuantumRNG {
       open Microsoft.Quantum.Intrinsic;
       open Microsoft.Quantum.Measurement;
       open Microsoft.Quantum.Canon;
    
       @EntryPoint()
       operation GenerateRandomBits() : Result[] {
          use qubits = Qubit[4];
          for q in qubits {
             H(q);
          }
          return MeasureEachZ(qubits);
       }
    }
    

    Poznámka

    Při dosažení stejných výsledků se vzorový kód pro Rigetti liší od ostatních příkladů v tomto rychlém startu a používá smyčku for k provedení kvantové H operace a MeasureEachZ měření výsledků. V současné době Rigetti targets nepodporují měnitelná pole, a proto nepodporují ApplyToEach operace nebo MultiM .

Příprava Azure CLI

V dalším kroku připravíme vaše prostředí pro spuštění programu v pracovním prostoru, který jste vytvořili.

  1. V nabídce editoru Visual Studio Code vyberteTerminal New Terminal (Nový terminál).>

  2. Přihlaste se k Azure pomocí svých přihlašovacích údajů. Zobrazí se seznam předplatných přidružených k vašemu účtu.

    az login
    
  3. Zadejte předplatné, které chcete použít, z předplatného přidruženého k vašemu účtu Azure. ID předplatného najdete také v přehledu pracovního prostoru v Azure Portal.

    az account set -s MySubscriptionID
    
  4. Použijte quantum workspace set k výběru pracovního prostoru, který jste vytvořili výše jako výchozí pracovní prostor. Všimněte si, že je také potřeba zadat skupinu prostředků a umístění, ve kterém jste ji vytvořili:

    az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
    
     Location    Name         ProvisioningState    ResourceGroup    StorageAccount      Usable
     ----------  -----------  -------------------  ---------------  ------------------  --------
     MyLocation  MyWorkspace  Succeeded            MyResourceGroup  /subscriptions/...  Yes
    
    

    Poznámka

    Parametr MyLocation ve výše uvedeném příkladu je oblast zadaná na stránce Vytvořit pracovní prostor Quantum při použití kroků v části Vytvoření pracovního prostoru Azure Quantum. Oblast a Umístění jsou synonyma. Hodnota parametru může být vyjádřena ve smíšených malých a malých písmenech v uvozovkách, -l "West US 2"například , nebo malá písmena bez mezer nebo uvozovek, například -l westus2.

  5. V pracovním prostoru jsou k dispozici různí targets poskytovatelé než poskytovatelé, které jste přidali při vytváření pracovního prostoru. Pomocí příkazu az quantum target list -o tablemůžete zobrazit seznam všech dostupných targets možností:

    az quantum target list -o table
    

    , který vám poskytne výstup podobný

    Provider        Target-id                                     Current Availability  Average Queue Time
    ----------      -------------------------------------------   --------------------  --------------------
    ionq            ionq.qpu                                      Available             0
    ionq            ionq.qpu.aria-1                               Available             0
    ionq            ionq.simulator                                Available             0
    microsoft-q c   microsoft.estimator
    quantinuum      quantinuum.qpu.h1-1                           Available             0
    quantinuum      quantinuum.qpu.h1-1sc                         Available             0
    quantinuum      quantinuum.qpu.h1-1e                          Available             0
    quantinuum      quantinuum.qpu.h1-2                           Available             0
    quantinuum      quantinuum.qpu.h1-2sc                         Available             0
    quantinuum      quantinuum.qpu.h1-2e                          Available             0
    rigetti         rigetti.sim.qvm                               Available             5
    rigetti         rigetti.qpu.aspen-11                          Unavailable           0
    rigetti         rigetti.qpu.aspen-m-2                         Available             5
    rigetti         rigetti.qpu.aspen-m-3                         Available             5
    

    Poznámka

    Když odešlete úlohu ve službě Azure Quantum, počká ve frontě, dokud poskytovatel nebude připravený spustit váš program. Sloupec targetAverage Queue Time (Průměrná doba fronty) příkazu seznamu ukazuje, kolik sekund nedávno čekaly úlohy ve frontě. Získáte tak představu o tom, jak dlouho budete muset čekat.

Simulace programu v simulátoru Rigetti

Než program spustíte na skutečném hardwaru, doporučujeme ho nejprve spustit v kvantovém simulátoru (pokud je to možné, na základě požadovaného počtu qubitů), aby se zajistilo, že váš algoritmus dělá to, co chcete.

Pokud chcete spustit program pomocí simulátoru Rigetti QVM, odešlete následující příkaz:

az quantum execute --target-id rigetti.sim.qvm -o table

Tento příkaz zkompiluje program, odešle ho do simulátoru Rigetti QVM a počká, dokud nedokončí simulaci programu. Po dokončení se zobrazí histogram podobný tomuto:

Result        Frequency
------------  -----------  ----------------------[0, 0, 0, 0]  0.06600000   |█                   |
[1, 1, 1, 1]  0.05800000   |█                   |
[0, 0, 0, 1]  0.06000000   |█                   |
[0, 1, 1, 1]  0.07400000   |█                   |
[0, 0, 1, 1]  0.05800000   |█                   |
[1, 0, 1, 0]  0.06400000   |█                   |
[1, 1, 0, 1]  0.07600000   |██                  |
[1, 1, 0, 0]  0.04400000   |█                   |
[0, 1, 0, 1]  0.06000000   |█                   |
[1, 0, 1, 1]  0.07400000   |█                   |
[0, 1, 0, 0]  0.05800000   |█                   |
[0, 0, 1, 0]  0.07200000   |█                   |
[0, 1, 1, 0]  0.06800000   |█                   |
[1, 1, 1, 0]  0.05600000   |█                   |
[1, 0, 0, 0]  0.05600000   |█                   |
[1, 0, 0, 1]  0.05600000   |█                   |

Spuštění programu na hardwaru

Ke spuštění programu na hardwaru použijeme příkaz az quantum job submitpro asynchronní odesílání úloh . Podobně jako u execute příkazu se program zkompiluje a odešle, ale nebude čekat na dokončení provádění. Tento model doporučujeme pro spuštění na hardwaru, protože možná budete muset chvíli počkat, než se úloha dokončí. Pokud chcete získat představu o tom, jak dlouho to může být, můžete spustit příkaz az quantum target list -o table , jak je popsáno výše.

az quantum job submit --target-id rigetti.qpu.aspen-m-3 -o table
 Name        ID                                    Status    Target                Submission time
 ----------  ------------------------------------  --------  --------              ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   rigetti.qpu.aspen-m-3   2020-01-12T22:41:27.8855301+00:00

Tabulka ukazuje, že vaše úloha byla odeslána a čeká na její spuštění. Pokud chcete zkontrolovat stav, použijte az quantum job show příkaz . Nezapomeňte nahradit job-id parametr výstupem ID předchozího příkazu, například:

 az quantum job show -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
 Name        ID                                    Status    Target               Submission time
 ----------  ------------------------------------  --------  --------             ---------------------------------
 QuantumRNG  b4d17c63-2119-4d92-91d9-c18d1a07e08f  Waiting   rigetti.qpu.aspen-m-3  2020-10-22T22:41:27.8855301+00:00

Nakonec uvidíte Status ve výše uvedené tabulce změnu na Succeeded. Jakmile to uděláte, můžete získat výsledky z úlohy spuštěním az quantum job outputpříkazu :

az quantum job output -o table --job-id b4d17c63-2119-4d92-91d9-c18d1a07e08f 
Result     Frequency
---------  -----------  -------------------------
[0,0,0,0]  0.05200000   ▐█                      |
[1,0,0,0]  0.07200000   ▐█                      |
[0,1,0,0]  0.05000000   ▐█                      |
[1,1,0,0]  0.06800000   ▐█                      |
[0,0,1,0]  0.04600000   ▐█                      |
[1,0,1,0]  0.06000000   ▐█                      |
[0,1,1,0]  0.06400000   ▐█                      |
[1,1,1,0]  0.07600000   ▐██                     |
[0,0,0,1]  0.04800000   ▐█                      |
[1,0,0,1]  0.06200000   ▐█                      |
[0,1,0,1]  0.07400000   ▐█                      |
[1,1,0,1]  0.08000000   ▐██                     |
[0,0,1,1]  0.05800000   ▐█                      |
[1,0,1,1]  0.06800000   ▐█                      |
[0,1,1,1]  0.05200000   ▐█                      |
[1,1,1,1]  0.07000000   ▐█                      |

Zobrazený histogram se může mírně lišit od výše uvedeného histogramu, ale měli byste zjistit, že stavy jsou obecně pozorovány se stejnou frekvencí.

Poznámka

Pokud při práci s Azure Quantum narazíte na chybu, můžete se podívat na náš seznam běžných problémů.

Další kroky

Tento rychlý start ukázal, jak začít spouštět programy v Q# v různých simulátorech kvantových výpočtů a QPU. Další informace o dostupných poskytovatelích najdete v dokumentaci s přehledem zprostředkovatele kvantových výpočtů .

Doporučujeme pokračovat v cestě tím, že se dozvíte více o různých typech targets nástrojů v Azure Quantum, které určují typy programů q#, které můžete spouštět pro daného poskytovatele. Mohlo by vás také zajímat, jak odesílat úlohy Q# pomocí Pythonu, poznámkových bloků Jupyter nebo Azure CLI.

Hledáte další ukázky ke spuštění? Podívejte se na adresář ukázek pro Azure Quantum.

A konečně, pokud se chcete dozvědět více o psaní programů v Q#, projděte si uživatelskou příručku pro programovací jazyk Q#.