Huawei anunció que su middleware MindSpore Deep Learning estilo TensorFlow y PyTorch es ahora de código abierto. Conoce en este artículo sus características más importantes.
Huawei acaba de anunciar que su marco MindSpore para desarrollar aplicaciones de inteligencia artificial se está convirtiendo en código abierto y está disponible en GiHub y Gitee. MindSpore es otro marco de aprendizaje profundo para entrenar modelos de redes neuronales, similar a TensorFlow o PyTorch, diseñado para su uso desde Edge a Cloud, que admite tanto GPU como, obviamente, procesadores Huawei Ascend.
En agosto pasado, cuando Huawei anunció el lanzamiento oficial de su procesador Ascend, MindSpore se presentó por primera vez, indicando que “en una sesión de entrenamiento típica basada en ResNet-50, la combinación de Ascend 910 y MindSpore es aproximadamente el doble de rápida. Al entrenar modelos de IA en comparación con otras tarjetas de aprendizaje importantes con TensorFlow Es cierto que han surgido muchos marcos en los últimos años, y quizás MindSpore no es más que un grupo que puede competir incluso de forma remota con TensorFlow (respaldado por Google) y PyTorch (respaldado por Facebook).
Arquitectura del sistema
El sitio web de MindSpore describe que la infraestructura consta de tres capas principales: expresión de frontend, motor gráfico y tiempo de ejecución de backend. La siguiente figura muestra un diagrama visual:
El primer nivel de MindSpore ofrece una API de Python para programadores. Dado que la lingüística del lenguaje en nuestra comunidad es de facto Python, MindSpore quiere competir con PyTorch y TensorFlow. Con esta API, los programadores pueden manipular modelos (entrenamiento, inferencia, etc.) y procesar datos. Este primer nivel también incluye soporte para la representación provisional de código (MindSpore IR), en el que se basarán muchas optimizaciones que se pueden realizar en paralelización y diferenciación automática (GHLO).
A continuación se muestra la capa Graph Engine que proporciona la funcionalidad necesaria para crear y ejecutar la diferenciación automática del gráfico de ejecución. Con MindSpore, optaron por un modelo de diferenciación automática diferente a PyTorch (que genera un gráfico de ejecución dinámica) o TensorFlow (aunque originalmente se eligió la opción de crear un programa de ejecución estático más eficiente, ahora también ofrece una opción de gráfico de ejecución dinámica y permite una versión estática del gráfico con el uso del decorador @ tf.function de su API de bajo nivel).
La elección de MindSpore es convertir el código fuente a un formato de código intermedio (MindSpore IR) para aprovechar los dos modelos (para obtener más información, consulte la sección "Separación automática" en el sitio web de MindSpore).
La capa final consta de todas las bibliotecas y entornos de ejecución necesarios para admitir las diversas arquitecturas de hardware en las que se procesará el código. Lo más probable es que sea un backend muy similar a otros frameworks, quizás con características de Huawei, como bibliotecas como HCCL (Huawei Collective Communication Library), equivalente a NVIDIA NCCL (NVIDIA Collective Communication Library).
Soporte de visualización de entrenamiento
Según el tutorial de MindSpore, aunque fue imposible instalarlos y usarlos, tienen MindInsight para crear visualizaciones que recuerdan un poco a TensorBoard, TensorFlow. Eche un vistazo a algunas capturas de pantalla que muestran en su sitio web:
Según el manual, MindSpore utiliza actualmente un mecanismo de devolución de llamada (que recuerda a cómo se hace con Keras) para escribir (en un archivo de registro) en el proceso de entrenamiento todos esos parámetros e hiperparámetros del modelo que queremos, así como el programa de cálculo cuando La compilación de la red neuronal en código intermedio está completa.
Paralelismo
En su tutorial, hablan sobre dos modos de paralelización (DATA_PARALLEL y AUTO_PARALLEL) y proporcionan un código de muestra que entrena a ResNet-50 con un conjunto de datos CIFAR para un procesador Ascend 910 (que no pude probar). DATA_PARALLEL se refiere a una estrategia comúnmente conocida como paralelismo de datos, que consiste en dividir los datos de entrenamiento en múltiples subconjuntos, cada uno de los cuales se ejecuta en la misma réplica del modelo, pero en diferentes unidades de procesamiento. La compatibilidad con Graph Engine se proporciona para la paralelización de código y, en particular, para el paralelismo AUTO_PARALLEL.
El modo AUTO_PARALLEL optimiza automáticamente la paralelización combinando la estrategia de paralelización de datos (discutida anteriormente) con la estrategia de paralelización del modelo, en la que el modelo se divide en diferentes partes y cada parte se ejecuta en paralelo en diferentes unidades de procesamiento. Este modo automático selecciona la estrategia de paralelización que ofrece los mejores beneficios, que se puede leer en la sección Automatic Parallel en el sitio web de MindSpore (aunque no describen cómo se toman las estimaciones y decisiones). Tendremos que esperar para hacer tiempo para que el equipo técnico amplíe la documentación y comprenda más detalles sobre la estrategia de auto-paralelización. Pero está claro que esta estrategia de auto-paralelización es crítica, y aquí es donde deben y pueden competir con TensorFlow o PyTorch, obteniendo un rendimiento significativamente mejor con los procesadores de Huawei.
Hoja de ruta planificada y cómo contribuir
Obviamente hay mucho trabajo por hacer y en este punto han simplificado las ideas que tienen en mente para el próximo año en la extensa hoja de ruta presentada en esta página, pero argumentan que las prioridades se ajustarán según el usuario.
Realimentación. De momento podemos encontrar estas líneas principales:
- Soporte para más modelos (modelos clásicos pendientes, GAN, RNN, Transformers, modelos de aprendizaje amplificado, programación probabilística, AutoML, etc.).
- Amplíe las API y las bibliotecas para mejorar la usabilidad y la experiencia de programación (más operadores, más optimizadores, más funciones de pérdida, etc.)
- Soporte integral del procesador Huawei Ascend y optimización del rendimiento (optimización de la compilación, mejora de la utilización de recursos, etc.)
- Evolución de la pila de software y ejecución de optimizaciones de gráficos computacionales (mejorando la representación de IR intermedio, agregando capacidades de optimización adicionales, etc.).
- Soporte para más lenguajes de programación (no solo Python).
- Aprendizaje distribuido mejorado con optimización de la programación automática, distribución de datos, etc.
- Mejore la herramienta MindInsight para que al programador le resulte más fácil "depurar" y mejorar el ajuste de hiperparámetros durante el proceso de aprendizaje.
- Progreso en la entrega de funcionalidad de inferencia a dispositivos en Edge (seguridad, soporte para modelos que no son de plataforma a través de ONNX, etc.)
En la página de la comunidad, puede ver que MindSpore tiene socios fuera de Huawei y China, como la Universidad de Edimburgo, el Imperial College de Londres, la Universidad de Munster (Alemania) o la Universidad Paris-Saclay. Dicen que seguirán un modelo de gobierno abierto e invitarán a toda la comunidad a contribuir tanto con el código como con la documentación.
Conclusión
Después de un rápido primer vistazo, parece que las decisiones correctas de diseño e implementación (como la concurrencia y la diferenciación automática) pueden agregar espacio para mejoras y optimizaciones que logran un mejor rendimiento que los marcos que desean superar. Pero todavía queda mucho trabajo por delante para capturar PyTorch y TensorFlow y, sobre todo, construir una comunidad, ¡no solo! Sin embargo, todos ya sabemos que con el respaldo de una gran empresa del sector como Huawei, todo es posible, o era obvio hace tres años cuando salió la primera versión de PyTorch (Facebook) que podría estar cerca del talón. de TensorFlow (Google)?