Wybierz profil obliczeniowy
Zarządzane przepływy pracy działają na profilach obliczeniowych. Profil obliczeniowy to stała kombinacja vCPU, pamięci i GPU, podobna do zasobów, o które prosisz harmonogram HPC. Gdy przesyłasz przepływ pracy, mapujesz jego rozmiary, takie jak S i M, na profile, a każde uruchomienie wybiera jeden z tych rozmiarów. Zadanie działa wtedy na własnym węźle z tym profilem i zachowuje go do końca zadania.
| Profil | vCPU | Pamięć (GB) | GPU |
|---|---|---|---|
8x32 | 8 | 32 | Brak |
16x128 | 16 | 128 | Brak |
48x768 | 48 | 768 | Brak |
128x1500 | 128 | 1500 | Brak |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
Identyfikator profilu ma postać {cpu}x{memory}, z pamięcią w GB, lub {cpu}x{memory}x{count}{gpu} dla profilu z GPU. Na przykład 24x120x1l40s ma 24 vCPU, 120 GB pamięci i jedno GPU NVIDIA L40S.
Sprawdź dostępne profile
Aby zobaczyć, które profile są dostępne, wywołaj 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)
Wyszukaj profil według jego zasobów
Zamiast wpisywać identyfikator profilu, możesz opisać zasoby potrzebne przepływowi pracy za pomocą compute_profile() i użyć wyniku jako wartości w sizes_map. Przekaż cpu i memory w GB oraz gpu dla profilu z 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 akceptuje identyfikatory profili oraz profile zwracane przez compute_profile() i możesz mieszać oba rodzaje w jednej mapie. Aby sprawdzić identyfikator profilu przed przesłaniem, przekaż go do compute_profile(), na przykład client.compute_profile("16x128"). Jeśli żaden profil nie pasuje, błąd wyświetla listę dostępnych profili.
compute_profiles() zwraca listę, więc możesz też przefiltrować ją samodzielnie. Na przykład poniższy kod znajduje profile z GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
Ustaw domyślny profil obliczeniowy dla swojego przepływu pracy
Większość przepływów pracy zaczyna od jednego rozmiaru. Zmapuj go na profil za pomocą sizes_map i ustaw jako domyślny za pomocą default_size podczas przesyłania przepływu pracy:
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",
)
)
Każde uruchomienie przepływu pracy używa tego profilu, więc nie musisz przekazywać rozmiaru podczas uruchamiania:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
Dobra praktyka: dopasuj rozmiary do wielkości problemów
Przepływ pracy rozwiązuje konkretne problemy i może wymagać różnych profili obliczeniowych, gdy problemy rosną pod względem skali i złożoności. Dzięki sizes_map dla każdego przepływu pracy możesz zrobić następujące rzeczy:
-
Zapewnić dużym problemom wystarczające zasoby obliczeniowe, aby zakończyły się powodzeniem.
-
Zapobiec temu, by małe problemy używały większego węzła, niż potrzebują.
Rozmiary możesz oprzeć na czynnikach, które decydują o zużyciu pamięci i CPU przez Twój przepływ pracy, takich jak rozmiar podprzestrzeni, liczba batchy lub liczba kubitów.
Zdefiniuj rozmiary
Możesz zmapować do czterech rozmiarów, dla małych (S), średnich (M), dużych (L) i bardzo dużych (XL) problemów. Na przykład poniższy kod definiuje przepływ pracy z trzema rozmiarami:
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",
)
)
Reguły rozmiarów
Etykiety rozmiarów muszą mieć postać S, M, L lub XL, więc przepływ pracy może zdefiniować do czterech rozmiarów. Zarządzany przepływ pracy dopasowuje etykiety zapisane wielkimi lub małymi literami i przechowuje je wielkimi literami. Dwa rozmiary mogą wskazywać ten sam profil.
Przepływ pracy odrzuca pierwsze przesłanie w następujących przypadkach:
-
Etykieta nie jest
S,M,LaniXL. -
Ustawisz
sizes_mapbezdefault_sizelubdefault_sizebezsizes_map. -
default_sizenie jest jedną z etykiet wsizes_map. -
Wartość w
sizes_mapnie jest dostępnym profilem obliczeniowym.
Zmień rozmiary przy ponownym przesłaniu
Gdy przesyłasz przepływ pracy ponownie z tym samym title, zarządzany przepływ pracy obsługuje rozmiary w następujący sposób:
-
Jeśli ustawisz
sizes_map, nowe rozmiary zastępują wszystkie zapisane rozmiary. -
Jeśli pominiesz
sizes_map, przepływ pracy zachowuje zapisane rozmiary i wartość domyślną. -
Aby zmienić tylko wartość domyślną, ustaw
default_sizebezsizes_map. Wartośćdefault_sizemusi być jednym z zapisanych rozmiarów.
Ustawiaj default_size za każdym razem, gdy ustawiasz sizes_map. Ponowne przesłanie nie wymaga default_size. Jeśli nowe rozmiary nie zawierają dawnej wartości domyślnej, przepływ pracy nie ma wartości domyślnej, a każde uruchomienie bez function_size kończy się błędem.
Wybierz rozmiar dla każdego uruchomienia
Przekaż function_size do run(), aby wybrać jeden z rozmiarów przepływu pracy dla tego zadania. Jeśli go pominiesz, zadanie używa domyślnego rozmiaru przepływu pracy:
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() i get_default_size() zwracają rozmiary zapisane w chwili wczytania przepływu pracy. Aby zobaczyć rozmiary zmienione po wczytaniu przepływu pracy, wczytaj go ponownie.
Aby odczytać rozmiar i profil obliczeniowy zadania, wywołaj get_function_size() i get_compute_profile() w kodzie przepływu pracy:
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'
Rozwiązywanie problemów z rozmiarami
| Problem | Przyczyna |
|---|---|
Przesłanie kończy się błędem Invalid size '...'. Valid sizes are: S, M, L, XL. | Etykieta w sizes_map nie jest jedną z czterech obsługiwanych etykiet. |
Przesłanie kończy się błędem Unknown compute profile '...' for size '...'. | Wartość w sizes_map nie jest dostępnym profilem. Sprawdź identyfikator za pomocą compute_profiles() lub wyszukaj go za pomocą compute_profile(). |
compute_profile() kończy się błędem No compute profile matches ... | Żaden profil nie ma dokładnie takich zasobów. Dla profilu z GPU przekaż też gpu. Wybierz profil z listy w komunikacie błędu. |
Przesłanie kończy się błędem 'default_size' is required when 'sizes' is provided. | Pierwsze przesłanie ustawia sizes_map bez default_size. |
run() kończy się błędem Unknown function size '...' for this function. Available sizes: ... | Przepływ pracy nie definiuje rozmiaru przekazanego do function_size. |
run() kończy się błędem This function has no size. | Ponowne przesłanie zastąpiło rozmiary i usunęło wartość domyślną. Prześlij ponownie z default_size lub przekaż function_size. |