Вибір обчислювального профілю
Керовані workflow виконуються на обчислювальних профілях. Обчислювальний профіль — це фіксована комбінація vCPU, пам'яті та GPU, подібна до ресурсів, які ти запитуєш у планувальника HPC. Коли ти завантажуєш workflow, ти зіставляєш його розміри, такі як S і M, з профілями, і кожен запуск вибирає один із цих розмірів. Потім завдання виконується на власному вузлі з цим профілем і зберігає профіль до свого завершення.
| Профіль | vCPU | Пам'ять (ГБ) | GPU |
|---|---|---|---|
8x32 | 8 | 32 | Немає |
16x128 | 16 | 128 | Немає |
48x768 | 48 | 768 | Немає |
128x1500 | 128 | 1500 | Немає |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
Ідентифікатор профілю має вигляд {cpu}x{memory}, де пам'ять у ГБ, або {cpu}x{memory}x{count}{gpu} для профілю з GPU. Наприклад, 24x120x1l40s має 24 vCPU, 120 ГБ пам'яті та один GPU NVIDIA L40S.
Перевірка доступних профілів
Щоб побачити, які профілі доступні, виклич compute_profiles():
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflowClient
client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)
Пошук профілю за його ресурсами
Замість введення ідентифікатора профілю ти можеш описати ресурси, потрібні твоєму workflow, за допомогою compute_profile() і використати результат як значення в sizes_map. Передай cpu і memory у ГБ, а для профілю з GPU передай gpu:
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
sizes_map приймає ідентифікатори профілів і профілі, які повертає compute_profile(), і ти можеш змішувати обидва в одній мапі. Щоб перевірити ідентифікатор профілю перед завантаженням, передай його в compute_profile(), наприклад client.compute_profile("16x128"). Якщо жоден профіль не підходить, помилка виводить список доступних профілів.
compute_profiles() повертає список, тому ти також можеш відфільтрувати його самостійно. Наприклад, наведений нижче код знаходить профілі з GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
Задай типовий обчислювальний профіль для свого workflow
Більшість workflow починають з одного розміру. Зіставь його з профілем за допомогою sizes_map і зроби типовим за допомогою default_size під час завантаження workflow:
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient
client = ManagedWorkflowClient()
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)
Кожен запуск workflow використовує цей профіль, тому тобі не потрібно передавати розмір під час запуску:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
Рекомендація: підбирай розміри відповідно до розмірів задачі
Workflow розв'язує конкретні задачі, і йому можуть знадобитися різні обчислювальні профілі зі зростанням масштабу й складності задач. Маючи sizes_map для кожного workflow, ти можеш зробити таке:
-
Дати великим задачам достатньо обчислювальних ресурсів, щоб вони завершилися.
-
Не дозволити малим задачам використовувати більший вузол, ніж їм потрібно.
Ти можеш спиратися на фактори, що визначають використання пам'яті й CPU твоїм workflow, як-от розмір підпростору, кількість batch або кількість кубітів.
Визначення розмірів
Ти можеш зіставити до чотирьох розмірів: для малих (S), середніх (M), великих (L) і надвеликих (XL) задач. Наприклад, наведений нижче код визначає workflow із трьома розмірами:
run_workflow_remotely.ipynb
sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)
Правила щодо розмірів
Мітки розмірів мають бути S, M, L або XL, тому workflow може визначити до чотирьох розмірів. Керований workflow зіставляє мітки у верхньому або нижньому регістрі та зберігає їх у верхньому. Два розміри можуть відповідати одному профілю.
Workflow відхиляє перше завантаження в таких випадках:
-
Мітка не є
S,M,LабоXL. -
Ти задаєш
sizes_mapбезdefault_sizeабоdefault_sizeбезsizes_map. -
default_sizeне є однією з міток уsizes_map. -
Значення в
sizes_mapне є доступним обчислювальним профілем.
Зміна розмірів під час повторного завантаження
Коли ти знову завантажуєш workflow з тим самим title, керований workflow обробляє розміри так:
-
Якщо ти задаєш
sizes_map, нові розміри замінюють усі збережені розміри. -
Якщо ти пропускаєш
sizes_map, workflow зберігає збережені розміри та типовий. -
Щоб змінити лише типовий розмір, задай
default_sizeбезsizes_map. Значенняdefault_sizeмає бути одним зі збережених розмірів.
Задавай default_size щоразу, коли задаєш sizes_map. Повторне завантаження не вимагає default_size. Якщо нові розміри не містять старого типового, workflow не має типового розміру, і кожен запуск без function_size завершується помилкою.
Вибір розміру для кожного запуску
Передай function_size у run(), щоб вибрати один із розмірів робочого процесу для цього завдання. Якщо ти його пропустиш, завдання використає розмір робочого процесу за замовчуванням:
run_workflow_remotely.ipynb
print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'
job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M
sizes() і get_default_size() повертають розміри, збережені на момент завантаження робочого процесу. Щоб побачити розміри, які змінилися після завантаження, завантаж робочий процес повторно.
Щоб прочитати розмір і обчислювальний профіль завдання, виклич get_function_size() і get_compute_profile() у коді свого робочого процесу:
source_files/my_workflow.py
from qiskit_serverless import get_compute_profile, get_function_size
print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'
Усунення проблем із розмірами
| Проблема | Причина |
|---|---|
Завантаження завершується помилкою Invalid size '...'. Valid sizes are: S, M, L, XL. | Мітка в sizes_map не є однією з чотирьох підтримуваних міток. |
Завантаження завершується помилкою Unknown compute profile '...' for size '...'. | Значення в sizes_map не є доступним профілем. Перевір ідентифікатор за допомогою compute_profiles() або знайди його через compute_profile(). |
compute_profile() завершується помилкою No compute profile matches ... | Жоден профіль не має саме таких ресурсів. Для GPU-профілю також передай gpu. Вибери профіль зі списку в повідомленні про помилку. |
Завантаження завершується помилкою 'default_size' is required when 'sizes' is provided. | Під час першого завантаження задано sizes_map без default_size. |
run() завершується помилкою Unknown function size '...' for this function. Available sizes: ... | Робочий процес не визначає розмір, який ти передав у function_size. |
run() завершується помилкою This function has no size. | Повторне завантаження замінило розміри й видалило розмір за замовчуванням. Завантаж ще раз із default_size або передай function_size. |