Escolha um perfil de computação
Workflows gerenciados são executados em perfis de computação. Um perfil de computação é uma combinação fixa de vCPUs, memória e GPUs, semelhante aos recursos que você solicita a um agendador de HPC. Ao enviar um workflow, você associa seus tamanhos, como S e M, a perfis, e cada execução escolhe um desses tamanhos. O job então é executado em seu próprio nó com esse perfil e mantém o perfil até o fim do job.
| Perfil | vCPUs | Memória (GB) | GPUs |
|---|---|---|---|
8x32 | 8 | 32 | Nenhuma |
16x128 | 16 | 128 | Nenhuma |
48x768 | 48 | 768 | Nenhuma |
128x1500 | 128 | 1500 | Nenhuma |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
Um ID de perfil tem o formato {cpu}x{memory}, com a memória em GB, ou {cpu}x{memory}x{count}{gpu} para um perfil com GPUs. Por exemplo, 24x120x1l40s tem 24 vCPUs, 120 GB de memória e uma GPU NVIDIA L40S.
Verifique os perfis disponíveis
Para ver quais perfis estão disponíveis, chame 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)
Procure um perfil pelos seus recursos
Em vez de digitar um ID de perfil, você pode descrever os recursos de que seu workflow precisa com compute_profile() e usar o resultado como valor em sizes_map. Passe cpu e memory em GB e passe gpu para um perfil com GPU:
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
Um sizes_map aceita IDs de perfil e os perfis que compute_profile() retorna, e você pode misturar ambos em um único mapa. Para verificar um ID de perfil antes de enviar, passe-o a compute_profile(), por exemplo client.compute_profile("16x128"). Se nenhum perfil corresponder, o erro lista os perfis disponíveis.
compute_profiles() retorna uma lista, então você também pode filtrá-la por conta própria. Por exemplo, o código a seguir encontra os perfis com GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
Defina um perfil de computação padrão para o seu workflow
A maioria dos workflows começa com um único tamanho. Associe-o a um perfil com sizes_map e torne-o o padrão com default_size ao enviar o 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",
)
)
Toda execução do workflow usa esse perfil, então você não precisa passar um tamanho ao executá-lo:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
Boa prática: faça os tamanhos corresponderem aos tamanhos dos problemas
Um workflow resolve problemas específicos e pode exigir perfis de computação diferentes à medida que os problemas aumentam em escala e complexidade. Com um sizes_map para cada workflow, você pode fazer o seguinte:
-
Dar a problemas grandes recursos de computação suficientes para serem executados até o fim.
-
Impedir que problemas pequenos usem um nó maior do que precisam.
Você pode basear os tamanhos nos fatores que determinam o uso de memória e CPU do seu workflow, como o tamanho do subespaço, o número de lotes ou o número de qubits.
Defina os tamanhos
Você pode associar até quatro tamanhos, para problemas pequenos (S), médios (M), grandes (L) e extragrandes (XL). Por exemplo, o código a seguir define um workflow com três tamanhos:
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",
)
)
Regras de tamanho
Os rótulos de tamanho devem ser S, M, L ou XL, então um workflow pode definir até quatro tamanhos. Um workflow gerenciado reconhece rótulos em maiúsculas ou minúsculas e os armazena em maiúsculas. Dois tamanhos podem apontar para o mesmo perfil.
Um workflow rejeita o primeiro envio nos seguintes casos:
-
Um rótulo não é
S,M,LnemXL. -
Você define
sizes_mapsemdefault_size, oudefault_sizesemsizes_map. -
default_sizenão é um dos rótulos emsizes_map. -
Um valor em
sizes_mapnão é um perfil de computação disponível.
Altere os tamanhos em um novo envio
Quando você envia o workflow novamente com o mesmo title, o workflow gerenciado trata os tamanhos da seguinte forma:
-
Se você definir
sizes_map, os novos tamanhos substituem todos os tamanhos armazenados. -
Se você omitir
sizes_map, o workflow mantém os tamanhos armazenados e o padrão. -
Para alterar apenas o padrão, defina
default_sizesemsizes_map. O valor dedefault_sizedeve ser um dos tamanhos armazenados.
Defina default_size toda vez que definir sizes_map. Um novo envio não exige default_size. Se os novos tamanhos não incluírem o antigo padrão, o workflow fica sem padrão, e toda execução sem function_size falha.
Escolha um tamanho para cada execução
Passe function_size a run() para escolher um dos tamanhos do workflow para aquele job. Se você o omitir, o job usa o tamanho padrão do 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() retornam os tamanhos que estavam armazenados quando você carregou o workflow. Para ver tamanhos que mudaram depois de você carregar o workflow, carregue-o novamente.
Para ler o tamanho e o perfil de computação do job, chame get_function_size() e get_compute_profile() no código do seu 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'
Solucione problemas de tamanhos
| Problema | Causa |
|---|---|
O envio falha com Invalid size '...'. Valid sizes are: S, M, L, XL. | Um rótulo em sizes_map não é um dos quatro rótulos aceitos. |
O envio falha com Unknown compute profile '...' for size '...'. | Um valor em sizes_map não é um perfil disponível. Verifique o ID com compute_profiles() ou use compute_profile() para procurá-lo. |
compute_profile() falha com No compute profile matches ... | Nenhum perfil tem exatamente esses recursos. Para um perfil com GPU, passe também gpu. Escolha um perfil da lista no erro. |
O envio falha com 'default_size' is required when 'sizes' is provided. | O primeiro envio define sizes_map sem default_size. |
run() falha com Unknown function size '...' for this function. Available sizes: ... | O workflow não define o tamanho que você passou a function_size. |
run() falha com This function has no size. | Um novo envio substituiu os tamanhos e removeu o padrão. Envie novamente com default_size ou passe function_size. |