Pular para o conteúdo principal
Este projeto está em fase beta. Encontrou um bug? Abra uma issue no GitHub. Tem uma pergunta ou ideia? Pergunte no Discussions — adoraríamos receber seu feedback!
Como está a qualidade da tradução nesta página?

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.

PerfilvCPUsMemória (GB)GPUs
8x32832Nenhuma
16x12816128Nenhuma
48x76848768Nenhuma
128x15001281500Nenhuma
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 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, L nem XL.

  • Você define sizes_map sem default_size, ou default_size sem sizes_map.

  • default_size não é um dos rótulos em sizes_map.

  • Um valor em sizes_map nã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_size sem sizes_map. O valor de default_size deve 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​

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