Wprowadzenie do zarządzanych przepływów pracy
Qiskit Functions i zarządzane przepływy pracy to funkcje w wersji beta dostępne tylko dla użytkowników planów Premium, Flex i On-Prem (przez API IBM Quantum® Platform).
Zarządzane przepływy pracy uruchamiają twój własny kod Pythona na zasobach obliczeń klasycznych, którymi zarządza dla ciebie IBM Quantum Platform. Używaj zarządzanych przepływów pracy do uruchamiania hybrydowych kwantowo-klasycznych przepływów pracy, diagonalizacji na dużą skalę i długotrwałych zadań równoległych bez zarządzania infrastrukturą obliczeniową ani magazynem danych.
Kiedy używać zarządzanego przepływu pracy
Użyj zarządzanego przepływu pracy, gdy żadna gotowa Catalog Function nie obejmuje twojego zadania lub gdy chcesz opakować własną metodę jako funkcję wielokrotnego użytku. Zarządzane przepływy pracy dobrze sprawdzają się, gdy chcesz zrobić jedną z następujących rzeczy:
-
Uruchamiać długie zadania w chmurze. Zarządzany przepływ pracy działa dalej po zamknięciu laptopa, a do zadania możesz połączyć się ponownie później.
-
Używać węzłów z dużą ilością pamięci i GPU. Wybierz zasoby pamięci, CPU i GPU, których potrzebuje obciążenie.
-
Uruchamiać zadania równolegle. Rozpocznij wiele zadań jednowęzłowych jednocześnie.
Dostarczasz kod przepływu pracy, jego zależności i rozmiary zasobów obliczeniowych, które obsługuje. Zarządzane przepływy pracy uruchamiają przepływ pracy na zasobach zarządzanych przez IBM® w gotowym środowisku z zainstalowanymi twoimi pakietami oraz zapewniają magazyn w chmurze na pliki, które przepływ pracy odczytuje i zapisuje.
Jak działają zarządzane przepływy pracy
Przesyłasz przepływ pracy jeden raz i uruchamiasz tyle zadań, ile potrzebujesz. Każde zadanie działa w następujący sposób:
-
Zadanie startuje w nowym środowisku z pustym dyskiem lokalnym. Zarządzane przepływy pracy wyłączają środowisko po zakończeniu zadania.
-
Zadanie działa na jednym z rozmiarów zasobów obliczeniowych, które definiujesz podczas przesyłania przepływu pracy. Dla każdego uruchomienia możesz wybrać inny rozmiar.
-
Zadanie może odczytywać i zapisywać magazyn plików przepływu pracy. Pliki w magazynie plików pozostają po zakończeniu zadania.
Ponieważ każde zadanie zaczyna z pustym dyskiem lokalnym, późniejsze zadanie znajdzie tylko te pliki, które wcześniejsze zadanie zapisało w magazynie plików.
Cykl życia uruchomienia
Każde zadanie działa asynchronicznie przez maksymalnie 24 godziny. Możesz mieć jednocześnie do 50 aktywnych zadań, jeśli twoja instancja ma wystarczający przydział.
Poniższa tabela opisuje każdy etap na diagramie oraz status zadania widoczny podczas tego etapu:
| Etap | Co się dzieje | Status zadania |
|---|---|---|
| Przesłanie | Przesyłasz kod przepływu pracy, zależności i rozmiary. Przepływ pracy odrzuca nieprawidłowe przesłanie, zanim zostanie uruchomione jakiekolwiek zadanie. | Brak (jeszcze nie ma zadania) |
| Kolejka | Wywołujesz run(). Przepływ pracy sprawdza, czy twoja instancja ma wystarczający przydział, i planuje zadanie, gdy zasoby obliczeniowe są dostępne. | QUEUED |
| Start | Przepływ pracy tworzy środowisko z wybranym przez ciebie profilem obliczeniowym. | INITIALIZING |
| Uruchomienie | Uruchamia się punkt wejścia twojego przepływu pracy. Punkt wejścia może zgłaszać postęp za pomocą update_status(), a jego logi możesz odczytywać za pomocą logs() w trakcie działania. | RUNNING lub ustawiony przez ciebie etap, na przykład RUNNING: WAITING_FOR_QPU |
| Wynik | Zadanie się kończy, a przepływ pracy wyłącza swoje środowisko, zachowując wynik i logi. | DONE, ERROR lub CANCELED |
Do czego ma dostęp działające zadanie
Każde zadanie działa w izolowanym środowisku. Poniższy diagram i tabela pokazują zasoby, których może używać działające zadanie.
| Zasób | Czego może używać zadanie |
|---|---|
| Zasoby obliczeniowe | CPU, pamięć i GPU z profilu obliczeniowego, który wybrano dla zadania. |
| Kod i pakiety | Pliki przesłane razem z przepływem pracy oraz obsługiwane pakiety zainstalowane w środowisku. |
| Argumenty | Argumenty przekazane do run(). Odczytaj je za pomocą get_arguments(). |
| Dostęp do QPU | Poświadczenia i instancja użyte do wywołania run(). Zadania QPU przesyłane przez przepływ pracy działają na twojej instancji i wliczają się do twojego zużycia. |
| Wyniki | Wynik zapisany przez zadanie za pomocą save_result(), logi drukowane przez zadanie oraz aktualizacje statusu ustawiane przez zadanie za pomocą update_status(). |
| Magazyn plików | Pliki, które wszystkie twoje uruchomienia przepływu pracy współdzielą. Pliki pozostają w magazynie po zakończeniu zadania. |
| Internet | Brak dostępu. Zadanie nie może nawiązywać połączeń wychodzących. Zadeklaruj pakiety podczas przesyłania przepływu pracy, a dane przekaż jako argumenty lub pliki. |
Bezpieczeństwo i izolacja
Zarządzane przepływy pracy izolują każde zadanie od innych zadań i ograniczają uprawnienia kodu, który w nim działa. Granice dostępu w poprzedniej tabeli są częścią tej izolacji. Zarządzane przepływy pracy stosują też następujące zabezpieczenia:
-
Izolacja zadań. W środowisku twojego zadania nie działa żadne inne zadanie. Dotyczy to zadań innych użytkowników oraz twoich własnych zadań uruchomionych w tym samym czasie.
-
Wyniki, logi i magazyn. Tylko użytkownik, który uruchomił zadanie, może odczytać jego wyniki i logi.
-
Poświadczenia. Zarządzane przepływy pracy szyfrują poświadczenia używane przez zadanie, w tym twój token API, gdy je przechowują. Kod twojego przepływu pracy może odczytywać te poświadczenia, gdy zadanie działa.
-
Uprawnienia. Zarządzane przepływy pracy usuwają uprawnienia na poziomie administratora ze środowiska, zanim uruchomi się twój punkt wejścia.
Porównanie z lokalnym HPC
Zarządzane przepływy pracy różnią się od lokalnego klastra HPC sposobem uzyskiwania czasu obliczeniowego, konfigurowania oprogramowania i przesyłania zadań. Poniższa tabela porównuje typowe zadania.
| Zadanie | Lokalny klaster HPC | Zarządzane przepływy pracy |
|---|---|---|
| Uzyskanie czasu obliczeniowego | Poproś administratora klastra o przydział lub rezerwację. | Użyj przydziału swojej instancji IBM Quantum. Przepływ pracy kolejkuje każde zadanie, gdy wywołasz run(). |
| Dostęp do systemu | Połącz się z węzłem logowania przez SSH. | Użyj klienta Pythona na swoim komputerze lokalnym. Zarządzane przepływy pracy nie udostępniają węzła logowania. |
| Instalacja oprogramowania | Zbuduj oprogramowanie, załaduj moduły lub poproś administratora o zainstalowanie pakietów. | Użyj obsługiwanych pakietów zainstalowanych w każdym środowisku lub prześlij pliki wheel dla innych pakietów. |
| Przesłanie zadania | Napisz skrypt wsadowy i prześlij go do harmonogramu. | Wywołaj run() z argumentami zadania. |
| Żądanie zasobów | Zażądaj węzłów, CPU, pamięci i GPU. | Wybierz jeden z rozmiarów zasobów obliczeniowych zdefiniowanych dla przepływu pracy. Każde zadanie działa na pojedynczym węźle. |
| Uruchomienie przeglądu parametrów | Prześlij tablicę zadań. | Wywołaj run() jeden raz dla każdego zestawu argumentów. |
| Przechowywanie współdzielonych plików | Zapisz do współdzielonego systemu plików scratch. | Zapisz do magazynu plików przepływu pracy. |
| Ograniczenie czasu działania | Ustaw limit czasu rzeczywistego. | Przepływ pracy anuluje zadanie po 24 godzinach. |
| Punkty kontrolne w długich zadaniach | Zapisuj punkty kontrolne w magazynie scratch. | Zapisuj wyniki pośrednie w magazynie plików. |
| Ponowne uruchomienie nieudanego zadania | Prześlij zadanie ponownie. | Wywołaj run() ponownie. Przepływ pracy nie ponawia automatycznie nieudanych zadań. |
| Monitorowanie zadań | Sprawdzaj kolejkę i pliki logów z węzła logowania. | Sprawdzaj status, logi i wynik każdego zadania z lokalnej sesji Pythona. |
Kolejne kroki
- Zainstaluj pakiety klienta i uwierzytelnij się.
- Wdróż swój pierwszy zarządzany przepływ pracy, aby przesłać przepływ pracy, uruchomić go i otrzymać jego wynik.