Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sesje to kluczowa funkcja hybrydowych obliczeń kwantowych, które umożliwiają grupowanie wielu zadań obliczeniowych kwantowych. 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 są przydatne, gdy chcesz uruchamiać wiele zadań obliczeń kwantowych w sekwencji, z możliwością uruchamiania klasycznego kodu między zadaniami kwantowymi.
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 Azure Quantum roboczy. Aby uzyskać więcej informacji, zobacz Tworzenie obszaru roboczegoAzure Quantum.
Środowisko Python z zainstalowanym Python i Pip.
Biblioteka
qdkPython . Jeśli chcesz użyć Qiskit lub Cirq, musisz zainstalować dodatkiazureiqiskit.pip install --upgrade qdklub
pip install --upgrade "qdk[azure,qiskit]"
Co to jest sesja?
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 przesyłane podczas sesji mają priorytet w kolejce tego target. Aby uzyskać więcej informacji, zobacz Sposób działania obiektu docelowego.
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 Jupyter Notebook w Visual Studio Code (VS Code). Sesje można również tworzyć przy użyciu Python programu , który wywołuje sąsiadujący Q# program.
Uwaga
Sesje są zarządzane za pomocą Python, nawet podczas uruchamiania kodu Q# w trybie inline.
W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.
Wprowadź i wybierz pozycję Utwórz: Nowy Jupyter Notebook.
W prawym górnym rogu VS Code zostanie wykryta i wyświetlona wersja Python oraz środowisko wirtualne Python, które zostały wybrane dla notatnika. Jeśli masz wiele Python środowisk, 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 Notebookw dokumentacji VS Code aby uzyskać informacje o konfiguracji.
W pierwszej komórce notesu uruchom następujący kod:
from qdk.azure import Workspace workspace = Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )Dodaj nową komórkę w notebooku i zaimportuj pakiet
qsharpPython.from qdk import qsharpWybierz swój kwantowy target. W tym przykładzie target jest to symulator IonQ.
target = workspace.get_targets("ionq.simulator")Wybierz konfiguracje target profilu ,
BaselubAdaptive_RIUnrestricted.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.UnrestrictedUwaga
Adaptive_RItarget 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ą,
ni 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ć
GenerateRandomBitoperację trzy razy, dlatego użyjesztarget.submitpolecenia , aby przesłać Q# operację ztargetdanymi 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
Po przekazaniu argumentów jako parametrów do zadania, są one formatowane do wyrażenia Q# w momencie, gdy
qsharp.compilejest wywoływany. Oznacza to, że należy sformatować argumenty jako Q# obiekty. W tym przykładzie, ponieważ tablice w pliku Python są już drukowane jako[item0, item1, ...], argumenty wejściowe są zgodne z formatowaniem Q# . W przypadku innych Python struktur danych może być potrzebne dodatkowe przetwarzanie, aby wstawione wartości ciągów pasowały w Q# w sposób zgodny.Po utworzeniu sesji można pobrać
workspace.list_session_jobslistę wszystkich zadań w sesji. Aby uzyskać więcej informacji, zobacz Jak zarządzać sesjami.
Zachowanie docelowe
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 sesji do Quantinuum target, sesja ma wyłączny dostęp do sprzętu, o ile zadania kolejkujesz w ciągu jednej minuty od poprzedniego. Następnie zadania są akceptowane i obsługiwane przy użyciu standardowej logiki kolejkowania i priorytetyzacji.