Desenvolvimento

29 mar, 2019

Horovod adiciona suporte para PySpark e Apache MXNet e recursos adicionais para treinamento mais rápido

100 visualizações
Publicidade

Horovod, uma estrutura de aprendizagem profunda distribuída criada pela Uber, torna a aprendizagem profunda distribuída rápida e fácil de usar. O Horovod melhora a velocidade, a escala e a alocação de recursos para o treinamento de modelos de aprendizagem de máquina (ML) com o TensorFlow, o Keras, o PyTorch e o Apache MXNet.

O LF Deep Learning, um projeto da Linux Foundation que apoia e sustenta inovações de código aberto em inteligência artificial e aprendizagem de máquina, aceitou o Horovod como um de seus projetos hospedados em dezembro de 2018.

Como o projeto foi aceito como hospedado, contribuições adicionais e colaboração além da Uber ocorreram imediatamente devido ao ambiente neutro da LF Deep Learning, à governança aberta e ao conjunto de facilitadores que a fundação ofereceu ao projeto.

As atualizações desta última versão melhoram o Horovod de três maneiras principais: adicionando suporte e integração para mais frameworks, aprimorando os recursos existentes e preparando o framework para as mudanças que vêm com o TensorFlow 2.0.

Combinadas, essas novas funcionalidades e recursos tornam o Horovod mais fácil, mais rápido e mais versátil para sua crescente base de usuários, incluindo a NVIDIA e o Laboratório Nacional de Oak Ridge.

O Horovod também foi integrado a vários ecossistemas de aprendizagem profunda, incluindo AWS, Google, Azure e IBM Watson.

Com este lançamento, uma série de novos casos de uso para o Horovod foi adicionada com o objetivo de tornar o framework uma ferramenta mais versátil para o treinamento de modelos de aprendizagem profunda.

À medida que a lista de integrações e frameworks suportados cresce, os usuários podem aproveitar o Horovod para acelerar um número maior de modelos de código aberto e usar as mesmas técnicas em vários frameworks.

Suporte a PySpark e Petastorm

Capaz de lidar com um grande volume de dados, o Apache Spark é usado em muitos ambientes de aprendizagem de máquina.

A facilidade de uso, os recursos de processamento na memória, a análise quase em tempo real e o rico conjunto de opções de integração, como o Spark MLlib e o Spark SQL, tornaram o Spark uma escolha popular.

Devido à sua escalabilidade e facilidade de uso, a Horovod recebeu o interesse de comunidades de aprendizagem de máquina mais amplas, baseadas em Python, incluindo o Apache Spark. Com o lançamento do suporte e integração do PySpark, o Horovod se torna útil para um conjunto maior de usuários.

Um fluxo de trabalho típico para o PySpark antes do Horovod era fazer a preparação de dados no PySpark, salvar os resultados no armazenamento intermediário, executar um trabalho de treinamento de aprendizagem profunda diferente usando uma solução de cluster diferente, exportar o modelo treinado e executar avaliação no PySpark. A integração do Horovod com o PySpark permite realizar todas essas etapas no mesmo ambiente.

Para facilitar a transferência de dados entre o PySpark e o Horovod nos clusters do Spark, o Horovod conta com o Petastorm, uma biblioteca de acesso a dados de código aberto para aprendizagem profunda desenvolvida pela Uber Advanced Technologies Group (ATG).

O Petastorm, de fonte aberta desde setembro de 2018, permite treinamento em uma única máquina ou distribuição e avaliação de modelos de aprendizagem profunda diretamente de conjuntos de dados de vários terabytes.

Um típico caso de uso do Petastorm envolve pré-processar os dados no PySpark, gravá-los no armazenamento no Apache Parquet, um formato de armazenamento colunar altamente eficiente e ler os dados no TensorFlow ou no PyTorch usando o Petastorm.

O Apache Spark e o Petastorm também são usados ​​em alguns aplicativos internamente na Uber. Portanto, estender o suporte do Horovod para incluir o PySpark e o Petastorm foi uma etapa natural no processo de tornar o Horovod uma ferramenta mais versátil.

Suporte a Apache MXNet

O Apache MXNet (incubação) é um framework de aprendizagem profunda de código aberto que facilita o treinamento mais flexível e eficiente da rede neural.

A Amazon é uma grande colaboradora do Horovod e do MXNet e suporta nativamente ambos os frameworks nas instâncias do Amazon EC2 P3 e no Amazon SageMaker.

Como seu suporte recente ao PySpark, a integração da Horovod com o MXNet é parte de um esforço maior para tornar o Horovod disponível para uma comunidade mais ampla, expandindo ainda mais o acesso a um treinamento de modelo mais rápido e fácil.

Auto ajuste

A terceira atualização desta última versão é a introdução da Horovod de uma versão alfa de auto ajuste. Nesta versão, o ajuste automático/auto ajuste é opcional, mas será ativado como padrão em versões futuras.

O Horovod suporta vários parâmetros internos que podem ser ajustados para melhorar o desempenho de variações em hardware e arquitetura de modelo.

Tais parâmetros incluem o limiar do buffer de fusão para determinar quantos tensores podem ser agrupados em um único allreduce, tempo de ciclo para controlar a frequência de lotes allreduce e allreduce hierárquico como uma alternativa para allreduce de anel único quando o número de hosts se torna muito grande.

Encontrar os valores corretos para esses parâmetros pode resultar em melhorias de desempenho de até 30%. No entanto, tentar parâmetros diferentes manualmente é um exercício demorado em tentativa e erro.

O sistema de ajuste automático de Horovod elimina o trabalho de adivinhação explorando e selecionando dinamicamente os melhores valores de parâmetros internos usando a otimização bayesiana.

O ajuste automático automatiza o processo manual de tentar diferentes opções e valores de parâmetros para identificar a melhor configuração, que deve ser repetida se houver alterações no hardware, na escala ou nos modelos.

Cortesia de automação, o ajuste automático torna a otimização de parâmetros mais eficiente para um treinamento de modelo mais rápido.

Incorporando melhorias

A incorporação é comumente usada em casos de uso de aprendizagem de máquina envolvendo processamento de linguagem natural (NLP) e aprendizagem a partir de dados tabulares.

No armazenamento de dados da Uber, os dados de viagens da Uber são armazenados como dados tabulares que possuem alguns limites categóricos. Em um caso de uso como o da Uber, o número de incorporações e o tamanho das incorporações serão redimensionados.

Com este último lançamento, a Horovod aprimorou sua capacidade de dimensionar modelos de aprendizagem profunda que fazem uso intenso de incorporações, como Transformer e BERT.

Além disso, essas melhorias na incorporação facilitam a incorporação de grandes gradientes, bem como a fusão de pequenos gradientes de incorporação, permitindo que um número maior de incorporações processe as operações mais rapidamente.

Suporte de execução interessada em TensorFlow

Execução interessada será o modo padrão no TensorFlow 2.0. Execução interessada permite que os desenvolvedores criem modelos em um ambiente de programação imperativo, onde as operações são avaliadas imediatamente e o resultado é retornado como valores reais. Execução interessada elimina a necessidade de criar sessões e trabalhar com gráficos.

Com o suporte da execução interessada para modelos dinâmicos, a avaliação e a depuração de modelo são facilitadas e mais rápidas. A execução interessada também torna o trabalho com o TensorFlow mais intuitivo para desenvolvedores menos experientes.

No passado, rodar Horovod com uma execução interessada significava calcular cada gradiente de tensor através de todos os trabalhadores sequencialmente, sem qualquer lote ou paralelismo de tensor. Com o lançamento mais recente, a execução interessada é totalmente suportada.

Os lotes de tensor com execução interessada melhoraram o desempenho em mais de 6x em nossos experimentos. Além disso, os usuários podem agora utilizar uma implementação distribuída do GradientTape do TensorFlow para registrar operações de diferenciação automática.

Treinamento de precisão mista

Precisão mista é o uso combinado de diferentes precisões numéricas em um método computacional. Usando precisão menor que FP32 reduz os requisitos de memória usando tensores menores, permitindo a implantação de redes maiores.

Além disso, as transferências de dados levam menos tempo e o desempenho computacional aumenta drasticamente. As GPUs com Tensor Cores suportam precisão mista e permitem que os usuários aproveitem os benefícios do menor uso de memória e transferências de dados mais rápidas.

O treinamento de precisão misto de redes neurais profundas atinge dois objetivos principais:

  • Diminui a quantidade necessária de memória, permitindo o treinamento de modelos maiores ou treinamento com mini-lotes maiores.
  • Reduz o tempo de treinamento ou inferência reduzindo os recursos necessários usando aritmética de menor precisão.

No passado, o treinamento de precisão mista costumava quebrar a lógica de fusão de Horovod, uma vez que a sequência dos tensores FP16 seria frequentemente quebrada pelos tensores FP32, e os tensores de diferentes precisões não poderiam participar de uma única transação de fusão.

Com o lançamento mais recente, a NVIDIA contribuiu com uma melhoria para a lógica de fusão de tensor que permite que sequências de tensor FP16 e FP32 sejam processadas independentemente por meio de um mecanismo de look-ahead. Vimos uma melhoria de desempenho de até 26% com essa mudança.

Curioso sobre como o Horovod pode tornar seu treinamento de modelo mais rápido e escalável? Confira essas novas atualizações e experimente o framework por conta própria, e não se esqueça de se juntar às listas de discussões técnica e de anúncios da Deep Learning Foundation sobre o Horovod.

***

Este artigo é do Uber Engineering. Ele foi escrito por Carsten Jacobsen. A tradução foi feita pela Redação iMasters com autorização. Você pode conferir o original em: https://eng.uber.com/horovod-pyspark-apache-mxnet-support/