Estratégias de otimização de modelos de deep learning

https://www.morningbrew.com/emerging-tech/stories/2020/07/10/nvidia-passes-intel-market-cap

Olá, pessoal. Tudo em paz? Eu espero que sim.

Hoje eu gostaria de compartilhar com vocês um pouco sobre as estratégias atuais de otimização de modelos de deep learning. Em termos de atividades que podemos realizar para esta atividade, eu destaco o projeto de modelo de rede, a compressão do modelo e o hardware (plataforma) como os principais esforços para se obter um hardware eficiente e um projeto de modelo DNN.

Existem muitas pesquisas, também, sobre técnicas que redimensionam os modelos, tais como pruning (https://jacobgil.github.io/deeplearning/pruning-deep-learning) e quantization (https://medium.com/@joel_34050/quantization-in-deep-learning-478417eab72b). O Pytorch mesmo já disponibiliza ferramentas para este tipo de otimização (https://pytorch.org/tutorials/intermediate/pruning_tutorial.html). Mas, por agora, eu falarei um pouco sobre modelos e ferramentas.

Projeto de modelo de rede

Ao projetar modelos DNN para dispositivos com restrição de recursos, os pesquisadores de aprendizado de máquina frequentemente se concentram em projetar modelos com um número reduzido de parâmetros no modelo DNN, reduzindo assim a memória e a latência de execução, ao mesmo tempo que visa preservar a alta precisão. A ideia principal aqui é reduzir o número de parâmetros no modelo DNN como uma possível solução para reduzir a memória e a latência de execução, visando preservar a alta precisão.

O poderoso YOLO tem uma versão chamada de Tiny YOLO e é capaz de funcionar em dispositivos com recursos limitados, porém a precisão/acurácia do modelo é afetada e o sistema perde qualidade de detecção. Existe um trade off a ser trabalhado aqui. Vocês deverão avaliar se a acurácia obtida com a versão Tiny é suficiente para o seu negócio. No entanto, não só existe a versão Tiny YOLO para testar e outras arquiteturas podem ser avaliadas para o seu problema. Por exemplo:

  1. Training-Time-Friendly Network for Real-Time Object Detection (TTFNet): arquitetura desenvolvida para acelerar o treinamento do modelo e obter boa acurácia.
  2. Cross Stage Partial Networks (CSPNet): CSPNet visa alcançar uma combinação de gradiente mais rica, mantendo os cálculos baixos, reduzindo os cálculos na arquitetura.
  3. Efficient Yolo — A Lightweight Model For Embedded Deep Learning Object Detection: Esta é uma versão de otimização YOLO que usa técnicas de esquemas de poda para melhorar a latência e manter a precisão da detecção em um alto nível.
  4. Tiny-DSOD: O Tiny-DSOD tenta lidar com a compensação entre a precisão da detecção e o consumo de recursos de computação. Ele considera a troca de recursos e precisão para usos com restrição de recursos durante o projeto de toda a estrutura de detecção de objetos.

Compressão do modelo

Já sabemos que existem algumas abordagens de redução da própria arquitetura (Tiny YOLO, por exemplo). Mas os modelos DNN também podem ser compactados, sacrificando uma pequena perda de precisão em comparação com o modelo original e existem vários métodos de compactação de modelos populares como quantização de parâmetros, poda de parâmetros e destilação de conhecimento. Neste caminho, eu destaco algumas abordagens como o uso de tecnologias que utilizam da força das GPU e tecnologias que apostam na força das CPU. Começaremos pela abordagem que eu acredito ser a melhor para a atualidade.

https://blog.tensorflow.org/2018/04/speed-up-tensorflow-inference-on-gpus-tensorRT.html

TensorRT é um SDK da NVIDIA para inferência de aprendizado profundo de alto desempenho e inclui um otimizador de inferência e tempo de execução que oferece baixa latência e alto rendimento para aplicativos — principalmente aplicativos de execução em tempo real. O TensorRT está disponível na linguagem Python e C++.

A NVIDIA dispõe de um conjunto de ferramentas muito interessantes e tem investido muito no seguimento de otimização com a família NVIDIA Jetson. (https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/). Eu tenho acompanhado o avanço desses produtos e sou muito fã desses dispositivos. Ah… tem outra coisa muito relevante aqui: a NVIDIA também disponibiliza cursos gratuitos (e outros não) sobre as suas tecnologias. Eu sou um consumidor assíduo da sua plataforma de ensino e a indico fortemente.

https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/

A ideia da NVIDIA é popularizar as suas tecnologias e, no início deste ano, eles lançaram uma versão de custo/benefício bem interessante para quem deseja começar e até mesmo para quem já tem experiência com o desenvolvimento para GPU chamada Jetson Nano 2GB Developer Kit (https://developer.nvidia.com/embedded/jetson-nano-2gb-developer-kit). Ele possui uma GPU de 128-core NVIDIA Maxwell™, com CPU Quad-core ARM® A57 @1.43GHz e memória de 2 GB 64-bit LPDDR4 25.6GB/s, legal né?

Todas as outras versões da família Jetson estão disponíveis aqui (https://developer.nvidia.com/embedded/jetson-developer-kits)

https://software.intel.com/content/www/us/en/develop/articles/introduction-to-intel-deep-learning-boost-on-second-generation-intel-xeon-scalable.html

No contexto de otimização de modelos de deep learning em CPU, o meu destaque vai, sem dúvida, para a Intel. Eles vêem trabalhando em uma abordagem diferente da NVIDIA e, ao longo dos anos, eles utilizaram todo o seu know-how em desenvolvimento de CPU para criar a Intel DL Boost (https://www.intel.com/content/www/us/en/artificial-intelligence/posts/increasing-ai-performance-intel-dlboost.html#gs.sefaro).

O Intel DL Boost é um grupo de recursos de aceleração introduzidos em aos seus processadores escaláveis Intel® Xeon® de 2ª geração que fornece aumentos significativos de desempenho para aplicativos de inferência desenvolvidos com as principais estruturas de deep learning (PyTorch, TensorFlow, MXNet, PaddlePaddle, e Caffe).

Esse ganho de desempenho é possível graças à associação dos 512 bits nas instruções do Intel® Advanced Vector Extensions 512 (Intel® AVX-512) e do Vector Neural Network Instructions (VNNI) (https://iq.opengenus.org/avx512-vnni/).

Algumas empresas têm usufruído desse princípio e desenvolvido frameworks de otimização de modelos de deep learning que possuem resultados comparáveis aos resultados obtidos com o TensorRT. Eu destaco o trabalho da Neural Magic (https://neuralmagic.com/).

Considerações por agora…

Eu tenho trabalhado em projetos de otimização de modelos de deep learning e até mesmo projetado novas arquiteturas para problemas específicos. E eu lhe digo: é muito instigante e complexa as atividades que envolvem essa área. No entanto, no contexto de dispositivos, o trabalho apenas começou.

Se vocês me perguntarem qual das duas tecnologias eu apostaria, eu lhes responderia que na tecnologia que atua sobre GPU. Eu venho testando essas e outras abordagens de otimização e os resultados da GPU são superiores às demais abordagens. Além de que o custo dos dispositivos da família Jetson é bem melhor do que as tecnologias da Intel. Ok… ok… eu sei que existem os sticks da Intel também, mas mesmo assim eles não entregam o mesmo resultados da família Jetson.

Então é isso. Espero que vocês tenham gostado.

Senior Computer Vision Data Scientist at Conception Ro-Main (Quebec — CA). DSc in Computer Science. MTAC Brazil. https://github.com/adrianosantospb

Senior Computer Vision Data Scientist at Conception Ro-Main (Quebec — CA). DSc in Computer Science. MTAC Brazil. https://github.com/adrianosantospb