Google AI propone ‘MLGO’: un marco Python de optimización del compilador guiado por aprendizaje automático

Estás leyendo la publicación: Google AI propone ‘MLGO’: un marco Python de optimización del compilador guiado por aprendizaje automático

Desde la invención de las computadoras modernas, ha habido una demanda constante de optimización y compilación de código más rápida. Los programas de grandes centros de datos pueden beneficiarse mucho de la optimización, pero los sistemas móviles e integrados, así como el software instalado en particiones de arranque protegidas, necesitan un código reducido. A medida que el área se ha desarrollado, el margen de maniobra se ha visto severamente limitado por heurísticas cada vez más complicadas, lo que impide el mantenimiento y los avances adicionales. Estudios recientes han demostrado que la optimización del compilador puede beneficiarse significativamente al sustituir estrategias de ML por heurísticas complejas. Sin embargo, la adopción de ML en compiladores de potencia industrial para todo uso sigue siendo complicada. Para solucionar este problema, un grupo de ingenieros de Google Research ha presentado “MLGO: un marco de optimizaciones del compilador guiado por aprendizaje automático”, el primer marco amplio de grado industrial para integrar sistemáticamente los enfoques de ML con LLVM. LLVM es una conocida infraestructura de compilación industrial de código abierto que crea software crítico de alto rendimiento. Para entrenar las redes neuronales para que tomen políticas de decisión que puedan reemplazar las heurísticas en LLVM, MLGO utiliza el aprendizaje por refuerzo. El equipo ha revelado dos optimizaciones de MLGO para LLVM, la primera involucra la incorporación para reducir el tamaño del código y la segunda involucra la asignación de registros para mejorar el rendimiento del código. Ambas mejoras se pueden encontrar en la fuente LLVM y se han utilizado en aplicaciones del mundo real.

🔥 Recomendado:  Cómo comprar en Facebook Marketplace: una guía completa para empresas

Al tomar decisiones que permiten la eliminación de código innecesario, MLGO utiliza la inserción para reducir el tamaño del código. El código de producción consta de miles de funciones que se llaman entre sí (llamados pares de llamador-llamado). El compilador decide si alinear o no un par de llamador-llamado durante la fase de alineación después de atravesar el gráfico de llamadas para todos los pares de llamador-llamado. Este es un proceso de toma de decisiones secuencial, ya que las decisiones de alineación anteriores pueden cambiar el gráfico de llamadas, ya que pueden influir en las decisiones posteriores y el resultado. La decisión en línea/no en línea se tomaba anteriormente mediante una heurística que se hacía cada vez más difícil de mejorar. El propósito de MLGO es reemplazar esta heurística con un modelo de aprendizaje automático. El compilador consulta una red neuronal a lo largo del recorrido del gráfico de llamadas para determinar si se debe alinear un par específico de llamador-llamado y luego realiza las elecciones secuencialmente hasta que se haya recorrido todo el gráfico de llamadas.

Fuente: https://arxiv.org/pdf/2101.04808.pdf

Usando métodos para gradiente de políticas y estrategias de evolución, MLGO entrena la red de decisiones con RL. Para recopilar datos y refinar la política entrenada, RL en línea alterna entre el entrenamiento y la ejecución de la compilación. Durante el paso de alineación, el compilador hace referencia al modelo para un modelo de entrenamiento insuficiente al decidir si se debe alinear o no. Se produce un registro del proceso de decisión secuencial una vez que se completa la compilación. El capacitador luego usará el registro para actualizar el modelo. Hasta que se obtiene un modelo aceptable, este proceso se repite. La política de capacitación se incorpora dentro del compilador para dar decisiones en línea/no en línea durante la compilación. A diferencia de la situación de entrenamiento, la política no genera un registro. El XLA AOT incluido en el modelo TensorFlow convierte el modelo en código ejecutable. Esto minimiza el tiempo adicional y el costo de memoria introducido por la inferencia del modelo ML en el momento de la compilación y evita la dependencia y la sobrecarga del tiempo de ejecución de TensorFlow.

🔥 Recomendado:  Cómo ocultar una pestaña personalizada vacía en Magento 2

El problema de asignar registros físicos a rangos en vivo se resuelve mediante la asignación de registros (es decir, variables). El paso de asignación de registros se mejoró usando MLGO como un marco universal, mejorando sustancialmente el rendimiento del código en LLVM. En conclusión, MLGO es un marco general que puede profundizarse aplicando algoritmos RL más robustos y agregando más elementos. También se puede ampliar usándolo con algoritmos de optimización adicionales además de regalloc e inline. El equipo está muy entusiasmado con las contribuciones potenciales que MLGO puede hacer en el campo de la optimización del compilador, y Google espera su aceptación continua y las próximas contribuciones de la comunidad de investigación.

Este artículo está escrito como un artículo de resumen por el personal de Marktechpost basado en el trabajo de investigación ‘MLGO: un marco de optimizaciones del compilador guiado por aprendizaje automático‘. Todo el crédito de esta investigación es para los investigadores de este proyecto. Revisar la papel, github, manifestación y artículo de referencia.

Por favor no olvides unirte Nuestro subreddit de ML

Echa un vistazo a https://aitoolsclub.com para encontrar 100 de Cool AI Tools