Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Вибір обчислювального профілю

Керовані workflow виконуються на обчислювальних профілях. Обчислювальний профіль — це фіксована комбінація vCPU, пам'яті та GPU, подібна до ресурсів, які ти запитуєш у планувальника HPC. Коли ти завантажуєш workflow, ти зіставляєш його розміри, такі як S і M, з профілями, і кожен запуск вибирає один із цих розмірів. Потім завдання виконується на власному вузлі з цим профілем і зберігає профіль до свого завершення.

ПрофільvCPUПам'ять (ГБ)GPU
8x32832Немає
16x12816128Немає
48x76848768Немає
128x15001281500Немає
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 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.