Paralelización (Parallelization)
La paralelización ejecuta varias llamadas al LLM a la vez y agrega los resultados. Dos variantes: seccionado (dividir una tarea en subtareas independientes en paralelo) y votación (ejecutar la misma tarea varias veces para mejorar fiabilidad o cobertura). Reduce la latencia y puede subir la calidad.
Problema
Ejecutar subtareas independientes una tras otra desperdicia tiempo, y una sola muestra de una tarea difícil puede ser poco fiable.
Cuándo usarlo
Usa la paralelización cuando las subtareas son independientes (seccionado), o cuando varios intentos de la misma tarea mejoran la confianza o cobertura (votación).
Solución
Seccionado: divide el trabajo en piezas independientes, ejecútalas en paralelo y combina las salidas. Votación: ejecuta el mismo prompt varias veces (o con variaciones) y agrega por mayoría, unión o un juez.
Ambas reducen el tiempo real frente a la ejecución secuencial; la votación además cambia coste extra por mayor fiabilidad en tareas donde una sola muestra es arriesgada.
Componentes
Beneficios
- Menor latencia al ejecutar llamadas en concurrencia.
- La votación mejora la fiabilidad y la cobertura.
- Cada llamada paralela se mantiene simple y enfocada.
Riesgos
- La votación multiplica el coste de tokens.
- La lógica de agregación puede ser difícil de acertar.
- Subtareas asumidas independientes pueden interactuar en realidad.
Cuándo no usarlo
- Cuando las subtareas dependen de la salida de otra: encadénalas.
- Cuando el coste es ajustado y basta una sola llamada.
- Cuando los resultados no se pueden agregar de forma significativa.
Tecnologías
Ejemplos
- Resumir muchos documentos a la vez y luego fusionar los resúmenes.
- Ejecutar una comprobación de seguridad en paralelo con la respuesta principal.
- Muestrear una respuesta varias veces y tomar la mayoría.
KPIs
- Reducción de latencia vs. secuencial
- Tiempo ahorrado al ejecutar llamadas en paralelo; la razón de ser del patrón.
- Calidad de la agregación
- Si combinar las salidas paralelas preserva la corrección; lo difícil es la unión, no el fan-out.
- Coste de concurrencia
- Tokens totales de todas las ramas paralelas; cambias dinero por velocidad, vigila el multiplicador.
- Tasa de límite de tasa / throttle
- Con qué frecuencia las llamadas paralelas chocan con los límites del proveedor, que las serializa o falla en silencio.
Modos de fallo observados
- Errores de agregación: resultados paralelos correctos por separado pero mal combinados (doble conteo, contradicciones).
- El límite de tasa convierte el paralelismo previsto en llamadas lentas y serializadas.
- Sorpresa de coste: N ramas paralelas cuestan N× aunque solo se use un resultado.
- Manejo de fallo parcial: una rama falla y el agregador o se bloquea o la descarta en silencio.
Lecciones aprendidas
- Diseña primero el paso de agregación: combinar bien los resultados es más difícil que dividir el trabajo.
- Respeta los límites de tasa del proveedor con batching o backoff, o el paralelismo se evapora.
- Paraleliza solo subtareas independientes; las dependencias fuerzan una secuencia de todos modos.
- Decide explícitamente cómo se manejan los fallos parciales antes de que ocurran en producción.
FAQs
- ¿Diferencia entre seccionado y votación?
- El seccionado divide una tarea en subtareas independientes distintas; la votación ejecuta la misma tarea varias veces para agregar por fiabilidad.
- ¿La votación siempre mejora la calidad?
- A menudo, en tareas donde las muestras varían, pero multiplica el coste. Resérvala para pasos críticos donde una sola muestra es arriesgada.
- ¿Cómo combino resultados paralelos?
- Según el caso: concatenar secciones, tomar voto mayoritario, unir los hallazgos o usar un modelo juez para sintetizar.