Zintegrowane przetwarzanie hybrydowe

Zintegrowane przetwarzanie hybrydowe łączy ze sobą klasyczne i kwantowe procesy, dzięki czemu klasyczny kod może kontrolować wykonywanie operacji kwantowych na podstawie pomiarów obwodu środkowego, podczas gdy fizyczne kubity pozostają aktywne. Korzystając z typowych technik programowania, takich jak zagnieżdżone warunkowe, pętle i wywołania funkcji, pojedynczy program kwantowy może uruchamiać złożone problemy, zmniejszając liczbę potrzebnych zdjęć. Korzystając z technik ponownego użycia kubitu, większe programy mogą być uruchamiane na maszynach z mniejszą liczbą kubitów.

Ważne

Zintegrowane hybrydowe obliczenia kwantowe nie są obecnie obsługiwane przez rozszerzenie Modern Quantum Development Kit (Modern QDK) dla Visual Studio Code, wraz z innymi składnikami w przykładach na tej stronie, takich jak jądro IQ#, %azure polecenie magic lub qsharp.azure moduł. Aby uruchomić zintegrowane zadania hybrydowe, użyj zestawu Microsoft Quantum Development Kit (klasyczny zestaw QDK). Aby uzyskać więcej informacji, zobacz Kontynuuj pracę w klasycznym zestawie QDK.

Aby uzyskać więcej informacji, zobacz:

Zintegrowane hybrydowe obliczenia kwantowe

Obsługiwane targets

Obecnie zintegrowany hybrydowy model obliczeniowy w usłudze Azure Quantum jest obsługiwany w aplikacji Quantinuumtargets.

Quantinuum

Obsługiwana funkcja Uwagi
Pętle klasyczne Tylko ograniczone pętle
Dowolny przepływ sterowania Użycie rozgałęziania if/else
Pomiar w obwodzie środkowym Korzysta z klasycznych zasobów rejestru
Ponowne użycie kubitu Nie dotyczy
Obliczenia klasyczne w czasie rzeczywistym 32-bitowa arytmetyka niepodpisanej liczby całkowitej
Korzysta z klasycznych zasobów rejestru

Wprowadzenie

Aby rozpocząć eksplorowanie zintegrowanego programowania hybrydowego, zalecamy zapoznanie się z przykładami w tym artykule lub zapoznanie się z kartą Hybrydowe obliczenia kwantowe w galerii Przykłady w witrynie Azure Quantum Portal.

Przesyłanie zintegrowanych zadań hybrydowych

Podczas przesyłania zintegrowanego zadania hybrydowego należy dodać target parametr możliwości po określeniu elementu target. Poza tym zintegrowane programy hybrydowe w usłudze Azure Quantum są uruchamiane i zarządzane tak samo jak zwykłe zadania kwantowe. Każde zadanie ma jeden identyfikator zadania, a wynik jest pojedynczym histogramem.

Ważne

Zintegrowane hybrydowe obliczenia kwantowe nie są obecnie obsługiwane przez rozszerzenie Modern Quantum Development Kit (Modern QDK) dla Visual Studio Code, wraz z innymi składnikami w przykładach na tej stronie, takich jak jądro IQ#, %azure polecenie magic lub qsharp.azure moduł. Aby uruchomić zintegrowane zadania hybrydowe, użyj zestawu Microsoft Quantum Development Kit (klasyczny zestaw QDK). Aby uzyskać więcej informacji, zobacz Kontynuuj pracę w klasycznym zestawie QDK.

I Q#

W przypadku korzystania z jądra IQ# w Jupyter Notebook użyj %azure.target-capability magic polecenia z parametrem AdaptiveExecution .

%azure.target quantinuum.sim.h1-1e
%azure.target-capability AdaptiveExecution

Python + Q#

W przypadku korzystania z pakietu języka Python qsharp użyj qsharp.azure.target_capability funkcji z parametrem AdaptiveExecution .

qsharp.azure.target("quantinuum.sim.h1-1e")
qsharp.azure.target_capability("AdaptiveExecution")

Interfejs wiersza polecenia platformy Azure

W przypadku przesyłania zadania przy użyciu interfejsu wiersza polecenia platformy Azure dodaj --target-capability parametr z wartością AdaptiveExecution.

az quantum job submit \
    --target-capability AdaptiveExecution \
    --target-id quantinuum.sim.h1-1e \
    --job-name IterativePhaseEstimation \
    --shots 100 \
    --output table

Przesyłanie zintegrowanych zadań hybrydowych w ramach sesji

W ramach sesji można połączyć wiele zintegrowanych zadań hybrydowych przy użyciu języków Q# i Python. Podczas przesyłania sesji dodaj targetCapability parametr wejściowy z wartością AdaptiveExecution.

with target.open_session(name="Q# session") as session:
    target.submit(input_data=QuantumOperation, name="Job 1", input_params={"count":100, "targetCapability":"AdaptiveExecution"}) # First job submission
    target.submit(input_data=QuantumOperation, name="Job 2", input_params={"count":200, "targetCapability":"AdaptiveExecution"}) # Second job submission
    target.submit(input_data=QuantumOperation, name="Job 3", input_params={"count":300, "targetCapability":"AdaptiveExecution"}) # Third job submission

Aby uzyskać więcej informacji, zobacz Wprowadzenie do sesji.

Uwaga

Mimo że sesje są dostępne dla wszystkich dostawców sprzętu obliczeń kwantowych, zwróć uwagę, że zintegrowane hybrydowe zadania obliczeń kwantowych są obecnie obsługiwane w aplikacji Quantinuum targets.

Szacowanie kosztów zintegrowanego zadania hybrydowego

Koszty uruchamiania zintegrowanego zadania hybrydowego na sprzęcie Firmy Quantinuum można oszacować, uruchamiając je najpierw w emulatorze.

Po pomyślnym uruchomieniu w emulatorze:

  1. W obszarze roboczym usługi Azure Quantum wybierz pozycję Zarządzanie zadaniami.
  2. Wybierz przesłane zadanie.
  3. W oknie podręcznym Szczegóły zadania wybierz pozycję Szacowanie kosztów , aby wyświetlić liczbę używanych jednostek eHQC (środki emulatora Quantinuum). Ta liczba przekłada się bezpośrednio na liczbę HQC (kwantowych kredytów kwantowych Quantinuum), które są potrzebne do uruchomienia zadania na sprzęcie Firmy Quantinuum.

Szacowanie kosztów

Uwaga

Firma Quantinuum wyrejestruje cały obwód i oblicza koszt dla wszystkich ścieżek kodu, niezależnie od tego, czy są one wykonywane warunkowo, czy nie.

Zintegrowane przykłady hybrydowe

W poniższych przykładach pokazano bieżący zestaw funkcji dla zintegrowanego przetwarzania hybrydowego.

  • Weryfikowanie splątanego stanu GHZ
  • Powtórzenie z trzema kubitami
  • Iteracyjne szacowanie fazy

Wymagania wstępne

  • Jeśli jesteś nowym użytkownikiem usługi Azure Quantum, potrzebujesz subskrypcji platformy Azure i obszaru roboczego usługi Azure Quantum, aby uruchomić przykłady na sprzęcie kwantowym. Aby uzyskać więcej informacji, zobacz Tworzenie obszaru roboczego usługi Azure Quantum.
  • Program VS Code i Quantum Development Kit konfiguracja w środowisku lokalnym. Aby uzyskać więcej informacji, zobacz Konfigurowanie elementu Quantum Development Kit.
  • Upewnij się, że program VS Code ma najnowszą wersję Quantum Development Kit (0.27.258160).
    • W programie VS Code wybierz klawisze Ctrl + Shift + X i wyszukaj ciąg "Microsoft Quantum Development Kit".

Przykłady w tym artykule są skonfigurowane do uruchamiania w programie Visual Studio (VS) Code i używają wbudowanego interfejsu wiersza polecenia platformy Azure w celu przesłania zadania do usługi Azure Quantum. Aby uruchomić Jupyter Notebook wersję tych i innych przykładów, zaloguj się do obszaru roboczego Azure Portal i wyświetl przykłady z karty Hybrydowe obliczenia kwantowe w galerii Przykłady. Możesz uruchomić notes w chmurze lub pobrać go i uruchomić lokalnie.

Aby rozwiązać problemy ze zintegrowanymi programami hybrydowymi, zobacz Rozwiązywanie problemów ze zintegrowanym hybrydowym rozwiązaniem.

W tym przykładzie dowiesz się, jak mieszać instrukcje klasyczne i kwantowe w tym samym programie, wszystkie w pełni przetwarzane przez zaplecze obliczeń kwantowych.

Funkcje, które należy zwrócić uwagę na ten przykład:

  • Pętla i pomiary kubitów odbywają się, podczas gdy kubity pozostają spójne.
  • Procedura łączy klasyczne i kwantowe operacje obliczeniowe.
  • Nie musisz uczyć się programowania dla wyspecjalizowanego sprzętu o wysokiej wydajności działającego obok QPU (np. układów FPGA).
  • Uruchomienie równoważnego programu bez zintegrowanych funkcji hybrydowych wymagałoby zwrócenia wszystkich wyników pomiaru pośredniego, a następnie uruchomienia przetwarzania końcowego na danych.

Tworzenie projektu programu VS Code

  1. W programie VS Code utwórz nowy Q# autonomiczny projekt aplikacji konsolowej o nazwie CheckGHZ.

    1. Wybierz pozycję Wyświetl > paletę >Q#poleceń: Utwórz nowy projekt > Autonomiczna aplikacja konsolowa
  2. Zastąp konfigurację w pliku CheckGHZ.csproj następującym kodem:

    <Project Sdk="Microsoft.Quantum.Sdk/0.27.258160">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum</ExecutionTarget>
        <TargetCapability>AdaptiveExecution</TargetCapability>
      </PropertyGroup>
    </Project>
    
  3. Zastąp kod w pliku Program.qs następującym kodem:

    namespace Microsoft.Quantum.Samples {
    
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Intrinsic;
    
        /// # Summary
        /// Counts the number of times measurements of a prepared GHZ state did not match the expected correlations.
        @EntryPoint() // The EntryPoint attribute is used to mark that this operation is where a quantum program will start running.
        operation CheckGHZ() : Int {
            use q = Qubit[3];
            mutable mismatch = 0;
            for _ in 1..10 {
                // Prepare the GHZ state.
                H(q[0]);
                CNOT(q[0], q[1]);
                CNOT(q[1], q[2]);
    
                // Measures and resets the 3 qubits
                let (r0, r1, r2) = (MResetZ(q[0]), MResetZ(q[1]), MResetZ(q[2]));
    
                // Adjusts classical value based on qubit measurement results
                if not (r0 == r1 and r1 == r2) {
                    set mismatch += 1;
                }
            }
            return mismatch;
        }
    }
    
  4. W oknie terminalu w programie VS Code połącz się z obszarem roboczym usługi Azure Quantum i ustaw domyślne zasoby.

    az login
    

    Uwaga

    Identyfikator subskrypcji platformy Azure, grupa zasobów i nazwa obszaru roboczego można wyświetlić w oknie terminalu po zalogowaniu się, uruchamiając polecenie az quantum workspace list. Alternatywnie można je znaleźć w Azure Portal na stronie Przegląd obszaru roboczego usługi Azure Quantum.

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. Prześlij zadanie i wyświetl wyniki. W tym przebiegu jest używanych około 10,65 eHQC (jednostki rozliczeniowe emulatora firmy Quantinuum)

    az quantum job submit \
      --target-id quantinuum.sim.h1-1e \
      --job-name CheckGHZ \
      --target-capability AdaptiveExecution \
      --shots 50
    
    az quantum job output \
      -o table \
      --job-id [job-id]
    

Dane wyjściowe GHZ

Następne kroki

Rozproszone przetwarzanie hybrydowe