Wprowadzenie do sesji
Sesje to kluczowa funkcja hybrydowych obliczeń kwantowych, które umożliwiają grupowanie wielu zadań obliczeniowych kwantowych.
W tym artykule wyjaśniono architekturę sesji w hybrydowych obliczeniach kwantowych oraz sposób tworzenia nowej sesji.
Wymagania wstępne
Do utworzenia sesji 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 korzystania z 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 .
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.
W sesjach zasób obliczeniowy klienta może zostać przeniesiony do chmury, co spowoduje mniejsze opóźnienie i możliwość powtarzania wykonywania obwodu kwantowego z różnymi parametrami. Zadania można grupować logicznie w jedną sesję, a zadania w tej sesji mogą być priorytetowe dla zadań innych niż sesja. Chociaż stany kubitu nie utrzymują się między zadaniami, sesja umożliwia skrócenie czasu kolejki dla zadań i dłuższych problemów z uruchamianiem.
Sesje umożliwiają organizowanie wielu zadań przetwarzania kwantowego 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. W niektórych przypadkach zadania przesłane w ramach sesji mają priorytet w kolejce tego targetelementu . Aby uzyskać więcej informacji, zobacz Target zachowanie.
Jak utworzyć sesję
Aby utworzyć sesję, wykonaj następujące kroki:
W tym przykładzie pokazano, jak utworzyć sesję z Q# kodem wbudowanym przy użyciu notesu Jupyter Notebook w programie Visual Studio Code. Sesje można również tworzyć przy użyciu programu w języku Python, który wywołuje sąsiadujący 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 notes Jupyter.>
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.
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 kwanttarget. W tym przykładzie używasz symulatora IonQ jako target.
target = workspace.get_targets("ionq.simulator")
Wybierz konfiguracje target profilu ,
Base
lubAdaptive_RI
Unrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Uwaga
Adaptive_RI
target Zadania profilu są obecnie obsługiwane w aplikacji Quantinuum targets. Aby uzyskać więcej informacji, zobacz Zintegrowane hybrydowe obliczenia kwantowe.Napisz swój Q# 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 import Std.Measurement.*; import Std.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żyjesztarget.submit
polecenia , aby przesłać Q# operację ztarget
danymi i powtórzyć 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 formatowane w wyrażeniu Q# podczas wywoływania elementu
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.
Target zachowanie
Każdy dostawca sprzętu kwantowego definiuje własne heurystyki, aby najlepiej zarządzać priorytetyzacji zadań w ramach sesji.
Quantinuum
Jeśli zdecydujesz się przesyłać zadania w ramach sesji do kwantynauum 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.