Ćwiczenie — rozpoczynanie pracy z narzędziem do szacowania zasobów usługi Azure Quantum

Ukończone

W poprzedniej lekcji przedstawiono, że narzędzie do szacowania zasobów usługi Azure Quantum przyjmuje trzy główne parametry wejściowe: fizyczne parametry kubitu, schemat korekty błędu kwantowego (QEC) i budżet błędów.

Teraz przećwiczmy narzędzie do szacowania zasobów. W tej lekcji użyjesz narzędzia do szacowania zasobów w celu oszacowania wymagań dotyczących zasobów fizycznych dla prostego programu kwantowego.

Instalowanie wymaganych pakietów

Aby użyć narzędzia do szacowania zasobów, zainstaluj najnowsze qsharp pakiety i qsharp-widgets pakiety języka Python z zestawu Azure Quantum Development Kit (QDK).

python -m pip install --upgrade qsharp qsharp-widgets

Jeśli rozszerzenie QDK dla programu Visual Studio Code (VS Code) nie zostało jeszcze zainstalowane, zobacz Instalowanie rozszerzenia QDK.

Tworzenie algorytmu kwantowego w notesie Jupyter

Napiszmy algorytm kwantowy w notesie Jupyter. Aby utworzyć notes Jupyter za pomocą zestawu QDK w programie VS Code, wykonaj następujące kroki:

  1. Otwórz program VS Code.

  2. Otwórz menu Widok , a następnie wybierz pozycję Paleta poleceń. Zostanie wyświetlone pole wejściowe.

  3. W polu wejściowym wprowadź i wybierz opcję Utwórz: nowy Jupyter Notebook.

  4. W pierwszej komórce tego notesu zaimportuj pakiet qsharp oraz funkcję EstimateDetails.

    import qsharp
    from qsharp_widgets import EstimateDetails
    
  5. Wybierz przycisk + Kod , aby dodać nową komórkę.

  6. Skopiuj następujący RandomBit kod do nowej komórki:

    %%qsharp
    /// # Sample
    /// Random Bit
    ///
    /// # Description
    /// This Q# program generates a random bit by setting a qubit in a superposition
    /// of the computational basis states |0〉 and |1〉, and returning the measurement
    /// result.
    
        operation RandomBit() : Result {
            // Qubits are only accessible for the duration of the scope where they
            // are allocated and are automatically released at the end of the scope.
            use qubit = Qubit();
    
            // Set the qubit in superposition by applying a Hadamard transformation.
            H(qubit);
    
            // Measure the qubit. There is a 50% probability of measuring either 
            // `Zero` or `One`.
            let result = M(qubit);
    
            // Reset the qubit so it can be safely released.
            Reset(qubit);
            return result;
        }
    

Szacowanie zasobów dla algorytmu kwantowego

Uruchom narzędzie do szacowania zasobów, aby oszacować zasoby fizyczne potrzebne do uruchomienia RandomBit operacji. Jeśli nie określisz żadnych parametrów, narzędzie do szacowania zasobów używa następujących domyślnych wartości parametrów:

  • qubit_gate_ns_e3 dla modelu kubitu
  • surface_code kod poprawki błędu
  • 0.001 dla budżetu błędów

Aby uruchomić narzędzie do szacowania zasobów, wykonaj następujące kroki:

  1. Dodaj nową komórkę i skopiuj następujący kod do tej komórki:

    result = qsharp.estimate("RandomBit()")
    
    EstimateDetails(result)
    

    Funkcja qsharp.estimate tworzy obiekt wynikowy zawierający informacje z narzędzia do szacowania zasobów. Przekazujemy result do funkcji EstimateDetails, która wyświetla zestaw tabel w listach rozwijanych zawierających dane wyjściowe z narzędzia do szacowania zasobów.

  2. Rozwiń pierwszą tabelę o nazwie Szacowanie zasobów fizycznych. W tej tabeli przedstawiono środowisko uruchomieniowe, niezawodne operacje kwantowe na sekundę oraz liczbę kubitów wymaganych do uruchomienia algorytmu.

    Szacowanie zasobów fizycznych Wartość
    Środowisko uruchomieniowe 2 mikrosekony
    rQOPS 3,00 mln
    Kubity fizyczne 300

    Operacja RandomBit wymaga 300 kubitów fizycznych i trwa dwie mikrosekundy.

  3. Wybierz ponownie listę rozwijaną Szacowanie zasobów fizycznych, aby zwinąć tabelę.

  4. Aby sprawdzić inne tabele, wybierz listę rozwijaną, aby rozwinąć odpowiednią tabelę. Na przykład wybierz z listy rozwijanej Parametry kubitu logicznego. W tej tabeli pokazano, że odległość kodu wynosi 5 oraz że na każdy kubit logiczny przypada 50 kubitów fizycznych.

    Parametr kubitu logicznego Wartość
    Schemat QEC surface_code
    Odległość kodu 5
    Kubity fizyczne 50
    Czas cyklu logicznego 2 mikrosekony
    Wskaźnik błędów kubitu logicznego 3.00e-5
    Współczynnik przeprawy 0.03
    Próg korekty błędu 0,01
    Formuła czasu cyklu logicznego (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance
    Formuła kubitów fizycznych 2 * codeDistance * codeDistance
  5. jobParams Użyj pola, aby uzyskać dostęp do wszystkich parametrów docelowych, które można przekazać do zadania, i zbadać wartości domyślne parametrów, które nie są określone. Utwórz nową komórkę i skopiuj następujący kod do tej komórki:

    result['jobParams']
    
  6. Uruchom nową komórkę i sprawdź dane wyjściowe:

    {'qecScheme': {'name': 'surface_code',
      'errorCorrectionThreshold': 0.01,
      'crossingPrefactor': 0.03,
      'distanceCoefficientPower': 0,
      'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',
      'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance',
      'maxCodeDistance': 50},
     'errorBudget': 0.001,
     'qubitParams': {'instructionSet': 'GateBased',
      'name': 'qubit_gate_ns_e3',
      'oneQubitMeasurementTime': '100 ns',
      'oneQubitGateTime': '50 ns',
      'twoQubitGateTime': '50 ns',
      'tGateTime': '50 ns',
      'oneQubitMeasurementErrorRate': 0.001,
      'oneQubitGateErrorRate': 0.001,
      'twoQubitGateErrorRate': 0.001,
      'tGateErrorRate': 0.001,
      'idleErrorRate': 0.001},
     'constraints': {'maxDistillationRounds': 3},
     'estimateType': 'singlePoint'}
    

W przypadku tego algorytmu Estimator zasobów używa modelu kubitu qubit_gate_ns_e3, kodu korekty błędu surface_code oraz wartości 0,001 na budżet błędu. Są to wartości domyślne tych parametrów, ponieważ nie określono ich wartości podczas wywoływanego narzędzia do szacowania zasobów.

Zmień wartości domyślne i ponownie szacuj zasoby

Aby uruchomić narzędzie do szacowania z wartościami parametrów innych niż wartości domyślne, określ inne wartości parametrów podczas wywoływania narzędzia do szacowania zasobów. Zmieńmy model kubitu, schemat QEC i budżet błędów.

Zmień model kubitu

Szacowanie kosztów uruchamiania tego samego algorytmu na maszynie Majorana. W tym celu przekaż parametr qubitParams z polem name ustawionym jako qubit_maj_ns_e6 podczas wywoływania narzędzia do szacowania zasobów.

W nowej komórce skopiuj i uruchom następujący kod:

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                }})

EstimateDetails(result_maj)

Rozwiń listy rozwijane w danych wyjściowych, aby dowiedzieć się, jak koszty zasobów różnią się dla maszyny Majorana w porównaniu z maszyną bramkową.

Zmienianie schematu QEC

Następnie szacuj koszt dla tego samego algorytmu na maszynie Majorana ze schematem QEC Floquet. W tym celu przekaż parametr qecScheme z polem name ustawionym jako floquet_code podczas wywoływania narzędzia do szacowania zasobów.

W nowej komórce skopiuj i uruchom następujący kod:

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                }})

EstimateDetails(result_maj)

Rozwiń listy rozwijane w danych wyjściowych, aby dowiedzieć się, jak koszty zasobów różnią się w schemacie QEC Floquet w porównaniu ze schematem kodu powierzchni.

Zmień budżet błędów

Na koniec szacuj koszt tych samych parametrów co poprzednie oszacowanie, ale zwiększ budżet błędów do 10%. W tym celu przekaż errorBudget parametr z wartością ustawioną na 0.1 podczas wywoływania narzędzia do szacowania zasobów.

W nowej komórce skopiuj i uruchom następujący kod:

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                },
                "errorBudget": 0.1})

EstimateDetails(result_maj)

Gratulacje! Narzędzie do szacowania zasobów zostało pomyślnie użyte do oszacowania zasobów fizycznych wymaganych do uruchomienia prostego algorytmu kwantowego. Parametry zostały również dostosowane, aby zobaczyć, jak wpływają one na oszacowania zasobów.

W następnej lekcji oszacujesz zasoby potrzebne do znacznie bardziej złożonego programu kwantowego: algorytm Shora.