Udostępnij za pośrednictwem


Jak przesyłać programy w języku Q# za pomocą programu Visual Studio Code

Dowiedz się, jak za pomocą programu Visual Studio Code tworzyć i przesyłać programy w języku Q# do rzeczywistego sprzętu kwantowego. Zadania obliczeń kwantowych można przesłać do usługi Azure Quantum jako autonomiczny program języka Q#, połączyć język Q# z językiem Python w projekcie języka Q# i uruchomić notes Jupyter Notebook.

Przesyłanie zadań języka Q# do usługi Azure Quantum

Dowiedz się, jak używać programu VS Code do uruchamiania, debugowania i przesyłania programu Q# do usługi Azure Quantum.

Wymagania wstępne

Aby uzyskać szczegółowe informacje na temat instalacji, zobacz Instalowanie zestawu QDK w programie VS Code.

Ładowanie przykładowego programu w języku Q#

  1. W programie VS Code wybierz pozycję Plik nowy plik tekstowy i zapisz plik jako RandomNum.qs>.

  2. Otwórz plik RandomNum.qs i wpisz sample, a następnie wybierz pozycję Próbka losowego bitu z listy opcji i zapisz plik.

    Zrzut ekranu przedstawiający plik języka Q# w programie Visual Studio Code z listą przykładów kodu podczas pisania przykładu wyrazu w pliku.

Uwaga

Możesz również otworzyć własny plik języka Q#. Jeśli uruchomisz starszy program w języku Q# i wystąpią błędy, zobacz Testowanie i debugowanie.

Uruchamianie programu w języku Q#

  1. Aby przetestować uruchamianie programu lokalnie na wbudowanym symulatorze, kliknij pozycję Uruchom z listy poleceń obok operacji punktu wejścia lub naciśnij Ctrl+F5. Dane wyjściowe zostaną wyświetlone w konsoli debugowania.

  2. Aby debugować program przed przesłaniem go do usługi Azure Quantum, kliknij pozycję Debuguj z listy poleceń obok operacji punktu wejścia lub naciśnij F5. Użyj kontrolek debugowania u góry, aby przejść do i z kodu. Aby uzyskać więcej informacji na temat debugowania programów języka Q#, zobacz Testowanie i debugowanie.

    Zrzut ekranu przedstawiający plik języka Q# w programie Visual Studio Code pokazujący, gdzie znaleźć obiektyw kodu z poleceniami uruchamiania i debugowania.

Wizualizowanie histogramu częstotliwości

Histogram częstotliwości reprezentuje rozkład wyników uzyskanych z wielokrotnego uruchamiania programu kwantowego lub "strzałów". Każdy słupek w histogramie odpowiada możliwemu wynikowi, a jego wysokość reprezentuje liczbę obserwowanych wyników. Histogram częstotliwości pomaga wizualizować rozkład prawdopodobieństwa tych wyników.

  1. Wybierz pozycję Widok —> paleta poleceń i wpisz "histogram", który powinien wyświetlić opcję Q#: Uruchom plik i pokaż histogram . Możesz również kliknąć pozycję Histogram z listy poleceń obok operacji punktu wejścia. Wybierz tę opcję, aby otworzyć okno histogramu języka Q#.

    Zrzut ekranu przedstawiający plik języka Q# w programie Visual Studio Code pokazujący, gdzie znaleźć obiektyw kodu za pomocą polecenia histogramu.

  2. Wprowadź liczbę zdjęć do wykonania programu, na przykład 100 zdjęć, a następnie naciśnij Enter. Histogram zostanie wyświetlony w oknie histogramu języka Q#.

  3. Kliknij ikonę ustawień w lewym górnym rogu, aby wyświetlić opcje.

    Zrzut ekranu przedstawiający okno histogramu języka Q# w programie Visual Studio Code pokazujące sposób wyświetlania ustawień.

  4. Kliknij pasek, aby wyświetlić procent tego wyniku. W tym przypadku istnieją dwa możliwe wyniki, 0 i 1, a procent każdego wyniku jest zbliżony do 50%.

    Zrzut ekranu przedstawiający okno histogramu języka Q# w programie Visual Studio Code.

Napiwek

Histogram można powiększyć za pomocą kółka przewijania myszy lub gestu klawiatury. Po powiększeniu można przesuwać wykres, naciskając "Alt" podczas przewijania.

Wizualizowanie obwodu kwantowego

Diagramy obwodów kwantowych to wizualna reprezentacja operacji kwantowych. Pokazują one przepływ kubitów za pośrednictwem programu kwantowego, w tym bram i pomiarów zastosowanych do nich. Aby uzyskać więcej informacji, zobacz Diagramy obwodów kwantowych w programie Visual Studio Code.

  1. Wybierz pozycję Widok —> paleta poleceń i wpisz "circuit", który powinien wyświetlić opcję Q#: Pokaż obwód . Możesz również kliknąć pozycję Obwód z listy poleceń obok operacji punktu wejścia.

    Zrzut ekranu przedstawiający plik języka Q# w programie Visual Studio Code pokazujący, gdzie znaleźć polecenie obwodu obiektywu kodu.

  2. Obwód jest wyświetlany w oknie obwodu języka Q#. Diagram obwodu przedstawia jeden rejestr kubitów, który został zainicjowany do stanu |0⟩. Następnie brama Hadamarda, H, jest stosowana do kubitu, a następnie przez operację pomiaru, która jest reprezentowana przez symbol miernika. Aby uzyskać więcej informacji, zobacz Konwencje obwodów kwantowych.

    Zrzut ekranu przedstawiający okno obwodu języka Q# przedstawiające wynikowy diagram obwodu dla losowej operacji bitowej.

Nawiązywanie połączenia z usługą Azure Quantum i przesyłanie zadania

Zadania można łączyć i przesyłać bezpośrednio z programu VS Code. W tym przykładzie prześlesz zadanie do symulatora Rigetti.

  1. Wybierz pozycję Widok —> paleta poleceń i wpisz Q#: Połącz się z obszarem roboczym usługi Azure Quantum. Naciśnij klawisz Enter.

  2. Wybierz pozycję Konto platformy Azure i postępuj zgodnie z monitami, aby nawiązać połączenie z preferowanym katalogiem, subskrypcją i obszarem roboczym.

    Uwaga

    Jeśli masz parametry połączenia, możesz wybrać pozycję Parametry połączenia i wkleić parametry połączenia odpowiadające obszarowi roboczemu usługi Azure Quantum. Aby uzyskać więcej informacji, zobacz Connect to a Quantum workspace using a parametry połączenia (Nawiązywanie połączenia z obszarem roboczym Quantum przy użyciu parametry połączenia).

  3. Po nawiązaniu połączenia w okienku Eksplorator rozwiń węzeł Obszary robocze kwantowe.

  4. Rozwiń obszar roboczy i rozwiń dostawcę Rigetti .

    Uwaga

    Jeśli występuje problem podczas nawiązywania połączenia z usługą Azure Quantum, obok nazwy obszaru roboczego zostanie wyświetlona ikona ostrzeżenia. Umieść kursor nad nazwą obszaru roboczego, aby wyświetlić informacje o błędzie.

  5. Wybierz plik rigetti.sim.qvm jako plik target.

    Zrzut ekranu programu Visual Studio Code przedstawiający sposób wybierania symulatora Rigetti jako target.

  6. Wybierz ikonę odtwarzania po prawej stronie target nazwy, aby rozpocząć przesyłanie bieżącego programu w języku Q#. Jeśli zostanie wyświetlone okno podręczne, wybierz pozycję Zmień profil QIR target i kontynuuj.

    Zrzut ekranu programu Visual Studio Code przedstawiający sposób uruchamiania symulatora Rigetti jako target.

  7. Dodaj nazwę, aby zidentyfikować zadanie.

  8. Dodaj liczbę zdjęć lub liczbę uruchomień programu.

  9. Naciśnij Enter, aby przesłać zadanie. Stan zadania zostanie wyświetlony w dolnej części ekranu.

  10. Rozwiń węzeł Zadania i umieść kursor nad zadaniem, co spowoduje wyświetlenie czasów i stanu zadania.

  11. Aby wyświetlić wyniki, wybierz ikonę chmury obok nazwy zadania, aby pobrać wyniki z magazynu obszaru roboczego i wyświetlić je w programie VS Code.

    Zrzut ekranu programu Visual Studio Code przedstawiający sposób pobierania i wyświetlania wyników zadania kwantowego.

Przesyłanie zadań notesów Jupyter Notebook do usługi Azure Quantum

Dowiedz się, jak używać programu VS Code do uruchamiania, debugowania i przesyłania notesu Jupyter Notebook języka Q# do usługi Azure Quantum. Kroki opisane w tym artykule dotyczą również notesów Jupyter Notebook na lokalnym serwerze Jupyter lub notesach w witrynie Azure Quantum Portal.

Wymagania wstępne

Aby uzyskać szczegółowe informacje na temat instalacji, zobacz Instalowanie zestawu QDK w programie VS Code.

  • Obszar roboczy usługi Azure Quantum w ramach subskrypcji platformy Azure. Aby utworzyć obszar roboczy, zobacz Tworzenie obszaru roboczego usługi Azure Quantum.

  • Środowisko języka Python z zainstalowanym językiem Python i programem .

  • Program VS Code z zainstalowanymi rozszerzeniami Azure Quantum Development Kit, Python i Jupyter .

  • Pakiet i pakiet Azure Quantum qsharp, qsharp-widgetsi azure-quantum ipykernel .

    python -m pip install --upgrade qsharp qsharp-widgets azure-quantum ipykernel
    

Uruchamianie i testowanie programu w symulatorze lokalnym

  1. W programie VS Code wybierz pozycję Wyświetl paletę poleceń i wybierz pozycję Utwórz: nowy notes Jupyter.>

  2. W prawym górnym rogu program VS Code wykryje i wyświetli wersję języka Python oraz wirtualne środowisko języka Python wybrane dla notesu. Jeśli masz wiele środowisk języka Python, może być konieczne wybranie jądra przy użyciu selektora jądra w prawym górnym rogu. Jeśli środowisko nie zostało wykryte, zobacz Jupyter Notebooks in VS Code (Notesy Jupyter Notebooks w programie VS Code ), aby uzyskać informacje o konfiguracji.

  3. W pierwszej komórce notesu uruchom następujący kod języka Python, aby zaimportować niezbędne moduły:

    import qsharp
    import azure.quantum
    
    • Moduł qsharp aktywuje %%qsharp polecenie magic, które umożliwia wprowadzenie kodu języka Q# bezpośrednio do komórki.
    • Moduł azure-quantum zapewnia łączność z obszarem roboczym usługi Azure Quantum.

    Uwaga

    Jeśli nie wykryto jądra ipykernel języka Python Jupyter, program VS Code wyświetli monit o jego zainstalowanie.

  4. Dodaj kolejną komórkę i wprowadź ten kod języka Q#, który zwraca określoną przez użytkownika liczbę bitów losowych:

    Uwaga

    Zwróć uwagę, że gdy tylko wpiszesz polecenie %%qsharpmagic, komórka notesu zmieni typ z języka 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();
            set results += [r];
        }
        return results
    }
    
  5. Aby przetestować operację, możesz użyć eval metody , która może wywołać dowolną operację języka Q# zdefiniowaną wcześniej w notesie:

    qsharp.eval("RandomNBits(4)")
    
    [Zero, One, One, Zero]
    
  6. Aby uruchomić program do lokalnego symulatora, użyj run metody . shotsOkreśl , lub liczbę razy do uruchomienia programu, a symulator zwraca wyniki jako listę języka 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]]
    

Wizualizowanie obwodu kwantowego

Obwody kwantowe można wizualizować przy użyciu qsharp-widgets pakietu. Ten pakiet udostępnia widżet renderujący diagram obwodu kwantowego jako obraz SVG. Aby uzyskać więcej informacji, zobacz Quantum circuit diagrams with Jupyter Notebooks (Diagramy obwodów kwantowych za pomocą notesów Jupyter Notebook).

Dodaj następujący kod do nowej komórki, aby zwizualizować obwód:

from qsharp_widgets import Circuit

Circuit(qsharp.circuit("RandomNBits(4)"))

Zrzut ekranu przedstawiający notes Jupyter Notebook przedstawiający sposób wizualizacji obwodu dla operacji języka Q#.

Aby uzyskać więcej informacji, zobacz Konwencje obwodów kwantowych.

Kompilowanie zadania przy użyciu profilu podstawowego

Po uruchomieniu programów w lokalnym symulatorze kwantowym można przesłać dowolny typ programu języka Q#. Jednak sprzęt targets Azure Quantum nie obsługuje jeszcze pełnych możliwości wymaganych do uruchamiania wszystkich programów w języku Q#. Aby skompilować i przesłać programy języka Q# do usługi Azure Quantum, musisz ustawić profil target , aby poinformować język Q# o możliwościach, które obsługuje sprzęt target . Obecnie jest to profil podstawowy. Aby uzyskać więcej informacji, zobacz Typy profilów w usłudze Azure Quantum.

Aby ponownie zainicjować interpreter języka Q# i skompilować program przy użyciu profilu podstawowego:

  1. init Użyj metody , aby ustawić profil:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Ponieważ ponownie zainicjowano interpreter, musisz ponownie uruchomić kod przy użyciu nowego profilu:

    %%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. Następnie użyj compile metody , aby określić operację lub funkcję, która jest punktem wejścia do programu. Spowoduje to skompilowanie kodu w formacie QIR, który można następnie przesłać do dowolnego sprzętu kwantowego:

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

Nawiązywanie połączenia z usługą Azure Quantum i przesyłanie zadania

Teraz, gdy program został skompilowany w poprawnym formacie, utwórz obiekt w celu nawiązania połączenia z usługą azure.quantum.Workspace Azure Quantum. Aby nawiązać połączenie, użyjesz identyfikatora zasobu obszaru roboczego usługi Azure Quantum. Identyfikator zasobu i lokalizacja można skopiować ze strony przeglądu obszaru roboczego w witrynie Azure Portal.

  1. W nowej komórce wprowadź identyfikator zasobu i lokalizację z obszaru roboczego usługi Azure Quantum:

    MyWorkspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets Użyj metody , aby wyświetlić dostępny sprzęt targets w obszarze roboczym:

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

    MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
    
  4. Na koniec użyj submit metody , aby przesłać program z jego parametrami i wyświetlić wyniki:

    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}
    
  5. Wszystkie właściwości zadania są dostępne w job.detailspliku , na przykład:

    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
    

Dodatkowe szczegóły zadania

Pakiet azure.quantum języka Python zawiera dodatkowe metody wyświetlania bardziej szczegółowych danych zadań.

  • job.get_results_histogram(): Ta metoda zwraca słownik wyników i liczbę strzałów dla każdej unikatowej miary. Na przykład wyniki poprzedniego zadania będą następujące:

    print(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() : Ta metoda zwraca listę każdego wyniku strzału. Na przykład wyniki poprzedniego zadania będą następujące:

    print(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], ...]
    

Przesyłanie języka Python za pomocą zadań języka Q# do usługi Azure Quantum

Dowiedz się, jak używać programu VS Code do pisania programu w języku Python, który wywołuje operacje języka Q#, nawiązuje połączenie z platformą Azure przy użyciu poleceń języka Python lub interfejsu wiersza polecenia platformy Azure i przesyła zadanie.

Wymagania wstępne

Aby uzyskać szczegółowe informacje na temat instalacji, zobacz Instalowanie zestawu QDK w programie VS Code.

Tworzenie i importowanie operacji języka Q#

qsharp Pakiet umożliwia przechowywanie funkcji i operacji w plikach języka Q# oraz tworzenie projektów języka Q#, które pozwalają wywoływać dowolne z nich z poziomu kodu w języku Python. Jest to szczególnie przydatne, gdy trzeba uruchomić program, który przyjmuje parametry wejściowe.

  1. Wykonaj kroki, aby utworzyć projekt w języku Q#.

  2. Otwórz nowy plik tekstowy, dodaj następujący kod języka Q#, który zwraca określoną przez użytkownika liczbę bitów losowych, a następnie zapisz plik w katalogu /src w projekcie jako Source.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();
            set results += [r];
        }
        return results
    }
    
  3. W folderze głównym projektu (z plikiem qsharp.json ) otwórz inny plik i zapisz go jako randomNum.py.

  4. Dodaj następujący kod, aby zaimportować qsharp moduły i azure.quantum .

    import qsharp
    import azure.quantum
    
  5. Następnie dodaj kod, aby zdefiniować folder główny projektu języka Q# i przetestować uruchomienie target operacji w symulatorze lokalnym. Operacja jest wywoływana przez <przestrzeń nazw>.<operation_name( )>, a w tym przypadku przekazujesz liczbę bitów losowych do zwrócenia.

    Uwaga

    Ponieważ w programie nie określono Source.qsprzestrzeni nazw , kompilator używa nazwy pliku jako domyślnej przestrzeni nazw — Source.RandomNBits(). Aby uzyskać więcej informacji, zobacz Projekty i niejawne przestrzenie nazw.

    qsharp.init(project_root = '../MyProjectRootFolder')
    print(qsharp.eval("Source.RandomNBits(4)"))
    
    [Zero, One, One, Zero]
    
  6. Możesz również przetestować operację za pomocą run metody , która przekazuje dodatkowy shots parametr i zwraca wyniki na liście języka Python. W randomNum.pypliku zastąp poprzednią instrukcję print następującym kodem:

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

Kompilowanie zadania przy użyciu profilu podstawowego

Po uruchomieniu programów w lokalnym symulatorze kwantowym można przesłać dowolny typ programu języka Q#. Jednak sprzęt targets Azure Quantum nie obsługuje jeszcze pełnych możliwości wymaganych do uruchamiania wszystkich programów w języku Q#. Aby skompilować i przesłać programy w języku Q# do usługi Azure Quantum, musisz ustawić profil target , aby poinformować język Q# o możliwościach, które obsługuje twój target sprzęt. Obecnie jest to Base profil lub Adpative_RI . Aby uzyskać więcej informacji, zobacz Typy profilów w usłudze Azure Quantum.

Uwaga

W przypadku programów q# tylko w programie VS Code program VS Code automatycznie ustawia Base profil.

  1. init Użyj metody , aby ustawić profil:

    qsharp.init(project_root = '../MyProjectRootFolder', target_profile=qsharp.TargetProfile.Base)
    

    Uwaga

    Ponieważ ponownie inicjalizujesz stan qsharp, musisz ponownie ustawić project_root parametr, aby kompilator wiedział, gdzie znaleźć operację RandomNBits . Można to również zrobić w kroku 5 poprzedniej procedury.

  2. Następnie użyj compile metody , aby określić operację lub funkcję, która jest punktem wejścia do programu. Skompilowany program można następnie przesłać do dowolnego sprzętu kwantowego:

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

Nawiązywanie połączenia z usługą Azure Quantum i przesyłanie zadania

Możesz nawiązać połączenie z usługą Azure Quantum i przesłać zadanie przy użyciu obiektu utworzonego Workspace w języku Python lub połączyć się i przesłać zadanie przy użyciu interfejsu wiersza polecenia platformy Azure. Użycie interfejsu wiersza polecenia platformy Azure wymaga zapisania skompilowanego programu jako pliku tekstowego i przesłania tego pliku przy użyciu polecenia interfejsu wiersza polecenia.

Teraz, gdy program został skompilowany w poprawnym formacie, utwórz obiekt w celu nawiązania połączenia z usługą azure.quantum.Workspace Azure Quantum. Aby nawiązać połączenie, użyjesz identyfikatora zasobu obszaru roboczego usługi Azure Quantum. Identyfikator zasobu i lokalizacja można skopiować ze strony przeglądu obszaru roboczego w witrynie Azure Portal.

  1. Dodaj następujący kod do randomNum.pypliku , wypełniając identyfikator zasobu i lokalizację z obszaru roboczego usługi Azure Quantum:

    workspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets Użyj metody , aby wyświetlić dostępny sprzęt targets w obszarze roboczym:

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

    MyTarget = workspace.get_targets("rigetti.sim.qvm")
    
  4. Na koniec użyj submit metody , aby przesłać program z jego parametrami. Wyniki zadania są zwracane jako słownik języka Python.

    job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100)
    results = job.get_results()
    print("\nResults: ", results)
    
  5. Aby wyodrębnić tylko wartości i wyświetlić 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.3
    
  6. Wszystkie właściwości zadania są dostępne w job.detailspliku , na przykład:

    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
    

Dodatkowe szczegóły zadania

Pakiet azure.quantum języka Python zawiera dodatkowe metody wyświetlania bardziej szczegółowych danych zadań.

  • job.get_results_histogram(): Ta metoda zwraca słownik wyników i liczbę strzałów dla każdej unikatowej miary. Na przykład wyniki poprzedniego zadania będą następujące:

    results = 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() : Ta metoda zwraca listę każdego wyniku strzału. Na przykład wyniki poprzedniego zadania będą następujące:

    print(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], ...]