ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

ByteDance economiza até 60% em custos de inferência, reduzindo a latência e aumentando o throughput usando o AWS Inferentia

Este é um post de blog convidado co-escrito com Minghui Yu e Jianzhe Xiao da Bytedance.

ByteDance é uma empresa de tecnologia que opera uma variedade de plataformas de conteúdo para informar, educar, entreter e inspirar pessoas em vários idiomas, culturas e geografias. Os usuários confiam e desfrutam de nossas plataformas de conteúdo por causa das experiências ricas, intuitivas e seguras que elas fornecem. Essas experiências são possibilitadas por nosso mecanismo de back-end de aprendizado de máquina (ML), com modelos de ML criados para moderação de conteúdo, pesquisa, recomendação, publicidade e novos efeitos visuais.

A equipe ByteDance AML (Applied Machine Learning) fornece sistemas de ML de alto desempenho, confiáveis ​​e escaláveis ​​e serviços de ML de ponta a ponta para os negócios da empresa. Estávamos pesquisando maneiras de otimizar nossos sistemas de inferência de ML para reduzir custos, sem aumentar os tempos de resposta. Quando a AWS foi lançada Inferência da AWS, um chip de inferência de ML de alto desempenho criado especificamente pela AWS, nos envolvemos com nossa equipe de contas da AWS para testar se o AWS Inferentia pode atender às nossas metas de otimização. Executamos várias provas de conceito, resultando em um custo de inferência até 60% menor em comparação com instâncias EC4 G2dn baseadas em GPU T4 e uma latência de inferência até 25% menor. Para obter essas economias de custos e melhorias de desempenho, decidimos implantar modelos baseados em AWS Inferentia Amazon Elastic Compute Nuvem (Amazon EC2) Instâncias Inf1 em produção.

O gráfico a seguir mostra a melhoria de latência para um de nossos modelos de detecção facial que foi implantado anteriormente em GPUs com Tensor RT. A latência média diminuiu 20% (de 50 milissegundos para 40 milissegundos) e a latência p99 diminuiu 25% (de 200 milissegundos para 150 milissegundos).

Nesta postagem, compartilhamos como economizamos nos custos de inferência, reduzindo as latências e aumentando o throughput usando o AWS Inferentia.

Em busca de computação econômica e de alto desempenho

A equipe ByteDance AML se concentra na pesquisa e implementação de sistemas ML de ponta e nos recursos de computação heterogêneos que eles exigem. Criamos sistemas de treinamento e inferência em larga escala para uma ampla variedade de modelos de recomendação, processamento de linguagem natural (PNL) e visão computacional (CV). Esses modelos são altamente complexos e processam uma enorme quantidade de dados das diversas plataformas de conteúdo que a ByteDance opera. A implantação desses modelos requer recursos de GPU significativos, seja na nuvem ou no local. Portanto, os custos de computação para esses sistemas de inferência são bastante altos.

Estávamos procurando reduzir esses custos sem afetar a taxa de transferência ou a latência. Queríamos a flexibilidade da nuvem e o ciclo de entrega mais rápido, que é muito mais curto do que o necessário para uma configuração local. E embora estivéssemos abertos para explorar novas opções para ML acelerado, também queríamos uma experiência de desenvolvedor perfeita.

Aprendemos com nossa equipe da AWS que as instâncias EC2 Inf1 baseadas em AWS Inferentia fornecem inferência de ML de alto desempenho com o menor custo por inferência na nuvem. Estávamos curiosos para explorá-los e descobrimos que eles eram adequados para nosso caso de uso, porque executamos aprendizado de máquina substancial em grandes quantidades de dados de imagem, objeto, fala e texto. Eles foram definitivamente adequados para nossos objetivos, porque pudemos obter grandes economias de custo devido à complexidade de nossos modelos e ao volume de previsões diárias. Além disso, o AWS Inferentia apresenta uma grande quantidade de memória no chip, que você pode usar para armazenar modelos grandes em cache em vez de armazená-los fora do chip. Reconhecemos que isso pode ter um impacto significativo na redução da latência de inferência porque os núcleos de processamento do AWS Inferentia, chamados NeuronCores, têm acesso de alta velocidade a modelos que são armazenados na memória do chip e não são limitados pela memória fora do chip largura de banda.

Por fim, depois de avaliar várias opções, escolhemos as instâncias EC2 Inf1 por sua melhor relação desempenho/preço em comparação com as instâncias G4dn e NVIDIA T4 no local. Entramos em um ciclo de iteração contínua com a equipe da AWS para obter os benefícios de preço e desempenho do Inf1.

Implantação de cargas de trabalho de inferência no AWS Inferentia

A introdução ao AWS Inferentia usando o AWS Neuron SDK envolveu duas fases: compilação do código do modelo e implantação em instâncias Inf1. Como é comum ao mover modelos de ML para qualquer nova infraestrutura, enfrentamos alguns desafios. Conseguimos superar esses desafios com diligência e suporte de nossa equipe da AWS. Nas seções a seguir, compartilhamos várias dicas e observações úteis com base em nossa experiência na implantação de cargas de trabalho de inferência no AWS Inferentia.

Modelo conformer para OCR

Nosso modelo conformador de reconhecimento óptico de caracteres (OCR) detecta e lê texto em imagens. Trabalhamos em várias otimizações para obter alto desempenho (QPS) para uma variedade de tamanhos de lote, mantendo a latência baixa. Algumas otimizações importantes são observadas abaixo:

  • Otimizações do compilador – Por padrão, o Inferentia funciona melhor em entradas com um comprimento de sequência fixo, o que representa um desafio, pois o comprimento dos dados textuais não é fixo. Para superar isso, dividimos nosso modelo em duas partes: um codificador e um decodificador. Compilamos esses dois submodelos separadamente e depois os mesclamos em um único modelo por meio do TorchScript. Ao executar o fluxo de controle do loop for nas CPUs, essa abordagem permitiu o suporte para comprimentos de sequência variáveis ​​no Inferentia.
  • Desempenho de convolução em profundidade – Encontramos um gargalo DMA na operação de convolução em profundidade, que é muito usada por nosso modelo de conformer. Trabalhamos em estreita colaboração com a equipe do AWS Neuron para identificar e resolver o gargalo de desempenho do acesso DMA, o que melhorou o desempenho dessa operação e melhorou o desempenho geral do nosso modelo de OCR.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Criamos duas novas variantes de modelo para otimizar nossa implantação no Inferentia:

  • Codificador/decodificador combinado e desenrolado – Em vez de usar um codificador e decodificador compilados independentemente, combinamos o codificador e um decodificador totalmente desenrolado em um único modelo e compilamos esse modelo como um único NEFF. Desenrolar o decodificador torna possível executar todo o fluxo de controle do decodificador no Inferentia sem usar nenhuma operação da CPU. Com essa abordagem, cada iteração do decodificador usa exatamente a quantidade de computação necessária para esse token. Essa abordagem melhora o desempenho porque reduzimos significativamente o excesso de computação que foi introduzido anteriormente pelas entradas de preenchimento. Além disso, nenhuma transferência de dados do Inferentia para a CPU é necessária entre as iterações do decodificador, o que reduz drasticamente o tempo de E/S. Esta versão do modelo não suporta parada antecipada.
  • Decodificador desenrolado particionado – Semelhante ao modelo totalmente desenrolado combinado, esta variante do modelo desenrola várias iterações do decodificador e as compila como uma única execução (mas não inclui o codificador). Por exemplo, para um comprimento máximo de sequência de 75, podemos desenrolar o decodificador em 3 partições que calculam os tokens 1-25, 26-50 e 51-75. Em termos de E/S, isso também é significativamente mais rápido porque não precisamos transferir a saída do codificador uma vez a cada iteração. Em vez disso, as saídas são transferidas apenas uma vez por cada partição do decodificador. Esta versão do modelo oferece suporte à parada antecipada, mas apenas nos limites da partição. Os limites da partição podem ser ajustados para cada aplicativo específico para garantir que a maioria das solicitações execute apenas uma partição.

Para melhorar ainda mais o desempenho, fizemos as seguintes otimizações para reduzir o uso de memória ou melhorar a eficiência do acesso:

  • Deduplicação do tensor e cópias reduzidas – Esta é uma otimização do compilador que reduz significativamente o tamanho dos modelos desenrolados e o número de instruções/acesso à memória, reutilizando tensores para melhorar a eficiência do espaço.
  • Instruções reduzidas – Esta é uma otimização do compilador que é usada com a versão não preenchida do decodificador para reduzir significativamente o número total de instruções.
  • Desduplicação de vários núcleos – Esta é uma otimização de tempo de execução que é uma alternativa à desduplicação do tensor. Com esta opção, todos os modelos multicore serão significativamente mais eficientes em termos de espaço.

Modelo ResNet50 para classificação de imagens

O ResNet-50 é um modelo de aprendizado profundo pré-treinado para classificação de imagens. É uma Rede Neural Convolucional (CNN ou ConvNet) que é mais comumente aplicada para analisar imagens visuais. Usamos as seguintes técnicas para melhorar o desempenho deste modelo no Inferentia:

  • Transformação do modelo – Muitos dos modelos da ByteDance são exportados no formato ONNX, que o Inferentia atualmente não suporta nativamente. Para lidar com esses modelos ONNX, a equipe do AWS Neuron forneceu scripts para transformar nossos modelos do formato ONNX em modelos PyTorch, que podem ser compilados diretamente para o Inferentia usando o arch-neuron.
  • Otimização de desempenho – Trabalhamos de perto com o Neurônio AWS equipe para ajustar a heurística de agendamento no compilador para otimizar o desempenho de nossos modelos ResNet-50.

Modelo multimodal para moderação de conteúdo

Nosso modelo de aprendizado profundo multimodal é uma combinação de vários modelos separados. O tamanho deste modelo é relativamente grande, o que causou falhas no carregamento do modelo no Inferentia. A equipe do AWS Neuron resolveu com sucesso esse problema usando o compartilhamento de peso para reduzir o uso de memória do dispositivo. A equipe do Neuron lançou esse recurso de duplicação de peso na biblioteca Neuron libnrt e também aprimorou o Neuron Tools para métricas mais precisas. O recurso de eliminação de duplicação de peso em tempo de execução pode ser ativado definindo a seguinte variável de ambiente antes de executar a inferência:

NEURON_RT_MULTI_INSTANCE_SHARED_WEIGHTS=1

O Neuron SDK atualizado reduziu o consumo geral de memória de nossos modelos duplicados, o que nos permitiu implantar nosso modelo multimodal para inferência multinúcleo.

Migrando mais modelos para o AWS Inferentia

Na ByteDance, continuamos a implantar modelos inovadores de aprendizado profundo para oferecer experiências de usuário agradáveis ​​a quase 2 bilhões de usuários ativos mensais. Dada a grande escala em que operamos, estamos constantemente procurando maneiras de economizar custos e otimizar o desempenho. Continuaremos a migrar modelos para o AWS Inferentia para se beneficiar de seu alto desempenho e economia. Também queremos que a AWS lance mais tipos de instâncias baseadas em AWS Inferentia, como aquelas com mais vCPUs para tarefas de pré-processamento. No futuro, a ByteDance espera ver mais inovações em silício da AWS para oferecer o melhor desempenho de preço para aplicativos de ML.

Se estiver interessado em saber mais sobre como o AWS Inferentia pode ajudar você a economizar custos e otimizar o desempenho de seus aplicativos de inferência, visite o Instâncias do Amazon EC2 Inf1 página do produto.


Sobre os autores

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Minghui Yu é líder sênior da equipe de aprendizado de máquina para inferência na ByteDance. Sua área de foco é Aceleração de Computação AI e Sistema de Aprendizado de Máquina. Ele está muito interessado em computação heterogênea e arquitetura de computadores na era pós-Moore. Em seu tempo livre, ele gosta de basquete e tiro com arco.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jianzhe Xiao é um líder de equipe sênior de engenharia de software na equipe AML da ByteDance. Seu trabalho atual se concentra em ajudar a equipe de negócios a acelerar o processo de implantação do modelo e melhorar o desempenho de inferência do modelo. Fora do trabalho, ele gosta de tocar piano.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Tian Shi é Arquiteto de Soluções Sênior na AWS. Sua área de foco é análise de dados, aprendizado de máquina e sem servidor. Ele é apaixonado por ajudar os clientes a projetar e criar soluções confiáveis ​​e escaláveis ​​na nuvem. Nas horas vagas, gosta de nadar e ler.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jia Dong é gerente de soluções para clientes da AWS. Ela gosta de aprender sobre os serviços de IA/ML da AWS e de ajudar os clientes a atingir seus resultados de negócios criando soluções para eles. Fora do trabalho, Jia gosta de viajar, ioga e filmes.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jonathan Lunt é engenheiro de software na Amazon com foco no desenvolvimento de estruturas de ML. Ao longo de sua carreira, ele trabalhou em todas as funções de ciência de dados, incluindo desenvolvimento de modelo, implantação de infraestrutura e otimização específica de hardware.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Josué Hannan é engenheiro de aprendizado de máquina na Amazon. Ele trabalha na otimização de modelos de aprendizado profundo para visão computacional em larga escala e aplicativos de processamento de linguagem natural.

ByteDance economiza até 60% em custos de inferência enquanto reduz a latência e aumenta a produtividade usando AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Shruti Koparkar é gerente sênior de marketing de produtos da AWS. Ela ajuda os clientes a explorar, avaliar e adotar a infraestrutura de computação acelerada do EC2 para suas necessidades de aprendizado de máquina.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS