Voltar para Notícias para desenvolvedores

Summer of open source: building more efficient AI with PyTorch

20 de setembro de 2022PorSuraj Subramanian

Observação: agradecimentos especiais a Less Wright, engenheiro parceiro do Meta AI, por ter revisado a publicação e compartilhado as suas reflexões.

Esta publicação sobre a criação de inteligência artificial eficiente é a segunda da série "Summer of Open Source". Esta série busca oferecer diversos recursos úteis e conteúdo de aprendizado nas áreas com projetos de código aberto que geram impacto dentro e fora da Meta. Acompanhe o nosso trabalho à medida que exploramos outras áreas em que o Meta Open Source pretende impulsionar o setor com ferramentas inovadoras e dimensionáveis.

PyTorch: de tecnologia fundadora a fundação

Desde o seu lançamento em 2016, o PyTorch vem sendo muito usado na comunidade de aprendizado profundo. Suas origens de pesquisa estão sendo expandidas de forma consistente para aplicá-lo em cenários de produção. Em um momento importante para o aprendizado de máquina e a inteligência artificial, no qual diferentes métodos e casos de uso de modelos de inteligência artificial continuam se expandindo, o PyTorch iniciou um novo capítulo da sua história evoluindo para a PyTorch Foundation, que é independente e parte da Linux Foundation. A fundação é composta por um comitê diretivo diverso que será ampliado ao longo do tempo. Atualmente, a fundação inclui representantes da AMD, Amazon Web Services, Google Cloud, Microsoft Azure e Nvidia. A missão inclui promover a adoção de ferramentas de inteligência artificial em projetos de fornecedores neutros e tornar as ferramentas, as biblioteca e outros componentes em código aberto acessíveis para todos. A transição para fundação também permitirá que o PyTorch e a comunidade de código aberto continuem a evolução de protótipo para produção de inteligência artificial e aprendizado de máquina.

Simplificando os processos de inteligência artificial com o código aberto da Meta

O PyTorch exemplifica bem o poder do código aberto. Sendo uma das primeiras estruturas de aprendizado profundo em código aberto, o PyTorch possibilitou que pessoas em diferentes disciplinas fizessem experiências com aprendizado profundo e colocassem em prática o trabalho em campos diversos. O PyTorch é compatível com iniciativas desde experimentos para aplicação de pesquisa, passando pelo desenvolvimento de carros autônomos, até radares de penetração no solo. Esses são só alguns exemplos das aplicações mais recentes. Unir uma biblioteca versátil com ferramentas de inteligência artificial à comunidade de código aberto possibilita a capacidade de iterar e adaptar a tecnologia em escala para diferentes funções.

Como a inteligência artificial está sendo implementada de forma mais ampla, os modelos estão se expandindo para administrar problemas mais complexos. Isso também significa que os recursos necessários para treinar os modelos aumentaram substancialmente. Felizmente, muitas pessoas na comunidade de desenvolvedores reconhecem a necessidade de os modelos usarem menos recursos, tanto na perspectiva prática quanto na ambiental. Esta publicação abordará por que a quantização e outros tipos de modelo de compressão podem ser catalisadores para a eficiência da inteligência artificial.

Estabelecendo uma linha de base para uso do PyTorch

A maior parte desta publicação explora recursos intermediários e avançados do PyTorch. Caso você seja iniciante e queira dar os primeiros passos, ou seja um especialista usando outra biblioteca, é melhor começar pelos fundamentos. Confira este guia do PyTorch para iniciantes, que inclui a introdução a um fluxo completo de aprendizado de máquina usando o conjunto de dados Fashion MNIST.

Estes são alguns recursos para você conferir caso seja iniciante no PyTorch:

  • Community Stories: conheça os impactos do Pytorch em diferentes setores, como agricultura, educação, viagens e muito mais.
  • PyTorch Beginner Series: explore uma lista de reprodução com vídeos sobre técnicas fundamentais, incluindo os primeiros passos com tensores, a criação de modelos, bem como o treinamento e a inferência do PyTorch.

Quantização: aplicando técnicas consolidadas de inteligência artificial

Há diversos caminhos para tornar a inteligência artificial mais eficiente. A fim de fazer a otimização para inteligência artificial, o codesign de hardware e software pode ser eficaz. Porém, soluções com hardware-software personalizado custam tempo e recursos para serem desenvolvidas. A criação de arquiteturas menores e mais rápidas é outra forma de alcançar a eficiência. Entretanto, elas sofrem perda de precisão em comparação com grandes modelos, pelo menos por enquanto. Uma abordagem mais simples é buscar formas de reduzir a quantidade de recursos necessários para treinar e exibir modelos existentes. No PyTorch, uma forma de fazer isso é por meio da compressão de modelo usando quantização.

A quantização é uma técnica matemática que tem sido usada para criar arquivos digitais de música com perda e converter sinais analógicos em digitais. Ao executar cálculos matemáticos com precisão reduzida, a quantização possibilita melhor desempenho em diversas plataformas de hardware. Por que usar a quantização para melhorar a eficiência da inteligência artificial? Em alguns casos, os resultados indicam que usar essa técnica relativamente simples pode melhorar o desempenho (em 2 a 4 vezes) de inferência do modelo.

No geral, os parâmetros que compõem um modelo de aprendizado profundo são números decimais com precisão de ponto flutuante. Cada parâmetro usa 16 ou 32 bits de memória. Na quantização, os números são convertidos em INT4 ou INT8, ocupando somente 4 ou 8 bits. Isso reduz a quantidade de memória exigida pelos modelos. Além disso, os fabricantes de chip incluem a aritmética especial que torna as operações com números inteiros mais rápidas do que as com decimais.

Há três métodos de quantização que podem ser usados para treinar modelos: dinâmico, estático e quantize-aware training (QAT). Uma visão geral dos benefícios e dos pontos fracos pode ser vista na tabela a seguir. Para aprender a implementar cada um dos modelos nos fluxos de trabalho de inteligência artificial, consulte a publicação de blog Practical Quantization in PyTorch.

Método de quantização

Benefícios

Pontos fracos

Dinâmico

  • Fácil de usar com somente uma chamada de API
  • Melhor no descompasso de distribuição, trazendo mais precisão
  • Bom funcionamento com modelos Transformer e memória longa de curto prazo (LSTM, pelas iniciais em inglês)

Sobrecarga adicional em todas as etapas percorridas

Estático (também conhecido como PTQ)

  • Inferência mais rápida do que na quantização dinâmica devido à eliminação da sobrecarga

Talvez precise ser recalibrado para descompasso de distribuição

Quantize-Aware Training (QAT)

  • Mais preciso que a quantização estática
  • Com inferência mais rápida que a dinâmica

Alto custo computacional

Recursos adicionais para acelerar o fluxo de trabalho de inteligência artificial

A quantização não é a única maneira de tornar a inteligência artificial do PyTorch mais eficiente. Os recursos são atualizados regularmente. Além disso, estas são outras formas de melhorar os fluxos de trabalho de inteligência artificial com o PyTorch:

  • Modo de inferência: caso você esteja usando o código para executar inferência, esse modo pode ser usado para escrever o código do PyTorch. Ele altera algumas das suposições ao trabalhar com tensores para acelerar a inferência. Ao constatar que você não usará tensores para determinados aplicativos mais tarde (nesse caso, o autograd), o PyTorch se ajusta para executar o código mais rapidamente nesses cenários específicos.

  • Baixa precisão: a quantização funciona somente no momento de inferência, ou seja, depois de você ter treinado o modelo. No processo de treinamento, o PyTorch usa o treinamento de AMP para decidir o melhor formato com base nos tensores usados (FP16, FP32 ou BF16). Há diversas vantagens no aprendizado profundo de baixa precisão. Ele pode ajudar a reduzir o tamanho do modelo, a memória exigida para o treinamento e a potência necessária para a execução. Para saber mais, consulte este tutorial sobre o uso de AMP com GPUs em CUDA.

  • Channels-last: em relação aos modelos de visão, o NHWC (também conhecido como channels-last) é um formato de memória para tensor mais rápido no PyTorch. O armazenamento de dados no formato channels-last acelera as operações no PyTorch. A formatação dos tensores de entrada como channels-last reduz a sobrecarga necessária para conversão entre diferentes tipos de formato, o que acelera a inferência.

  • Otimização de inferência: esse protótipo do TorchScript implementa algumas otimizações genéricas que aceleram os modelos em todos os ambientes e pode preparar os modelos para inferência por meio de configurações específicas da versão. Neste momento, os principais casos de uso incluem modelos de visão em CPUs (e GPUs). Considerando que esse é um protótipo, é possível que você enfrente alguns problemas. Caso isso aconteça, relate-os no repositório do PyTorch no GitHub.

Desbloqueando novas possibilidades no PyTorch

Os métodos inovadores para acelerar os fluxos de trabalho de inteligência artificial são explorados no blog do PyTorch. Nele, é possível acompanhar técnicas como o recente BetterTransformer, que aumenta em até duas vezes a aceleração e a taxa de transferência nos modelos Transformer em cenários comuns de execução. Caso você tenha interesse em implementar recursos específicos no PyTorch, é possível pesquisar por categorias (como otimização de modelo, treinamento distribuído e interpretabilidade) nesta página. Esta publicação é somente uma amostragem do quanto recursos como o PyTorch estão fazendo o código aberto e a inteligência artificial evoluírem.

Para ficar por dentro das novidades do Meta Open Source para inteligência artificial e aprendizado de máquina, acesse o site de código aberto, inscreva-se no canal do YouTube ou siga nosso perfil no Facebook, no Twitter e no LinkedIn.