Interaktywne obliczenia kwantowe: sesje
W tym artykule wyjaśniono architekturę interaktywnych obliczeń kwantowych, znanych również jako sesje i sposób tworzenia nowej sesji.
W tym modelu hybrydowych obliczeń kwantowych zasób obliczeniowy klienta może zostać przeniesiony do chmury, co skutkuje mniejszym opóźnieniem i możliwością powtórzenia wykonywania obwodu kwantowego z różnymi parametrami. Zadania można grupować logicznie w jednej sesji, a zadania w tej sesji mogą być priorytetowe dla zadań innych niż sesja. Chociaż stany kubitu nie są utrwalane między zadaniami, sesja umożliwia skrócenie czasu kolejki dla zadań i dłuższych problemów z uruchamianiem.
Wymagania wstępne
Aby utworzyć sesję, potrzebne są następujące wymagania wstępne:
Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, zarejestruj się bezpłatnie i zarejestruj się w celu uzyskania subskrypcji z płatnością zgodnie z rzeczywistym użyciem.
Obszar roboczy usługi Azure Quantum. Aby uzyskać więcej informacji, zobacz Tworzenie obszaru roboczego usługi Azure Quantum.
Środowisko języka Python z zainstalowanym językiem Python i programem Pip .
Pakiet Azure Quantum
azure-quantum
. Jeśli chcesz użyć zestawu Qiskit lub Cirq, musisz zainstalowaćazure-quantum
pakiet przy użyciu tagów [qiskit] lub [cirq].pip install --upgrade azure-quantum[qiskit]
Co to jest sesja?
Sesja to logiczne grupowanie co najmniej jednego zadania przesłanego do pojedynczego targetelementu . Każda sesja ma unikatowy identyfikator dołączony do każdego zadania w tej sesji.
Sesje umożliwiają organizowanie wielu zadań obliczeń kwantowych z możliwością uruchamiania klasycznego kodu między zadaniami kwantowymi. Będziesz mieć możliwość uruchamiania złożonych algorytmów w celu lepszego organizowania i śledzenia poszczególnych zadań obliczeń kwantowych.
Kluczowy scenariusz użytkownika, w którym można połączyć zadania w sesji, to sparametryzowane algorytmy kwantowe, w których dane wyjściowe jednego zadania obliczeń kwantowych informują o parametrach następnego zadania obliczeń kwantowych. Najczęstsze przykłady tego typu algorytmu to Variational Quantum Eigensolvers (VQE) i Quantum Approximate Optimization Algorithms (QAOA).
Obsługiwany sprzęt
Sesje są obsługiwane przez wszystkich dostawców sprzętu obliczeń kwantowych, obecnie IonQ, Quantinuum i Rigetti. W niektórych przypadkach zadania przesłane w ramach sesji mają priorytet w kolejce tego elementu target. Aby uzyskać więcej informacji, zobacz Zachowanie obiektu docelowego.
Rozpoczynanie pracy z sesjami
Sesje są zarządzane za pomocą języka Python i można je tworzyć dla dowolnego programu kwantowego QIR, w tym Q#programów , Qiskit i Cirq.
W tym przykładzie pokazano, jak utworzyć sesję z Q# wbudowanym kodem przy użyciu Jupyter Notebook w Visual Studio Code. Sesje można również tworzyć przy użyciu programu języka Python , który wywołuje sąsiedni Q# program.
Uwaga
Sesje są zarządzane przy użyciu języka Python, nawet w przypadku uruchamiania Q# kodu wbudowanego.
W programie VS Code wybierz pozycję Wyświetl > paletę poleceń i wybierz pozycję Utwórz: Nowy Jupyter Notebook.
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 nie wykryto żadnego środowiska, zobacz Notesy Jupyter Notebook w programie VS Code , aby uzyskać informacje o instalacji.
W pierwszej komórce notesu uruchom polecenie
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Kliknij pozycję + Kod , aby dodać nową komórkę w notesie i zaimportować
qsharp
zestaw SDK języka Python.import qsharp
Wybierz wybrany kwant target . W tym przykładzie używasz symulatora IonQ jako target.
target = workspace.get_targets("ionq.simulator")
Wybierz konfiguracje target profilu lub
Base
Unrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
Q# Napisz swój program. Na przykład następujący Q# program generuje losowy bit. Aby zilustrować użycie argumentów wejściowych, ten program przyjmuje liczbę całkowitą,
n
i tablicę kątów, ,angle
jako dane wejściowe.%%qsharp open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Arrays; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
Następnie utworzysz sesję. Załóżmy, że chcesz uruchomić
GenerateRandomBit
operację trzy razy, dlatego używasztarget.submit
metody do przesyłania Q# operacji ztarget
danymi i powtarzasz kod trzy razy — w rzeczywistym scenariuszu możesz przesłać różne programy zamiast tego samego kodu.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Ważne
Podczas przekazywania argumentów jako parametrów do zadania są one sformatowane w wyrażeniu Q# podczas wywoływania metody
qsharp.compile
. Oznacza to, że należy zachować ostrożność, aby sformatować argumenty jako Q# obiekty. W tym przykładzie, ponieważ tablice w języku Python są już drukowane jako [item0, item1, ...], argumenty wejściowe są zgodne z formatowaniem Q# . W przypadku innych struktur danych języka Python może być potrzebna większa obsługa, aby uzyskać wartości ciągów wstawione w Q# zgodny sposób.Po utworzeniu sesji można pobrać
workspace.list_session_jobs
listę wszystkich zadań w sesji. Aby uzyskać więcej informacji, zobacz Jak zarządzać sesjami.
Sesje monitorowania
Możesz użyć bloku Zarządzanie zadaniami w obszarze roboczym Quantum, aby wyświetlić wszystkie przesłane elementy najwyższego poziomu, w tym sesje i poszczególne zadania, które nie są skojarzone z żadną sesją.
- Wybierz blok Zarządzanie zadaniami w obszarze roboczym Quantum.
- Zidentyfikuj zadania typu Sesja. W tym widoku można zobaczyć unikatowy identyfikator sesji w identyfikatorze kolumny i monitorować jego stan. Stany sesji to:
- Oczekiwanie: zadania w ramach sesji są wykonywane.
- Powodzenie: sesja zakończyła się pomyślnie.
- Limit czasu: jeśli żadne nowe zadanie nie zostanie przesłane w ramach sesji przez 10 minut, limit czasu tej sesji jest przekroczony. Aby uzyskać więcej informacji, zobacz Limity czasu sesji.
- Niepowodzenie: jeśli zadanie w sesji zakończy się niepowodzeniem, ta sesja zakończy się i zgłosi stan Niepowodzenie. Aby uzyskać więcej informacji, zobacz Zasady niepowodzenia zadań w ramach sesji.
- Kliknij nazwę sesji, aby uzyskać więcej szczegółów.
- Listę wszystkich zadań można wyświetlić w ramach sesji i monitorować ich stan.
Zachowanie obiektu docelowego
Każdy dostawca sprzętu kwantowego definiuje własne heurystyki, aby najlepiej zarządzać priorytetyzacją zadań w ramach sesji.
Quantinuum
Jeśli zdecydujesz się przesłać zadania w ramach sesji do kwantynyum target, sesja będzie miała wyłączny dostęp do sprzętu, o ile zadania kolejkujesz w ciągu jednej minuty od siebie. Następnie zadania zostaną zaakceptowane i obsłużone za pomocą standardowej logiki kolejkowania i priorytetyzacji.
Zawartość pokrewna
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla