Przejdź do głównej treści
Ten projekt jest w wersji beta. Znalazłeś błąd? Otwórz zgłoszenie na GitHub. Masz pytanie lub pomysł? Zapytaj w Discussions — chętnie poznamy Twoją opinię!
Jak oceniasz jakość tłumaczenia tej strony?

Wprowadzenie do zarządzanych przepływów pracy

Dostępność planów

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ł.

From your Python session, you call upload() one time to upload the workflow's code, packages, and compute profiles. No job exists yet. Each call to run(args) creates a job that moves through these stages: Queue, where it waits for allocation with status QUEUED; Start, where the managed workflow creates the environment with status INITIALIZING; Running, where your code can optionally set stages with update_status(): Mapping (RUNNING: MAPPING), Optimizing (RUNNING: OPTIMIZING_FOR_HARDWARE), Waiting for QPU (RUNNING: WAITING_FOR_QPU), Executing QPU (RUNNING: EXECUTING_QPU), and Post-processing (RUNNING: POST_PROCESSING); and Result, where the environment shuts down with status DONE, ERROR, or CANCELED. While running, the job reads and writes workflow file storage, which exists outside the job, is shared by all runs, and persists before and after each job. From your session, you can read status() from Queue onward, logs() from Running onward, and result() after the job reaches Result. All three remain available after the job ends.

Poniższa tabela opisuje każdy etap na diagramie oraz status zadania widoczny podczas tego etapu:

EtapCo się dziejeStatus zadania
PrzesłaniePrzesył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)
KolejkaWywołujesz run(). Przepływ pracy sprawdza, czy twoja instancja ma wystarczający przydział, i planuje zadanie, gdy zasoby obliczeniowe są dostępne.QUEUED
StartPrzepływ pracy tworzy środowisko z wybranym przez ciebie profilem obliczeniowym.INITIALIZING
UruchomienieUruchamia 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
WynikZadanie 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.

You call run() with arguments from your Python session and receive status, logs, and the result. Inside the managed workflow, each run executes in an isolated job environment with access to its compute (CPU, RAM, and optionally GPU), your code and packages, and its arguments. The job produces outputs with save_result(), logs, and update_status(), and submits QPU jobs that run on your instance. File storage and your instance, which provides access and cost management, are shared across all managed workflow jobs and persist after the job ends. The job has no internet access.

ZasóbCzego może używać zadanie
Zasoby obliczenioweCPU, pamięć i GPU z profilu obliczeniowego, który wybrano dla zadania.
Kod i pakietyPliki przesłane razem z przepływem pracy oraz obsługiwane pakiety zainstalowane w środowisku.
ArgumentyArgumenty przekazane do run(). Odczytaj je za pomocą get_arguments().
Dostęp do QPUPoś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.
WynikiWynik zapisany przez zadanie za pomocą save_result(), logi drukowane przez zadanie oraz aktualizacje statusu ustawiane przez zadanie za pomocą update_status().
Magazyn plikówPliki, które wszystkie twoje uruchomienia przepływu pracy współdzielą. Pliki pozostają w magazynie po zakończeniu zadania.
InternetBrak 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.

ZadanieLokalny klaster HPCZarządzane przepływy pracy
Uzyskanie czasu obliczeniowegoPoproś 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 systemuPołą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 oprogramowaniaZbuduj 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 zadaniaNapisz skrypt wsadowy i prześlij go do harmonogramu.Wywołaj run() z argumentami zadania.
Żądanie zasobówZażą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ówPrześlij tablicę zadań.Wywołaj run() jeden raz dla każdego zestawu argumentów.
Przechowywanie współdzielonych plikówZapisz do współdzielonego systemu plików scratch.Zapisz do magazynu plików przepływu pracy.
Ograniczenie czasu działaniaUstaw limit czasu rzeczywistego.Przepływ pracy anuluje zadanie po 24 godzinach.
Punkty kontrolne w długich zadaniachZapisuj punkty kontrolne w magazynie scratch.Zapisuj wyniki pośrednie w magazynie plików.
Ponowne uruchomienie nieudanego zadaniaPrześ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​

Zalecenia