A Gradient torna o benchmarking de LLM econômico e fácil com o AWS Inferentia | Amazon Web Services

A Gradient torna o benchmarking de LLM econômico e fácil com o AWS Inferentia | Amazon Web Services

Este é um post convidado co-escrito com Michael Feil da Gradient.

Avaliar o desempenho de grandes modelos de linguagem (LLMs) é uma etapa importante do processo de pré-treinamento e ajuste fino antes da implantação. Quanto mais rápido e frequente você conseguir validar o desempenho, maiores serão as chances de melhorar o desempenho do modelo.

At Gradiente, trabalhamos no desenvolvimento de LLM customizado e recentemente lançamos nosso Laboratório de desenvolvimento de IA, oferecendo às organizações empresariais um serviço de desenvolvimento personalizado de ponta a ponta para construir LLMs privados e personalizados e copilotos de inteligência artificial (IA). Como parte deste processo, avaliamos regularmente o desempenho dos nossos modelos (ajustados, treinados e abertos) em relação a benchmarks abertos e proprietários. Ao trabalhar com a equipe da AWS para treinar nossos modelos Treinamento AWS, percebemos que estávamos restritos tanto à VRAM quanto à disponibilidade de instâncias de GPU quando se tratava da ferramenta principal para avaliação de LLM, chicote de avaliação lm. Essa estrutura de código aberto permite pontuar diferentes modelos de linguagem generativa em diversas tarefas de avaliação e benchmarks. É usado por tabelas de classificação como Abraçando o rosto para benchmarking público.

Para superar esses desafios, decidimos criar e abrir nossa solução, integrando Neurônio AWS, a biblioteca atrás Inferência da AWS e Trainium, em lm-evaluation-harness. Esta integração permitiu avaliar v-alpha-tross, uma versão inicial do nosso modelo Albatross, em comparação com outros modelos públicos durante e após o processo de formação.

Para contextualizar, essa integração é executada como uma nova classe de modelo dentro do lm-evaluation-harness, abstraindo a inferência de tokens e a estimativa de probabilidade logarítmica de sequências sem afetar a tarefa de avaliação real. A decisão de mover nosso pipeline de testes internos para Amazon Elastic Compute Nuvem (Amazon EC2) Inf2 instâncias (desenvolvido pelo AWS Inferentia2) nos permitiu acessar até 384 GB de memória de acelerador compartilhada, adaptando-se facilmente a todas as nossas arquiteturas públicas atuais. Ao usar instâncias spot da AWS, pudemos aproveitar a capacidade não utilizada do EC2 na nuvem AWS, permitindo economia de custos de até 90% com desconto nos preços sob demanda. Isso minimizou o tempo necessário para testes e nos permitiu testar com mais frequência porque pudemos testar em várias instâncias que estavam prontamente disponíveis e liberar as instâncias quando terminamos.

Nesta postagem, apresentamos uma análise detalhada de nossos testes, os desafios que encontramos e um exemplo de uso do equipamento de teste no AWS Inferentia.

Benchmarking no AWS Inferentia2

O objetivo deste projeto era gerar pontuações idênticas às mostradas no Tabela de classificação LLM aberta (para muitos modelos CausalLM disponíveis no Hugging Face), mantendo a flexibilidade para executá-lo em benchmarks privados. Para ver mais exemplos de modelos disponíveis, consulte AWS Inferentia e Trainium no rosto abraçado.

As alterações de código necessárias para transferir um modelo dos transformadores Hugging Face para o Hugging Face Neurônio Ótimo A biblioteca Python era bastante baixa. Porque o chicote de avaliação lm usa AutoModelForCausalLM, há uma queda na substituição usando NeuronModelForCausalLM. Sem um modelo pré-compilado, o modelo é compilado automaticamente no momento, o que pode adicionar de 15 a 60 minutos a um trabalho. Isso nos deu flexibilidade para implantar testes para qualquer instância do AWS Inferentia2 e modelo CausalLM compatível.

Resultados

Devido à forma como os benchmarks e modelos funcionam, não esperávamos que as pontuações correspondessem exatamente em diferentes execuções. No entanto, devem estar muito próximos com base no desvio padrão, e temos visto isso de forma consistente, conforme mostra a tabela a seguir. Os benchmarks iniciais que executamos no AWS Inferentia2 foram todos confirmados pela tabela de classificação Hugging Face.

In lm-evaluation-harness, existem dois fluxos principais usados ​​por testes diferentes: generate_until e loglikelihood. O teste gsm8k usa principalmente generate_until para gerar respostas exatamente como durante a inferência. Loglikelihood é usado principalmente em benchmarking e testes e examina a probabilidade de diferentes resultados serem produzidos. Ambos funcionam no Neuron, mas o loglikelihood O método no SDK 2.16 usa etapas adicionais para determinar as probabilidades e pode levar mais tempo.

Resultados do chicote de avaliação Lm
Configuração de hardware Sistema original AWS Inferentia inf2.48xlarge
Tempo com batch_size=1 para avaliar mistralai/Mistral-7B-Instruct-v0.1 em gsm8k 103 minutos 32 minutos
Pontuação em gsm8k (obter resposta – correspondência exata com padrão) 0.3813 – 0.3874 (±0.0134) 0.3806 – 0.3844 (±0.0134)

Comece com Neuron e lm-evaluation-harness

O código nesta seção pode ajudá-lo a usar lm-evaluation-harness e execute-o em modelos suportados no Hugging Face. Para ver alguns modelos disponíveis, acesse AWS Inferentia e Trainium no rosto abraçado.

Se você estiver familiarizado com a execução de modelos no AWS Inferentia2, poderá perceber que não há num_cores configuração passada. Nosso código detecta quantos núcleos estão disponíveis e passa automaticamente esse número como parâmetro. Isso permite executar o teste usando o mesmo código, independentemente do tamanho da instância que você está usando. Você também pode notar que estamos nos referindo ao modelo original, não a uma versão compilada do Neuron. O chicote compila automaticamente o modelo para você conforme necessário.

As etapas a seguir mostram como implantar o Gradient gradientai/v-alpha-tross modelo que testamos. Se quiser testar com um exemplo menor em uma instância menor, você pode usar o mistralai/Mistral-7B-v0.1 modelo.

  1. A cota padrão para execução de instâncias On-Demand Inf é 0, portanto, você deve solicitar um aumento por meio de Service Quotas. Adicione outra solicitação para todas as solicitações de instância spot Inf para que você possa testar com instâncias spot. Você precisará de uma cota de 192 vCPUs para este exemplo usando uma instância inf2.48xlarge ou de uma cota de 4 vCPUs para um inf2.xlarge básico (se estiver implantando o modelo Mistral). As cotas são específicas da região da AWS, portanto, solicite us-east-1 or us-west-2.
  2. Decida sua instância com base em seu modelo. Porque v-alpha-tross é uma arquitetura 70B, decidimos usar uma instância inf2.48xlarge. Implante um inf2.xlarge (para o modelo 7B Mistral). Se você estiver testando um modelo diferente, talvez seja necessário ajustar sua instância dependendo do tamanho do modelo.
  3. Implante a instância usando o Abraçando o rosto DLAMI versão 20240123, para que todos os drivers necessários sejam instalados. (O preço mostrado inclui o custo da instância e não há cobrança adicional de software.)
  4. Ajuste o tamanho da unidade para 600 GB (100 GB para Mistral 7B).
  5. Clonar e instalar lm-evaluation-harness na instância. Especificamos uma compilação para sabermos que qualquer variação se deve a alterações no modelo, e não a alterações de teste ou código.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. Execute lm_eval com o tipo de modelo hf-neuron e certifique-se de ter um link para o caminho de volta ao modelo em Hugging Face:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

Se você executar o exemplo anterior com Mistral, deverá receber a seguinte saída (no inf2.xlarge menor, pode levar 250 minutos para ser executado):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

limpar

Quando terminar, certifique-se de interromper as instâncias do EC2 por meio do console do Amazon EC2.

Conclusão

As equipes Gradient e Neuron estão entusiasmadas em ver uma adoção mais ampla da avaliação LLM com este lançamento. Experimente você mesmo e execute a estrutura de avaliação mais popular em instâncias AWS Inferentia2. Agora você pode se beneficiar da disponibilidade sob demanda do AWS Inferentia2 ao usar desenvolvimento LLM personalizado da Gradient. Comece a hospedar modelos no AWS Inferentia com estes tutoriais.


Sobre os autores

A Gradient torna o benchmarking de LLM econômico e fácil com o AWS Inferentia | Inteligência de dados PlatoBlockchain da Amazon Web Services. Pesquisa vertical. Ai.Michael Feil é engenheiro de IA na Gradient e anteriormente trabalhou como engenheiro de ML na Rodhe & Schwarz e pesquisador no Instituto Max-Plank para Sistemas Inteligentes e na Bosch Rexroth. Michael é um contribuidor líder de várias bibliotecas de inferência de código aberto para LLMs e projetos de código aberto, como StarCoder. Michael é bacharel em mecatrônica e TI pela KIT e mestre em robótica pela Universidade Técnica de Munique.

A Gradient torna o benchmarking de LLM econômico e fácil com o AWS Inferentia | Inteligência de dados PlatoBlockchain da Amazon Web Services. Pesquisa vertical. Ai.Jim Burtoft é arquiteto sênior de soluções para startups na AWS e trabalha diretamente com startups como a Gradient. Jim é um CISSP, parte da comunidade de campo técnico de IA/ML da AWS, um embaixador da Neuron e trabalha com a comunidade de código aberto para permitir o uso do Inferentia e do Trainium. Jim é bacharel em matemática pela Carnegie Mellon University e mestre em economia pela University of Virginia.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS