Вступ до кермованих робочих процесів
Qiskit Functions і кероване виконання робочих процесів є бета-функціями, доступними лише користувачам планів Premium, Flex та On-Prem (через API IBM Quantum® Platform).
Керовані робочі процеси запускають твій власний код Python на класичних обчисленнях, якими для тебе керує IBM Quantum Platform. Використовуй керовані робочі процеси для запуску гібридних квантово-класичних робочих процесів, великомасштабної діагоналізації та тривалих паралельних задач без керування обчислювальною інфраструктурою чи сховищем.
Коли використовувати кероване виконання робочого процесу
Використовуй кероване виконання робочого процесу, коли жодна готова Catalog Function не покриває твоє завдання або коли хочеш упакувати власний метод як функцію для повторного використання. Керовані робочі процеси добре підходять, коли ти хочеш зробити таке:
-
Запускати тривалі завдання в хмарі. Кероване виконання робочого процесу триває, коли ти закриваєш ноутбук, а до завдання можна повернутися пізніше.
-
Використовувати вузли з великим обсягом пам'яті та GPU. Обирай ресурси пам'яті, CPU і GPU, потрібні для навантаження.
-
Запускати задачі паралельно. Запускай багато однонодових завдань одночасно.
Ти надаєш код робочого процесу, його залежності та розміри обчислень, які він підтримує. Керовані робочі процеси запускають робочий процес на обчисленнях під керуванням IBM® у готовому середовищі з установленими твоїми пакетами й надають хмарне сховище для файлів, які робочий процес читає та записує.
Як працюють керовані робочі процеси
Ти завантажуєш робочий процес один раз і запускаєш стільки завдань, скільки потрібно. Кожне завдання працює таким чином:
-
Завдання починається в новому середовищі з порожнім локальним диском. Керовані робочі процеси вимикають середовище після завершення завдання.
-
Завдання виконується на одному з розмірів обчислень, які ти визначаєш під час завантаження робочого процесу. Для кожного запуску можна обрати інший розмір.
-
Завдання може читати й записувати файлове сховище робочого процесу. Файли у файловому сховищі залишаються після завершення завдання.
Оскільки кожне завдання починається з порожнього локального диска, пізніше завдання може знайти лише ті файли, які попереднє завдання зберегло у файловому сховищі.
Життєвий цикл запуску
Кожне завдання виконується асинхронно до 24 годин. Ти можеш мати до 50 активних завдань одночасно, якщо твій екземпляр має достатню квоту.
У таблиці нижче описано кожен етап на діаграмі та статус завдання, який ти бачиш на цьому етапі:
| Етап | Що відбувається | Статус завдання |
|---|---|---|
| Завантаження | Ти завантажуєш код робочого процесу, залежності та розміри. Робочий процес відхиляє недійсне завантаження до запуску будь-якого завдання. | Немає (завдання ще немає) |
| Черга | Ти викликаєш run(). Робочий процес перевіряє, чи має твій екземпляр достатню квоту, і планує завдання, коли обчислення доступні. | QUEUED |
| Старт | Робочий процес створює середовище з вибраним тобою профілем обчислень. | INITIALIZING |
| Виконання | Виконується точка входу твого робочого процесу. Точка входу може повідомляти про свій прогрес за допомогою update_status(), а її логи ти можеш читати через logs() під час виконання. | RUNNING або етап, який ти встановив, наприклад RUNNING: WAITING_FOR_QPU |
| Результат | Завдання завершується, і робочий процес вимикає своє середовище, зберігаючи результат та логи. | DONE, ERROR або CANCELED |
До чого має доступ завдання, що виконується
Кожне завдання виконується в ізольованому середовищі. Діаграма й таблиця нижче показують ресурси, які може використовувати завдання, що виконується.
| Ресурс | Що може використовувати завдання |
|---|---|
| Обчислення | CPU, пам'ять і GPU профілю обчислень, який ти вибрав для завдання. |
| Код і пакети | Файли, які ти завантажив разом із робочим процесом, та підтримувані пакети, установлені в середовищі. |
| Аргументи | Аргументи, які ти передав у run(). Читай їх через get_arguments(). |
| Доступ до QPU | Облікові дані та екземпляр, які ти використав для виклику run(). Завдання QPU, які надсилає робочий процес, виконуються на твоєму екземплярі та зараховуються до твого використання. |
| Вихідні дані | Результат, який завдання зберігає через save_result(), логи, які завдання виводить, та оновлення статусу, які завдання встановлює через update_status(). |
| Файлове сховище | Файли, спільні для всіх твоїх запусків робочого процесу. Файли залишаються у сховищі після завершення завдання. |
| Інтернет | Доступу немає. Завдання не може встановлювати вихідні з'єднання. Оголошуй пакети під час завантаження робочого процесу, а дані надавай як аргументи або файли. |
Безпека та ізоляція
Керовані робочі процеси ізолюють кожне завдання від інших завдань і обмежують привілеї коду, що в ньому виконується. Межі доступу в попередній таблиці є частиною цієї ізоляції. Керовані робочі процеси також застосовують такі захисти:
-
Ізоляція завдань. У середовищі твого завдання не виконується жодне інше завдання. Це стосується завдань інших користувачів і твоїх власних завдань, що виконуються одночасно.
-
Результати, логи та сховище. Лише користувач, який запустив завдання, може читати його результати й логи.
-
Облікові дані. Керовані робочі процеси шифрують облікові дані, які використовує завдання, зокрема твій API-токен, під час їх зберігання. Код твого робочого процесу може читати ці облікові дані, поки виконується завдання.
-
Привілеї. Керовані робочі процеси знімають привілеї рівня адміністратора із середовища до запуску твоєї точки входу.
Порівняння з локальним HPC
Керовані робочі процеси відрізняються від локального HPC-кластера тим, як ти отримуєш обчислювальний час, налаштовуєш програмне забезпечення та надсилаєш завдання. У таблиці нижче порівняно типові задачі.
| Задача | Локальний HPC-кластер | Керовані робочі процеси |
|---|---|---|
| Отримання обчислювального часу | Запит на виділення або резервування в адміністратора кластера. | Використовуй квоту свого екземпляра IBM Quantum. Робочий процес ставить кожне завдання в чергу, коли ти викликаєш run(). |
| Доступ до системи | Підключення до вузла входу через SSH. | Використовуй клієнт Python на локальному комп'ютері. Керовані робочі процеси не надають вузла входу. |
| Встановлення програмного забезпечення | Збирання програмного забезпечення, завантаження модулів або прохання до адміністратора встановити пакети. | Використовуй підтримувані пакети, установлені в кожному середовищі, або завантаж wheels для інших пакетів. |
| Надсилання завдання | Написання пакетного скрипту та надсилання його планувальнику. | Виклик run() з аргументами завдання. |
| Запит ресурсів | Запит вузлів, CPU, пам'яті та GPU. | Вибір одного з розмірів обчислень, визначених для робочого процесу. Кожне завдання виконується на одному вузлі. |
| Сканування параметрів | Надсилання масиву завдань. | Виклик run() один раз для кожного набору аргументів. |
| Зберігання спільних файлів | Запис у спільну scratch-файлову систему. | Запис у файлове сховище робочого процесу. |
| Обмеження часу виконання | Встановлення ліміту реального часу. | Робочий процес скасовує завдання через 24 години. |
| Контрольні точки для тривалих завдань | Запис контрольних точок у scratch-сховище. | Збереження проміжних результатів у файлове сховище. |
| Повторний запуск невдалого завдання | Повторне надсилання завдання. | Повторний виклик run(). Робочий процес не повторює невдалі завдання автоматично. |
| Моніторинг завдань | Перевірка черги та файлів логів із вузла входу. | Перевірка статусу, логів і результату кожного завдання зі свого локального сеансу Python. |
Наступні кроки
- Встанови клієнтські пакети та автентифікуйся.
- Розгорни свій перший кероване виконання робочого процесу, щоб завантажити робочий процес, запустити його та отримати результат.