Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia

O mecanismo de busca de produtos da Amazon indexa bilhões de produtos, atende a centenas de milhões de clientes em todo o mundo e é um dos serviços mais usados ​​no mundo. A equipe do Amazon Search desenvolve tecnologia de aprendizado de máquina (ML) que capacita o Amazon.com motor de busca e ajuda os clientes a pesquisar sem esforço. Para oferecer uma ótima experiência ao cliente e operar na escala massiva exigida pela Amazon.com motor de busca, essa equipe está sempre procurando maneiras de construir sistemas mais econômicos com latência em tempo real e requisitos de taxa de transferência. A equipe explora constantemente hardware e compiladores otimizados para aprendizado profundo para acelerar o treinamento e a inferência de modelos, ao mesmo tempo em que reduz os custos operacionais em geral.

Neste post, descrevemos como o Amazon Search usa Inferência da AWS, um acelerador de alto desempenho desenvolvido pela AWS para acelerar cargas de trabalho de inferência de aprendizado profundo. A equipe executa inferência de ML de baixa latência com modelos de NLP baseados em Transformer em AWS Inferentia Amazon Elastic Compute Nuvem (Amazon EC2) Inf1 e economiza até 85% em custos de infraestrutura, mantendo um alto rendimento e desempenho de latência.

Aprendizado profundo para previsão de intenção de consulta e duplicatas

A pesquisa no Amazon Marketplace é um problema multitarefa e multimodal, lidando com várias entradas, como ASINs (Amazon Standard Identification Number, um número alfanumérico de 10 dígitos que identifica exclusivamente produtos), imagens de produtos, descrições textuais e consultas. Para criar uma experiência de usuário personalizada, as previsões de muitos modelos são usadas para diferentes aspectos da pesquisa. Isso é um desafio porque o sistema de busca possui milhares de modelos com dezenas de milhares de transações por segundo (TPS) no pico de carga. Nós nos concentramos em dois componentes dessa experiência:

  • Previsões duplicadas percebidas pelo cliente – Para mostrar a lista de produtos mais relevante que corresponde à consulta de um usuário, é importante identificar os produtos que os clientes têm dificuldade em diferenciar
  • Previsão de intenção de consulta – Para adaptar a página de pesquisa e o layout do produto para melhor atender ao que o cliente está procurando, é importante prever a intenção e o tipo de consulta do usuário (por exemplo, uma consulta relacionada a mídia, consulta de ajuda e outros tipos de consulta)

Ambas as previsões são feitas usando arquiteturas de modelo Transformer, ou seja, modelos baseados em BERT. Na verdade, ambos compartilham o mesmo modelo baseado em BERT como base, e cada um empilha uma cabeça de classificação/regressão no topo desse backbone.

A previsão duplicada recebe vários recursos textuais para um par de produtos avaliados como entradas (como tipo de produto, título, descrição e assim por diante) e é calculada periodicamente para grandes conjuntos de dados. Este modelo é treinado de ponta a ponta de forma multitarefa. Trabalhos de processamento do Amazon SageMaker são usados ​​para executar essas cargas de trabalho em lote periodicamente para automatizar sua inicialização e pagar apenas pelo tempo de processamento usado. Para este caso de uso de carga de trabalho em lote, o requisito de taxa de transferência de inferência foi de 8,800 TPS no total.

A previsão de intenção usa a consulta textual do usuário como entrada e é necessária em tempo real para atender dinamicamente o tráfego diário e aprimorar a experiência do usuário no Amazon Marketplace. O modelo é treinado em um objetivo de classificação multiclasse. Este modelo é então implantado em Serviço Amazon Elastic Container (Amazon ECS), que permite dimensionamento automático rápido e fácil definição e gerenciamento de implantação. Como este é um caso de uso em tempo real, exigia que a latência do P99 fosse inferior a 10 milissegundos para garantir uma experiência agradável ao usuário.

AWS Inferentia e o SDK do AWS Neuron

Instâncias EC2 Inf1 são desenvolvidos pelo AWS Inferentia, o primeiro acelerador de ML desenvolvido pela AWS para acelerar cargas de trabalho de inferência de aprendizado profundo. As instâncias Inf1 oferecem taxa de transferência até 2.3 vezes maior e custo por inferência até 70% menor do que instâncias EC2 baseadas em GPU comparáveis. Você pode continuar treinando seus modelos usando a estrutura de sua escolha (PyTorch, TensorFlow, MXNet) e implantá-los facilmente no AWS Inferentia para se beneficiar das otimizações de desempenho integradas. Você pode implantar uma ampla variedade de tipos de modelo usando instâncias Inf1, desde reconhecimento de imagem, detecção de objeto, processamento de linguagem natural (NLP) e modelos modernos de recomendação.

Neurônio AWS é um kit de desenvolvimento de software (SDK) que consiste em um compilador, tempo de execução e ferramentas de criação de perfil que otimizam o desempenho de inferência de ML das instâncias Inf2 do EC1. O Neuron é integrado nativamente a estruturas populares de ML, como TensorFlow e PyTorch. Portanto, você pode implantar modelos de aprendizado profundo no AWS Inferentia com as mesmas APIs familiares fornecidas pela estrutura de sua escolha e se beneficiar do aumento no desempenho e do menor custo por inferência na nuvem.

Desde o seu lançamento, o Neuron SDK continuou a aumentar a variedade de modelos que ele suporta, enquanto continua melhorando o desempenho e reduzindo os custos de inferência. Isso inclui modelos de NLP (BERTs), modelos de classificação de imagens (ResNet, VGG) e modelos de detecção de objetos (OpenPose e SSD).

Implante em instâncias Inf1 para baixa latência, alta taxa de transferência e economia de custos

A equipe do Amazon Search queria economizar custos e, ao mesmo tempo, atender ao requisito de alta taxa de transferência na previsão de duplicação e ao requisito de baixa latência na previsão de intenção de consulta. Eles optaram por implantar em instâncias Inf1 baseadas em AWS Inferentia e não apenas atenderam aos requisitos de alto desempenho, mas também economizaram até 85% nos custos de inferência.

Previsões duplicadas percebidas pelo cliente

Antes do uso do Inf1, um Amazon EMR cluster estava sendo executado usando instâncias baseadas em CPU. Sem depender da aceleração de hardware, foi necessário um grande número de instâncias para atender ao requisito de alta taxa de transferência de 8,800 transações totais por segundo. A equipe mudou para instâncias inf1.6xlarge, cada uma com 4 aceleradores AWS Inferentia e 16 NeuronCores (4 núcleos por chip AWS Inferentia). Eles rastrearam o modelo baseado em Transformer para um único NeuronCore e carregaram um modo por NeuronCore para maximizar o rendimento. Ao aproveitar os 16 NeuronCores disponíveis, eles reduziram os custos de inferência em 85% (com base no preço sob demanda público atual do Amazon EC2).

Previsão de intenção de consulta

Dado o requisito de latência do P99 de 10 milissegundos ou menos, a equipe carregou o modelo para cada NeuronCore disponível em instâncias inf1.6xlarge. Você pode fazer isso facilmente com o PyTorch Neuron usando o tocha.neuron.DataParallel API. Com a implantação do Inf1, a latência do modelo foi de 3 milissegundos, a latência de ponta a ponta foi de aproximadamente 10 milissegundos e a taxa de transferência máxima no pico de carga atingiu 16,000 TPS.

Comece com a compilação de amostra e o código de implantação

Veja a seguir alguns códigos de amostra para ajudá-lo a começar nas instâncias Inf1 e obter os benefícios de desempenho e custo, como a equipe do Amazon Search. Mostramos como compilar e realizar inferência com um modelo PyTorch, usando Neurônio PyTorch.

Primeiro, o modelo é compilado com torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Para obter a lista completa de argumentos possíveis para o trace método, consulte API Python de rastreamento PyTorch-Neuron. Como você pode ver, argumentos do compilador pode ser passado para o torch.neuron API diretamente. Todos os operadores FP32 são lançados para BF16 with --fp32-cast=all, proporcionando o mais alto desempenho, preservando a faixa dinâmica. Mais opções de fundição estão disponíveis para permitir que você controle o desempenho para modelar a compensação de precisão. Os modelos usados ​​para ambos os casos de uso foram compilados para um único NeuronCore (sem canalização).

Em seguida, carregamos o modelo no Inferentia com torch.jit.load, e use-o para previsão. o Tempo de execução do neurônio carrega automaticamente o modelo para NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Conclusão

A equipe do Amazon Search conseguiu reduzir seus custos de inferência em 85% usando instâncias Inf1 baseadas em AWS Inferentia, sob tráfego intenso e requisitos de desempenho exigentes. O AWS Inferentia e o Neuron SDK forneceram à equipe a flexibilidade de otimizar o processo de implantação separadamente do treinamento e apresentar uma curva de aprendizado superficial por meio de ferramentas completas e APIs de estrutura familiares.

Você pode desbloquear o desempenho e os benefícios de custo começando com o código de exemplo fornecido nesta postagem. Confira também de ponta a ponta tutoriais para executar modelos de ML no Inferentia com PyTorch e TensorFlow.


Sobre os autores

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.João moura é arquiteto de soluções especialista em IA/ML na Amazon Web Services. Ele se concentra principalmente em casos de uso de PNL e em ajudar os clientes a otimizar o treinamento e a implantação de modelos de aprendizado profundo. Ele também é um defensor ativo de hardware especializado em ML e soluções de ML de baixo código.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Wei Qi Zhang é gerente de engenharia de software da Search M5, onde trabalha na produção de modelos em larga escala para aplicativos de aprendizado de máquina da Amazon. Seus interesses incluem recuperação de informações e infraestrutura de aprendizado de máquina.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jason Carlson é um engenheiro de software para desenvolver pipelines de aprendizado de máquina para ajudar a reduzir o número de impressões de pesquisa roubadas devido a duplicatas percebidas pelo cliente. Ele trabalha principalmente com Apache Spark, AWS e PyTorch para ajudar a implantar e alimentar/processar dados para modelos de ML. Em seu tempo livre, ele gosta de ler e correr.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Shaohui Xi é um SDE na equipe Search Query Understanding Infra. Ele lidera o esforço para criar serviços de inferência online de aprendizado profundo em larga escala com baixa latência e alta disponibilidade. Fora do trabalho, ele gosta de esquiar e explorar boas comidas.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.ZhuoqiZhang é engenheiro de desenvolvimento de software na equipe Search Query Understanding Infra. Ele trabalha na construção de estruturas de serviço de modelo para melhorar a latência e a taxa de transferência para serviços de inferência online de aprendizado profundo. Fora do trabalho, ele gosta de jogar basquete, snowboard e dirigir.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Haowei Sol é engenheiro de software da equipe Search Query Understanding Infra. Ela trabalha no design de APIs e infraestrutura que suportam serviços de inferência online de aprendizado profundo. Seus interesses incluem design de API de serviço, configuração de infraestrutura e manutenção. Fora do trabalho, ela gosta de correr, caminhar e viajar.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o AWS Inferentia PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jaspreet Singh é Cientista Aplicado da equipe M5, onde trabalha em modelos de base em larga escala para melhorar a experiência de compra do cliente. Seus interesses de pesquisa incluem aprendizagem multitarefa, recuperação de informação e aprendizagem de representação.

Como o Amazon Search reduziu os custos de inferência de ML em 85% com o 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