4

Soporte a la exploración paralela mediante computación tensorial y arquitectura unificada

AI999第6课:系统级持续演化:Genesis 与软件世界的沉淀
00:00

Cuando el tamaño de la población pasa de unas decenas a miles,la computación evolutivaya no tiene como cuello de botella principal «encontrar una buena solución», sino «evaluar suficientes candidatos en un tiempo limitado». La respuesta de ingeniería que ofrece EvoX son dos líneas de trabajo que se sustentan mutuamente:la computación tensorialreescribe el bucle secuencial individuo por individuo como operaciones tensoriales por lotes,la arquitectura unificadadesacopla el algoritmo, el problema, el flujo de trabajo y la planificación del Runtime, de modo que este mecanismo paralelo pueda reutilizarse en distintos algoritmos evolutivos y tareas.

Por qué la diversidad requiere rendimiento

La búsqueda evolutiva depende de la diversidad de la población: cuanto más dispersos estén los candidatos, mayor será la probabilidad de escapar de un óptimo local. Pero «mantener la diversidad» es en esencia un problema de capacidad de cómputo: exige que cada generación pueda evaluar y actualizar el estado de un gran número de candidatos. Si el método para generar candidatos sigue fijado de antemano por humanos y la evaluación sigue ejecutándose individuo por individuo, el sistema no hará más que repetir esquemas preestablecidos, y el beneficio de la diversidad quedará anulado por el cuello de botella del rendimiento de cálculo.

Evolución de métodos: incluir en la evolución también el «método que genera candidatos»

Una vez abierta la escala de cómputo, EvoX eleva un nivel más el objeto de optimización: ya no solo resuelve el problema, sino que incorpora como objeto evolutivo el propio método que genera las soluciones candidatas; esto es laevolución de métodos. Con MetaDE como ejemplo, el algoritmo interno resuelve la tarea real, mientras que el algoritmo externo evoluciona la configuración y las estrategias del algoritmo interno (por ejemplo, la estrategia de mutación y los hiperparámetros de la evolución diferencial), y ejecuta en paralelo una gran cantidad de tareas internas en la GPU, de modo que el rendimiento de las tareas guíe a su vez la selección de la configuración externa;AutoPSO y EvoGO dan un paso más al combinar componentes de enjambre de partículas y aprender la forma de generar candidatos a partir de la retroalimentación histórica, logrando el salto de «cambiar parámetros» a «cambiar la estructura del algoritmo». Esta evolución de doble nivel, interna y externa, exige de forma natural que una gran cantidad de tareas internas de la misma generación, e incluso del mismo instante, se evalúen y actualicen por lotes, lo que plantea mayores exigencias de rendimiento de cálculo y capacidad de paralelización.

Grafo de computación tensorial: sustituir los bucles por tensores por lotes

El bucle secuencial tradicional en CPU suele ejecutar «evaluación—registro—actualización» individuo por individuo, activando cada vez solo operadores de pequeña escala, lo que conlleva tres tipos de costes:alto coste de planificación,fragmentación de operadores,aprovechamiento insuficiente de la GPU. El enfoque del grafo de computación tensorial consiste en organizar de forma integralel mantenimiento de la población, la evaluación por lotes y la actualización de estadocomo operaciones tensoriales por lotes, de modo que los candidatos de una misma generación, e incluso de varias, se calculen en paralelo. Por ejemplo: cuando una misma generación contiene N soluciones candidatas, la implementación secuencial itera individuo por individuo, mientras que la implementación tensorial organiza la población como un tensor y completa de una sola vez la evaluación por lotes y la actualización de estado en paralelo, reduciendo así notablemente el coste de planificación y aumentando la tasa de ocupación de la GPU.

Arquitectura unificada: hacer reutilizable el mecanismo paralelo

Reescribir los bucles como tensores no basta: si el algoritmo, el problema y la lógica de planificación están acoplados entre sí, cambiar a otro algoritmo evolutivo o a otro tipo de tarea obligará a reescribirlo todo. La arquitectura unificada, al desacoplar módulos comoel algoritmo, el problema, el flujo de trabajo y la planificación del Runtime, permite que el mecanismo paralelo tensorial se reutilice en distintos algoritmos evolutivos y tareas (como los escenarios de evolución de métodos MetaDE, AutoPSO, etc.); junto con laplanificación de cómputo heterogéneo, se pueden gestionar recursos como CPU y GPU a nivel de tareas por lotes, sustentando así una exploración paralela componible y escalable.

Bucle secuencial tradicional en CPUCandidato 1EvaluaciónActualizaciónCandidato 2EvaluaciónActualizaciónCandidato 3EvaluaciónActualización⋯Aprovechamiento de la GPUOcupación bajaSecuencial individuo por individuo: evaluación → registro → actualizaciónAlto coste de planificación · Fragmentación de operadores · Aprovechamiento insuficiente de la GPUComputación tensorial por lotes en GPU1Tensor de población (N soluciones candidatas)2Evaluación por lotes3Actualización de estado en paralelo4Planificación de cómputo heterogéneo (CPU / GPU)Operación tensorial por lotes de una sola vezBajo coste de planificación · Poca fragmentación de operadores · Alta ocupación de la GPUBase unificada, abierta y desacopladaAlgoritmoProblemaFlujo de trabajoPlanificación del Runtime

Por qué es una capacidad de nivel «base»

La base de ingeniería que aportan la GPU y los grandes modelos eleva la computación tensorial por lotes de una optimización local a una capacidad fundamental que sustenta la exploración evolutiva a nivel de sistema. En otras palabras, la computación tensorial resuelve «correr rápido», mientras que la arquitectura unificada, abierta y desacoplada resuelve «poder cambiar»: la primera aporta rendimiento y la segunda, límites de reutilización componibles y escalables. Solo al combinarse ambas es cuando la exploración evolutiva paralela, de alta intensidad y alta diversidad, se convierte de verdad en una capacidad de ingeniería.

Compensaciones clave
La computación tensorial no consiste en «acelerar un operador individual», sino en convertir por lotes en operaciones tensoriales la población, la evaluación y la actualización de estado en su conjunto; solo cuando la granularidad de los lotes y la planificación del Runtime se diseñan de forma coordinada mejoran a la vez la tasa de ocupación de la GPU y el coste de planificación.