Apache MXNet - Introducción

Este capítulo destaca las características de Apache MXNet y habla sobre la última versión de este marco de software de aprendizaje profundo.

¿Qué es MXNet?

Apache MXNet es un poderoso instrumento de marco de software de aprendizaje profundo de código abierto que ayuda a los desarrolladores a construir, entrenar e implementar modelos de aprendizaje profundo. En los últimos años, desde la atención médica hasta el transporte y la fabricación y, de hecho, en todos los aspectos de nuestra vida diaria, el impacto del aprendizaje profundo se ha generalizado. Hoy en día, las empresas buscan el aprendizaje profundo para resolver algunos problemas difíciles como el reconocimiento facial, la detección de objetos, el reconocimiento óptico de caracteres (OCR), el reconocimiento de voz y la traducción automática.

Esa es la razón por la que Apache MXNet es compatible con:

  • Algunas grandes empresas como Intel, Baidu, Microsoft, Wolfram Research, etc.

  • Proveedores de nube pública, incluidos Amazon Web Services (AWS) y Microsoft Azure

  • Algunos grandes institutos de investigación como Carnegie Mellon, MIT, la Universidad de Washington y la Universidad de Ciencia y Tecnología de Hong Kong.

¿Por qué Apache MXNet?

Existen varias plataformas de aprendizaje profundo como Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit, etc., entonces quizás se pregunte por qué Apache MXNet. Veamos algunas de las razones detrás de esto:

  • Apache MXNet resuelve uno de los mayores problemas de las plataformas de aprendizaje profundo existentes. El problema es que para utilizar plataformas de aprendizaje profundo, es necesario aprender otro sistema para una programación diferente.

  • Con la ayuda de Apache MXNet, los desarrolladores pueden aprovechar todas las capacidades de las GPU y la computación en la nube.

  • Apache MXNet puede acelerar cualquier cálculo numérico y pone un énfasis especial en acelerar el desarrollo y la implementación de DNN (redes neuronales profundas) a gran escala.

  • Proporciona a los usuarios las capacidades de programación tanto imperativa como simbólica.

Varias características

Si está buscando una biblioteca de aprendizaje profundo flexible para desarrollar rápidamente una investigación de aprendizaje profundo de vanguardia o una plataforma sólida para impulsar la carga de trabajo de producción, su búsqueda termina en Apache MXNet. Es por las siguientes características del mismo:

Entrenamiento distribuido

Ya sea que se trate de entrenamiento con múltiples gpu o con múltiples hosts con una eficiencia de escalado casi lineal, Apache MXNet permite a los desarrolladores aprovechar al máximo su hardware. MXNet también admite la integración con Horovod, que es un marco de aprendizaje profundo distribuido de código abierto creado en Uber.

Para esta integración, las siguientes son algunas de las API distribuidas comunes definidas en Horovod:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

En este sentido, MXNet nos ofrece las siguientes capacidades:

  • Device Placement - Con la ayuda de MXNet podemos especificar fácilmente cada estructura de datos (DS).

  • Automatic Differentiation - Apache MXNet automatiza la diferenciación, es decir, los cálculos derivados.

  • Multi-GPU training - MXNet nos permite lograr una eficiencia de escalamiento con la cantidad de GPU disponibles.

  • Optimized Predefined Layers - Podemos codificar nuestras propias capas en MXNet, así como también optimizar las capas predefinidas para la velocidad.

Hibridación

Apache MXNet ofrece a sus usuarios un front-end híbrido. Con la ayuda de la API Gluon Python, puede cerrar la brecha entre sus capacidades imperativas y simbólicas. Se puede hacer llamando a su funcionalidad de hibridación.

Computación más rápida

Las operaciones lineales como decenas o centenas de multiplicaciones de matrices son el cuello de botella computacional para redes neuronales profundas. Para resolver este cuello de botella, MXNet proporciona:

  • Cálculo numérico optimizado para GPU

  • Cálculo numérico optimizado para ecosistemas distribuidos

  • Automatización de flujos de trabajo comunes con la ayuda de la cual el estándar NN se puede expresar brevemente.

Enlaces de idioma

MXNet tiene una integración profunda en lenguajes de alto nivel como Python y R.También brinda soporte para otros lenguajes de programación como-

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

No necesitamos aprender ningún nuevo lenguaje de programación, en cambio MXNet, combinado con la función de hibridación, permite una transición excepcionalmente suave de Python a la implementación en el lenguaje de programación de nuestra elección.

Versión más reciente MXNet 1.6.0

Apache Software Foundation (ASF) lanzó la versión estable 1.6.0 de Apache MXNet el 21 de febrero de 2020 bajo la licencia Apache 2.0. Esta es la última versión de MXNet que admite Python 2, ya que la comunidad de MXNet votó a favor de dejar de admitir Python 2 en versiones posteriores. Echemos un vistazo a algunas de las nuevas características que ofrece esta versión a sus usuarios.

Interfaz compatible con NumPy

Debido a su flexibilidad y generalidad, NumPy ha sido ampliamente utilizado por profesionales, científicos y estudiantes de Machine Learning. Pero como sabemos que, los aceleradores de hardware de estos días, como las Unidades de procesamiento gráfico (GPU), se han asimilado cada vez más en varios kits de herramientas de aprendizaje automático (ML), los usuarios de NumPy, para aprovechar la velocidad de las GPU, deben cambiar a nuevos marcos. con diferente sintaxis.

Con MXNet 1.6.0, Apache MXNet avanza hacia una experiencia de programación compatible con NumPy. La nueva interfaz proporciona una usabilidad equivalente y expresividad para los profesionales familiarizados con la sintaxis de NumPy. Junto con eso, MXNet 1.6.0 también permite que el sistema Numpy existente utilice aceleradores de hardware como GPU para acelerar los cálculos a gran escala.

Integración con Apache TVM

Apache TVM, una pila de compiladores de aprendizaje profundo de extremo a extremo de código abierto para backends de hardware como CPU, GPU y aceleradores especializados, tiene como objetivo llenar la brecha entre los marcos de aprendizaje profundo centrados en la productividad y los backends de hardware orientados al rendimiento. . Con la última versión MXNet 1.6.0, los usuarios pueden aprovechar Apache (incubando) TVM para implementar núcleos de operador de alto rendimiento en el lenguaje de programación Python. Dos ventajas principales de esta nueva característica son las siguientes:

  • Simplifica el antiguo proceso de desarrollo basado en C ++.

  • Permite compartir la misma implementación en varios backend de hardware, como CPU, GPU, etc.

Mejoras en funciones existentes

Además de las características enumeradas anteriormente de MXNet 1.6.0, también proporciona algunas mejoras sobre las características existentes. Las mejoras son las siguientes:

Agrupación de operaciones basadas en elementos para GPU

Como sabemos, el rendimiento de las operaciones basadas en elementos es el ancho de banda de la memoria y esa es la razón, encadenar tales operaciones puede reducir el rendimiento general. Apache MXNet 1.6.0 realiza una fusión de operaciones por elementos, que en realidad genera operaciones fusionadas justo a tiempo cuando es posible. Esta fusión de operaciones por elementos también reduce las necesidades de almacenamiento y mejora el rendimiento general.

Simplificando expresiones comunes

MXNet 1.6.0 elimina las expresiones redundantes y simplifica las expresiones comunes. Esta mejora también mejora el uso de la memoria y el tiempo total de ejecución.

Optimizaciones

MXNet 1.6.0 también proporciona varias optimizaciones a las funciones y operadores existentes, que son las siguientes:

  • Precisión mixta automática

  • API Gluon Fit

  • MKL-DNN

  • Soporte de tensor grande

  • TensorRT integración

  • Soporte de gradiente de orden superior

  • Operators

  • Perfilador de rendimiento del operador

  • Importación / exportación ONNX

  • Mejoras en las API de Gluon

  • Mejoras en las API de símbolos

  • Más de 100 correcciones de errores