Apache MXNet - Introdução

Este capítulo destaca os recursos do Apache MXNet e fala sobre a versão mais recente desta estrutura de software de aprendizado profundo.

O que é MXNet?

Apache MXNet é um poderoso instrumento de estrutura de software de aprendizado profundo de código aberto que ajuda os desenvolvedores a construir, treinar e implantar modelos de aprendizado profundo. Nos últimos anos, da saúde ao transporte à fabricação e, de fato, em todos os aspectos de nossa vida diária, o impacto do aprendizado profundo foi generalizado. Hoje em dia, o aprendizado profundo é procurado por empresas para resolver alguns problemas difíceis, como reconhecimento facial, detecção de objetos, reconhecimento óptico de caracteres (OCR), reconhecimento de fala e tradução automática.

Essa é a razão pela qual o Apache MXNet é compatível com:

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

  • Provedores de nuvem pública, incluindo Amazon Web Services (AWS) e Microsoft Azure

  • Alguns grandes institutos de pesquisa como Carnegie Mellon, MIT, a Universidade de Washington e a Universidade de Ciência e Tecnologia de Hong Kong.

Por que Apache MXNet?

Existem várias plataformas de aprendizado profundo, como Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit, etc., então você pode se perguntar por que Apache MXNet? Vamos verificar alguns dos motivos por trás disso:

  • O Apache MXNet resolve um dos maiores problemas das plataformas de aprendizado profundo existentes. O problema é que, para usar plataformas de aprendizado profundo, é necessário aprender outro sistema para um tipo de programação diferente.

  • Com a ajuda do Apache MXNet, os desenvolvedores podem explorar todos os recursos das GPUs e também da computação em nuvem.

  • O Apache MXNet pode acelerar qualquer computação numérica e dá ênfase especial à aceleração do desenvolvimento e implantação de DNN (redes neurais profundas) em grande escala.

  • Ele fornece aos usuários os recursos de programação imperativa e simbólica.

Vários Recursos

Se você está procurando por uma biblioteca flexível de aprendizado profundo para desenvolver rapidamente pesquisas de aprendizado profundo de ponta ou uma plataforma robusta para impulsionar a carga de trabalho de produção, sua busca termina no Apache MXNet. É por causa das seguintes características:

Treinamento Distribuído

Quer seja um treinamento multi-gpu ou multi-host com eficiência de escalonamento quase linear, o Apache MXNet permite que os desenvolvedores aproveitem ao máximo seu hardware. MXNet também oferece suporte à integração com Horovod, que é uma estrutura de aprendizado profundo distribuída de código aberto criada na Uber.

Para esta integração, a seguir estão algumas das APIs distribuídas comuns definidas no Horovod:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

A este respeito, MXNet nos oferece os seguintes recursos:

  • Device Placement - Com a ajuda do MXNet podemos especificar facilmente cada estrutura de dados (DS).

  • Automatic Differentiation - Apache MXNet automatiza a diferenciação, ou seja, cálculos de derivadas.

  • Multi-GPU training - MXNet nos permite alcançar eficiência de escala com o número de GPUs disponíveis.

  • Optimized Predefined Layers - Podemos codificar nossas próprias camadas no MXNet, bem como as camadas predefinidas otimizadas para velocidade também.

Hibridização

O Apache MXNet fornece a seus usuários um front-end híbrido. Com a ajuda da API Gluon Python, ele pode preencher a lacuna entre seus recursos imperativos e simbólicos. Isso pode ser feito chamando sua funcionalidade de hibridização.

Computação mais rápida

As operações lineares como dezenas ou centenas de multiplicações de matrizes são o gargalo computacional das redes neurais profundas. Para resolver esse gargalo, a MXNet fornece -

  • Cálculo numérico otimizado para GPUs

  • Computação numérica otimizada para ecossistemas distribuídos

  • Automação de fluxos de trabalho comuns com a ajuda dos quais o NN padrão pode ser expresso brevemente.

Ligações de idioma

MXNet tem integração profunda em linguagens de alto nível como Python e R. Ele também fornece suporte para outras linguagens de programação, como-

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

Não precisamos aprender nenhuma nova linguagem de programação em vez do MXNet, combinado com o recurso de hibridização, permite uma transição excepcionalmente suave do Python para a implantação na linguagem de programação de nossa escolha.

Última versão MXNet 1.6.0

A Apache Software Foundation (ASF) lançou a versão estável 1.6.0 do Apache MXNet em 21 de fevereiro de 2020 sob a Licença Apache 2.0. Este é o último lançamento do MXNet para oferecer suporte ao Python 2, já que a comunidade MXNet votou para não oferecer mais suporte ao Python 2 em versões futuras. Vamos dar uma olhada em alguns dos novos recursos que esta versão traz para seus usuários.

Interface compatível com NumPy

Devido à sua flexibilidade e generalidade, o NumPy tem sido amplamente utilizado por profissionais, cientistas e estudantes de aprendizado de máquina. Mas, como sabemos, os aceleradores de hardware atuais, como unidades de processamento gráfico (GPUs), estão cada vez mais assimilados em vários kits de ferramentas de aprendizado de máquina (ML), os usuários de NumPy, para aproveitar a velocidade das GPUs, precisam mudar para novos frameworks com sintaxe diferente.

Com o MXNet 1.6.0, o Apache MXNet está se movendo em direção a uma experiência de programação compatível com NumPy. A nova interface fornece usabilidade equivalente, bem como expressividade para os profissionais familiarizados com a sintaxe NumPy. Junto com isso, o MXNet 1.6.0 também permite que o sistema Numpy existente utilize aceleradores de hardware como GPUs para acelerar cálculos em grande escala.

Integração com Apache TVM

Apache TVM, uma pilha de compilador de aprendizado profundo de código aberto para back-ends de hardware, como CPUs, GPUs e aceleradores especializados, visa preencher a lacuna entre as estruturas de aprendizado profundo focadas na produtividade e os back-ends de hardware orientados para o desempenho . Com a última versão MXNet 1.6.0, os usuários podem aproveitar o Apache (incubando) TVM para implementar kernels de operador de alto desempenho na linguagem de programação Python. Duas vantagens principais deste novo recurso estão a seguir -

  • Simplifica o antigo processo de desenvolvimento baseado em C ++.

  • Permite compartilhar a mesma implementação em vários back-end de hardware, como CPUs, GPUs, etc.

Melhorias em recursos existentes

Além dos recursos listados acima do MXNet 1.6.0, ele também fornece algumas melhorias em relação aos recursos existentes. As melhorias são as seguintes -

Operação de agrupamento de elementos para GPU

Como sabemos, o desempenho das operações elementares é a largura de banda da memória e essa é a razão, o encadeamento de tais operações pode reduzir o desempenho geral. O Apache MXNet 1.6.0 faz fusão de operação elementar, que realmente gera operações fundidas just-in-time como e quando possível. Essa fusão de operação por elemento também reduz as necessidades de armazenamento e melhora o desempenho geral.

Simplificando expressões comuns

MXNet 1.6.0 elimina as expressões redundantes e simplifica as expressões comuns. Esse aprimoramento também melhora o uso da memória e o tempo total de execução.

Otimizações

MXNet 1.6.0 também fornece várias otimizações para recursos e operadoras existentes, que são as seguintes:

  • Precisão mista automática

  • API Gluon Fit

  • MKL-DNN

  • Suporte de tensor grande

  • TensorRT integração

  • Suporte de gradiente de ordem superior

  • Operators

  • Perfilador de desempenho do operador

  • Importação / exportação ONNX

  • Melhorias nas APIs Gluon

  • Melhorias nas APIs de símbolo

  • Mais de 100 correções de bugs