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?

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.

ProfilvCPUPamięć (GB)GPU
8x32832Brak
16x12816128Brak
48x76848768Brak
128x15001281500Brak
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 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, L ani XL.

  • Ustawisz sizes_map bez default_size lub default_size bez sizes_map.

  • default_size nie jest jedną z etykiet w sizes_map.

  • Wartość w sizes_map nie 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_size bez sizes_map. Wartość default_size musi 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​

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