Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Scegli un profilo di calcolo

I workflow gestiti vengono eseguiti su profili di calcolo. Un profilo di calcolo è una combinazione fissa di vCPU, memoria e GPU, simile alle risorse che richiedi a uno scheduler HPC. Quando carichi un workflow, associ le sue dimensioni, come S e M, ai profili, e ogni esecuzione sceglie una di queste dimensioni. Il job viene quindi eseguito su un proprio nodo con quel profilo e lo mantiene fino alla fine del job.

ProfilovCPUMemoria (GB)GPU
8x32832Nessuna
16x12816128Nessuna
48x76848768Nessuna
128x15001281500Nessuna
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 H100

L'ID di un profilo ha la forma {cpu}x{memory}, con la memoria in GB, oppure {cpu}x{memory}x{count}{gpu} per un profilo con GPU. Ad esempio, 24x120x1l40s ha 24 vCPU, 120 GB di memoria e una GPU NVIDIA L40S.

Controlla i profili disponibili​

Per vedere quali profili sono disponibili, chiama 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)

Cerca un profilo in base alle sue risorse​

Invece di digitare l'ID di un profilo, puoi descrivere le risorse necessarie al tuo workflow con compute_profile() e usare il risultato come valore in sizes_map. Passa cpu e memory in GB e passa gpu per un profilo GPU:

run_workflow_remotely.ipynb

profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s

sizes_map = {"S": "8x32", "L": profile}

Un sizes_map accetta ID di profilo e i profili restituiti da compute_profile(), e puoi mescolare entrambi in una sola mappa. Per verificare l'ID di un profilo prima del caricamento, passalo a compute_profile(), ad esempio client.compute_profile("16x128"). Se nessun profilo corrisponde, l'errore elenca i profili disponibili.

compute_profiles() restituisce una lista, quindi puoi anche filtrarla da te. Ad esempio, il codice seguente trova i profili GPU:

run_workflow_remotely.ipynb

gpu_profiles = [p for p in client.compute_profiles() if p.gpu]

Imposta un profilo di calcolo predefinito per il tuo workflow​

La maggior parte dei workflow parte con una sola dimensione. Associala a un profilo con sizes_map e rendila quella predefinita con default_size, quando carichi il 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",
)
)

Ogni esecuzione del workflow usa questo profilo, quindi non devi passare una dimensione quando lo esegui:

run_workflow_remotely.ipynb

job = my_workflow.run(circuits=circuits) # Runs on 16x128

Best practice: abbina le dimensioni alle dimensioni del problema​

Un workflow risolve problemi specifici e potrebbe richiedere profili di calcolo diversi man mano che i problemi crescono in scala e complessità. Con un sizes_map per ogni workflow, puoi fare quanto segue:

  • Dare ai problemi grandi risorse di calcolo sufficienti per essere eseguiti fino al completamento.

  • Evitare che i problemi piccoli usino un nodo più grande del necessario.

Puoi basare le dimensioni sui fattori che determinano l'uso di memoria e CPU del tuo workflow, come la dimensione del sottospazio, il numero di batch o il numero di qubit.

Definisci le dimensioni​

Puoi associare fino a quattro dimensioni, per problemi piccoli (S), medi (M), grandi (L) ed extra grandi (XL). Ad esempio, il codice seguente definisce un workflow con tre dimensioni:

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",
)
)

Regole sulle dimensioni​

Le etichette delle dimensioni devono essere S, M, L o XL, quindi un workflow può definire fino a quattro dimensioni. Un workflow gestito riconosce le etichette in maiuscolo o minuscolo e le memorizza in maiuscolo. Due dimensioni possono essere associate allo stesso profilo.

Un workflow rifiuta il primo caricamento nei casi seguenti:

  • Un'etichetta non è S, M, L o XL.

  • Imposti sizes_map senza default_size, oppure default_size senza sizes_map.

  • default_size non è una delle etichette in sizes_map.

  • Un valore in sizes_map non è un profilo di calcolo disponibile.

Cambia le dimensioni a un nuovo caricamento​

Quando carichi di nuovo il workflow con lo stesso title, il workflow gestito gestisce le dimensioni come segue:

  • Se imposti sizes_map, le nuove dimensioni sostituiscono tutte le dimensioni memorizzate.

  • Se ometti sizes_map, il workflow mantiene le dimensioni memorizzate e quella predefinita.

  • Per cambiare solo la dimensione predefinita, imposta default_size senza sizes_map. Il valore di default_size deve essere una delle dimensioni memorizzate.

Imposta default_size ogni volta che imposti sizes_map. Un nuovo caricamento non richiede default_size. Se le nuove dimensioni non includono la vecchia dimensione predefinita, il workflow non ha una dimensione predefinita e ogni esecuzione senza function_size fallisce.

Scegli una dimensione per ogni esecuzione​

Passa function_size a run() per scegliere una delle dimensioni del workflow per quel job. Se lo ometti, il job usa la dimensione predefinita del workflow:

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() e get_default_size() restituiscono le dimensioni memorizzate quando hai caricato il workflow. Per vedere le dimensioni cambiate dopo il caricamento del workflow, caricalo di nuovo.

Per leggere la dimensione e il profilo di calcolo del job, chiama get_function_size() e get_compute_profile() nel codice del tuo workflow:

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'

Risoluzione dei problemi sulle dimensioni​

ProblemaCausa
Il caricamento fallisce con Invalid size '...'. Valid sizes are: S, M, L, XL.Un'etichetta in sizes_map non è una delle quattro etichette supportate.
Il caricamento fallisce con Unknown compute profile '...' for size '...'.Un valore in sizes_map non è un profilo disponibile. Controlla l'ID con compute_profiles() oppure usa compute_profile() per cercarlo.
compute_profile() fallisce con No compute profile matches ...Nessun profilo ha esattamente quelle risorse. Per un profilo GPU, passa anche gpu. Scegli un profilo dall'elenco nell'errore.
Il caricamento fallisce con 'default_size' is required when 'sizes' is provided.Il primo caricamento imposta sizes_map senza default_size.
run() fallisce con Unknown function size '...' for this function. Available sizes: ...Il workflow non definisce la dimensione che hai passato a function_size.
run() fallisce con This function has no size.Un nuovo caricamento ha sostituito le dimensioni e rimosso quella predefinita. Carica di nuovo con default_size, oppure passa function_size.