O Apache MXNet é uma estrutura de aprendizado profundo leve, flexível e altamente escalável compatível com modelos de aprendizado profundo avançados, como redes neurais convolucionais (CNNs) e redes de memória de longo e curto prazo (LSTMs). As raízes da estrutura estão no meio acadêmico e ela foi criada com a colaboração e contribuições de pesquisadores em diversas universidades importantes. A estrutura foi projetada para desempenho ideal no processamento de visão, fala e linguagem por computador e em modelos de compreensão generativos, redes neurais concorrentes e redes neurais recorrentes.
O MXNet permite definir, treinar e implantar redes em uma grande variedade de casos de uso, de infraestruturas massivas de nuvem a dispositivos móveis e conectados. Ele oferece um ambiente muito flexível, compatível com diversas linguagens comuns e capaz de utilizar construções de programação imperativas e simbólicas. Além disso, o MXNet é bastante leve. Com isso, é possível aumentar a escala para diversas GPUs e máquinas com grande eficiência, o que é vantajoso no treinamento de grandes conjuntos de dados na nuvem.
Você pode começar a usar facilmente o Apache MXNet na AWS executando a AMI do AWS Deep Learning, disponível para Amazon Linux e Ubuntu.
Contribua para o projeto Apache MXNet
Envolva-se no GitHubObtenha código de exemplo, anotações e conteúdo de tutoriais na página do projeto no GitHub.
Programabilidade
Simplifique as definições de rede e use as linguagens que você já conhece
Portabilidade
O uso eficiente de memória permite a execução de modelos em uma grande variedade de dispositivos e plataformas
Escalabilidade
Capacidade de aumentar a escala para várias GPUs e hosts para treinar rapidamente modelos grandes e sofisticados
O Apache MXNet permite combinar linguagens imperativas e simbólicas. Na verdade, o nome MXNet vem de "mixed networks" (redes combinadas). Isso significa que é possível manipular camadas de rede com a otimização de executores simbólicos, juntamente com os recursos flexíveis de linguagens imperativas como loops de iteração e atualizações de parâmetros. Com essa natureza mista, o MXNet oferece um conjunto exclusivo de recursos para facilitar o trabalho no ambiente multicamada e complexo dos modelos de aprendizado profundo.
import mxnet as mx
a = mx.nd.zeros((100, 50))
b = mx.nd.ones((100, 50))
c = a + b
c += 1
print(c)
import mxnet as mx
net = mx.symbol.Variable('data')
net = mx.symbol.FullyConnected(data=net, num_hidden=128)
net = mx.symbol.SoftmaxOutput(data=net)
texec = mx.module.Module(net)
texec.forward(data=c)
texec.backward()
Além disso, o MXNet é compatível com um amplo conjunto de linguagens de programação no front-end da estrutura, incluindo C++, JavaScript, Python, r, Matlab, Julia, Scala e Go. Assim, é possível usar todas as linguagens que você já conhece para começar a usar imediatamente o aprendizado profundo. No back-end, o código é sempre compilado em C++ para oferecer desempenho consistente, independentemente da linguagem utilizada no front-end.
À medida que as aplicações de inteligência artificial são cada vez mais incorporadas ao cotidiano, cresce a importância da possibilidade de implantação em uma grande variedade de dispositivos. Isso é especialmente verdadeiro na implantação de IA em dispositivos móveis e conectados aos pontos de presença, onde o armazenamento pode ter alto custo.
Os modelos do Apache MXNet podem ser implementados com quantidades bem reduzidas de memória. Por exemplo, uma rede de mil camadas exige menos de 4 GB de armazenamento. Além disso, a estrutura é portátil entre plataformas. A biblioteca principal (com todas as dependências) cabe em um único arquivo de código-fonte C++ e pode ser compilada para iOS e Android. Na verdade, usando JavaScript, ela pode até ser executada em um navegador. Essa flexibilidade significas que você pode implantar os modelos em um conjunto bastante diversificado de casos de uso para alcançar o maior número possível de usuários.
O Apache MXNet é baseado em um programador de dependências dinâmico que analisa as dependências de dados em código serial e paraleliza automaticamente operações declarativas e imperativas em tempo real. Além disso, uma camada de otimização gráfica permite que execuções declarativas executem rapidamente e façam uso eficiente da memória.
Essa paralelização automática proporciona uma alta eficiência ao aumento de escala do MXNet. Por exemplo, treinamos um algoritmo de análise de imagens popular, o Inception v3, usando um número crescente de instancias EC2 P2 com GPUs para avaliar a eficiência do MXNet.
A linha vermelha representa a eficiência perfeita, onde é obtido o dobro da velocidade para o dobro de número de GPUs. O throughput do MXNet cresceu a uma taxa praticamente igual ao número de GPUs usadas. Em uma única instância com 16 GPUs, o Apache MXNet consegue uma eficiência de 91%.
No entanto, para redes grandes, pode ser necessário aumentar a escala para clusters de instâncias P2. A execução do mesmo teste nesse cenário proporciona apenas uma pequena redução de eficiência com o crescimento exponencial do número de GPUs.
Mas não acredite apenas em nossa palavra. Um dos benefícios da nuvem é que você mesmo pode executar seus testes com seu próprio código. Nossos testes comparativos foram disponibilizados publicamente no GitHub. Recomendamos que você veja os detalhes para ver como os testes funcionam e execute esses testes para obter seus próprios resultados. Você também pode usar o nosso modelo do AWS CloudFormation para obter rapidamente a capacidade necessária.
É fácil começar a usar o Apache MXNet na AWS: acesse o AWS Marketplace e execute a AMI do AWS Deep Learning.
A AMI fornece gratuitamente a mais recente compilação estável do MXNet e várias outras estruturas populares de aprendizado profundo. Pague apenas pelo tempo de EC2 consumido.

