Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Elegir un perfil de cómputo

Los workflows gestionados se ejecutan en perfiles de cómputo. Un perfil de cómputo es una combinación fija de vCPU, memoria y GPU, similar a los recursos que solicitas a un planificador de HPC. Cuando subes un workflow, asocias sus tamaños, como S y M, a perfiles, y cada ejecución elige uno de esos tamaños. Después, el trabajo se ejecuta en su propio nodo con ese perfil y lo conserva hasta que el trabajo termina.

PerfilvCPUMemoria (GB)GPU
8x32832Ninguna
16x12816128Ninguna
48x76848768Ninguna
128x15001281500Ninguna
24x120x1l40s241201 L40S
20x320x2a100203202 A100
80x1200x8a1008012008 A100
160x1792x8h10016017928 H100

Un ID de perfil tiene la forma {cpu}x{memory}, con la memoria en GB, o {cpu}x{memory}x{count}{gpu} para un perfil con GPU. Por ejemplo, 24x120x1l40s tiene 24 vCPU, 120 GB de memoria y una GPU NVIDIA L40S.

Comprobar los perfiles disponibles​

Para ver qué perfiles están disponibles, llama a 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)

Buscar un perfil por sus recursos​

En lugar de escribir un ID de perfil, puedes describir los recursos que necesita tu workflow con compute_profile() y usar el resultado como valor en sizes_map. Pasa cpu y memory en GB, y pasa gpu para un perfil con 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 acepta ID de perfil y los perfiles que devuelve compute_profile(), y puedes mezclar ambos en un mismo mapa. Para comprobar un ID de perfil antes de subir, pásalo a compute_profile(), por ejemplo client.compute_profile("16x128"). Si ningún perfil coincide, el error lista los perfiles disponibles.

compute_profiles() devuelve una lista, así que también puedes filtrarla tú mismo. Por ejemplo, el siguiente código encuentra los perfiles con GPU:

run_workflow_remotely.ipynb

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

Establecer un perfil de cómputo predeterminado para tu workflow​

La mayoría de los workflows empiezan con un solo tamaño. Asócialo a un perfil con sizes_map y conviértelo en el predeterminado con default_size cuando subas el 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",
)
)

Todas las ejecuciones del workflow usan este perfil, así que no necesitas pasar un tamaño cuando lo ejecutas:

run_workflow_remotely.ipynb

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

Buena práctica: ajusta los tamaños a los tamaños de los problemas​

Un workflow resuelve problemas específicos y puede requerir distintos perfiles de cómputo a medida que los problemas crecen en escala y complejidad. Con un sizes_map para cada workflow, puedes hacer lo siguiente:

  • Dar a los problemas grandes recursos de cómputo suficientes para que se ejecuten hasta el final.

  • Evitar que los problemas pequeños usen un nodo mayor del que necesitan.

Puedes basar los tamaños en los factores que determinan el uso de memoria y CPU de tu workflow, como el tamaño del subespacio, el número de batches o el número de qubits.

Definir los tamaños​

Puedes asociar hasta cuatro tamaños, para problemas pequeños (S), medianos (M), grandes (L) y extragrandes (XL). Por ejemplo, el siguiente código define un workflow con tres tamaños:

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

Reglas de tamaño​

Las etiquetas de tamaño deben ser S, M, L o XL, así que un workflow puede definir hasta cuatro tamaños. Un workflow gestionado reconoce las etiquetas en mayúsculas o minúsculas y las almacena en mayúsculas. Dos tamaños pueden asociarse al mismo perfil.

Un workflow rechaza la primera subida en los siguientes casos:

  • Una etiqueta no es S, M, L ni XL.

  • Estableces sizes_map sin default_size, o default_size sin sizes_map.

  • default_size no es una de las etiquetas de sizes_map.

  • Un valor de sizes_map no es un perfil de cómputo disponible.

Cambiar los tamaños al volver a subir​

Cuando vuelves a subir el workflow con el mismo title, el workflow gestionado trata los tamaños de la siguiente manera:

  • Si estableces sizes_map, los nuevos tamaños reemplazan todos los tamaños almacenados.

  • Si omites sizes_map, el workflow conserva los tamaños almacenados y el predeterminado.

  • Para cambiar solo el predeterminado, establece default_size sin sizes_map. El valor de default_size debe ser uno de los tamaños almacenados.

Establece default_size cada vez que establezcas sizes_map. Una nueva subida no exige default_size. Si los nuevos tamaños no incluyen el predeterminado anterior, el workflow no tiene predeterminado y toda ejecución sin function_size falla.

Elegir un tamaño para cada ejecución​

Pasa function_size a run() para elegir uno de los tamaños del workflow para ese trabajo. Si lo omites, el trabajo usa el tamaño predeterminado 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() y get_default_size() devuelven los tamaños que se almacenaron cuando cargaste el workflow. Para ver los tamaños que cambiaron después de cargar el workflow, cárgalo de nuevo.

Para leer el tamaño y el perfil de cómputo del trabajo, llama a get_function_size() y get_compute_profile() en el código de tu 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'

Solucionar problemas de tamaños​

ProblemaCausa
La subida falla con Invalid size '...'. Valid sizes are: S, M, L, XL.Una etiqueta de sizes_map no es una de las cuatro etiquetas admitidas.
La subida falla con Unknown compute profile '...' for size '...'.Un valor de sizes_map no es un perfil disponible. Comprueba el ID con compute_profiles() o usa compute_profile() para buscarlo.
compute_profile() falla con No compute profile matches ...Ningún perfil tiene exactamente esos recursos. Para un perfil con GPU, pasa también gpu. Elige un perfil de la lista del error.
La subida falla con 'default_size' is required when 'sizes' is provided.La primera subida establece sizes_map sin default_size.
run() falla con Unknown function size '...' for this function. Available sizes: ...El workflow no define el tamaño que pasaste a function_size.
run() falla con This function has no size.Una nueva subida reemplazó los tamaños y eliminó el predeterminado. Sube de nuevo con default_size o pasa function_size.