O 8B LLM supera a Meta e a Hermes


Introdução

Em modelos de linguagem, onde a busca por eficiência e precisão é primordial, Lhama 3.1 Tempestade 8B surge como uma conquista notável. Esta versão refinada do Llama 3.1 8B Instruct da Meta representa um salto à frente no aprimoramento de capacidades de conversação e chamada de função dentro da classe de modelo de parâmetro 8B. A jornada para esse avanço está enraizada em uma abordagem meticulosa centrada na curadoria de dados, onde amostras de treinamento de alta qualidade foram cuidadosamente selecionadas para maximizar o potencial do modelo.

O processo de ajuste fino não parou por aí; ele progrediu por meio do ajuste fino direcionado baseado em espectro, culminando na fusão de modelos estratégicos. Este artigo discute as técnicas inovadoras que impulsionaram o Llama 3.1 Storm 8B a superar seus predecessores, estabelecendo um novo benchmark em modelos de linguagem pequena.

O 8B LLM supera a Meta e a Hermes

O que é Llama-3.1-Storm-8B?

O Llama-3.1-Storm-8B se baseia nos pontos fortes do Llama-3.1-8B-Instruct, aprimorando os recursos de conversação e chamada de função dentro da classe de modelo de parâmetro 8B. Esta atualização demonstra melhorias notáveis ​​em vários benchmarks, incluindo acompanhamento de instruções, QA orientado a conhecimento, raciocínio, redução de alucinações e chamada de função. Esses avanços beneficiam desenvolvedores e entusiastas de IA que trabalham com recursos computacionais limitados.

Comparado com o recente Modelo Hermes-3-Llama-3.1-8BLlama-3.1-Storm-8B supera 7 de 9 benchmarks. Hermes-3 lidera apenas no benchmark MuSR, e ambos os modelos têm desempenho comparable no benchmark BBH.

Llama 3.1 Storm 8B Forças

Llama 3.1 Storm 8B Forças

A imagem acima representa melhorias (ganhos absolutos) em relação ao Llama 3.1 8B Instruct.

Modelos Llama 3.1 Storm 8B

Aqui estão os modelos Llama 3.1 Storm 8B:

  1. Lhama 3.1 Tempestade 8B
  2. Llama 3.1 Storm 8B FP8 Dinâmico: Esse roteiro quantifica os pesos e ativações do tipo de dados Llama-3.1-Storm-8B para FP8, resultando em um modelo pronto para inferência vLLM. Ao reduzir o número de bits por parâmetro de 16 para 8, essa otimização economiza cerca de 50% em requisitos de memória de GPU e espaço em disco.

    Os pesos e ativações dos operadores lineares são os únicos elementos quantizados em blocos transformadores. As representações FP8 desses pesos e ativações quantizados são mapeadas usando uma única técnica de escala linear conhecida como quantização simétrica por tensor. 512 sequências UltraChat são quantizadas usando o LLM Compressor.

  3. Lhama 3.1 Storm 8B GGUF – Esta é a versão GGUF quantizada do Llama-3.1-Storm-8B, para uso com llama.cpp. GGUF é um formato de arquivo para armazenar modelos para inferência com GGML e executores baseados em GGML. GGUF é um formato binário que é projetado para carregamento e salvamento rápidos de modelos e para facilidade de leitura. Os modelos são tradicionalmente desenvolvidos usando PyTorch ou outra estrutura e então convertidos para GGUF para uso em GGML. É um formato de arquivo sucessor do GGML, GGMF e GGJT e é projetado para ser inequívoco ao conter todas as informações necessárias para carregar um modelo. Ele também é projetado para ser extensível para que novas informações possam ser adicionadas aos modelos sem quebrar a compatibilidade.

Leia também: Meta Llama 3.1: O mais recente modelo de IA de código aberto assume o GPT-4o mini

A abordagem seguida

O gráfico de comparação de desempenho mostra que o Llama 3.1 Storm 8B supera significativamente o Meta AI Lhama 3.1 8B Instruir e Hermes 3 Lhama 3.1 8B modelos em diversos benchmarks.

Lhama-3.1-Tempestade-8B

A abordagem deles consiste em 3 etapas principais:

A abordagem seguida

Auto Curadoria

Os conjuntos de dados de origem usados ​​para o Llama 3.1 Storm 8B são estes 5 conjuntos de dados de código aberto (O-Tomo, dados do agente, Magpie-Llama-3.1-Professional-300K-Filtrado, openhermes_200k_não filtradoLlama-3-Magpie-PO-100K-SML). Os conjuntos de dados combinados contêm um complete de ~2,8 milhões de exemplos. Cada exemplo na curadoria de dados recebe um valor ou valores, e os julgamentos de seleção são feitos dependendo do valor ou valores atribuídos a cada amostra. Para atribuir tais valores, modelos de LLM ou aprendizado de máquina são normalmente utilizados. Usando LLM, existem inúmeras abordagens para atribuir um valor a um exemplo. O valor educacional e o nível de dificuldade são duas das métricas mais frequentemente usadas para avaliar os exemplos.

O valor ou informatividade do exemplo (instrução + resposta) é determinado pelo seu valor educacional e o grau de dificuldade pelo seu nível de dificuldade. O valor educacional está entre 1 e 5, onde 1 é o menos educacional e 5 é o mais instrutivo. Existem 3 níveis de dificuldade – Fácil, Médio e Difícil. O objetivo é aprimorar o SLM dentro do contexto de autocuradoria; portanto, nos concentramos em aplicar o mesmo modelo – Use Llama-3.1-8B-Instruct em vez de Llama-3.1-70B-Instruct, Llama-3.1-405B-Instruct e outros LLMs maiores.

Etapas da autocuradoria:

  1. Etapa 1: Educação Curadoria baseada em valor — Eles usaram o Llama 3.1 Instruct 8B para atribuir um valor educacional (1-5) a todos os exemplos (~2,8 milhões). Em seguida, eles selecionaram as amostras com uma pontuação maior que 3. Eles seguiram a abordagem do Conjunto de dados FineWeb-Edu. Esta etapa reduziu o complete de exemplos de 2,8 milhões para 1,3 milhões..
  2. Etapa 2: Curadoria baseada em nível de dificuldade – Seguimos uma abordagem semelhante e usamos o Llama 3.1 Instruct 8B para atribuir um nível de dificuldade (Fácil, Médio e Difícil) a 1,3 milhões de exemplos da etapa anterior. Após alguns experimentos, eles selecionaram exemplos de nível Médio e Difícil. Essa estratégia é semelhante à poda de dados descrita no Relatório técnico do Llama-3.1. Havia ~650 mil e ~325 mil exemplos de níveis de dificuldade médio e difícil, respectivamente.

O Closing Curated Dataset continha ~975K exemplos. Então, 960K e 15K foram divididos para treinamento e validação, respectivamente.

Ajuste fino de instrução supervisionada direcionada

O modelo Self Curation, ajustado com precisão no modelo Llama-3.1-8B-Instruct com ~960 mil exemplos em 4 épocas, emprega o Spectrum, um método que acelera o treinamento LLM ao direcionar seletivamente módulos de camada com base em sua relação sinal-ruído (SNR) enquanto congela o restante. O Spectrum efetivamente combina o desempenho de ajuste fino completo com o uso reduzido de memória da GPU ao priorizar camadas com alto SNR e congelar 50% das camadas com baixo SNR. Comparações com métodos como QLoRA demonstram a qualidade superior do modelo do Spectrum e a eficiência da VRAM em ambientes distribuídos.

Mesclagem de modelos

Como a fusão de modelos levou a alguns modelos de última geração, eles decidiram fundir o modelo fino e ajustado por si próprio com o modelo Llama Spark, que é um derivado do Llama 3.1 8B Instruct. Eles usaram o método SLERP para fundir os dois modelos, criando um modelo combinado que captura a essência de ambos os pais por meio de interpolação suave. A interpolação linear esférica (SLERP) garante uma taxa constante de mudança, preservando as propriedades geométricas do espaço esférico, permitindo que o modelo resultante mantenha as principais características de ambos os modelos pais. Podemos ver os benchmarks de que o modelo SFT de autocuradoria tem um desempenho melhor do que o modelo Llama-Spark em média. No entanto, o modelo mesclado tem um desempenho ainda melhor do que qualquer um dos dois modelos.

Impacto da autocuradoria e fusão de modelos

Autocuradoria e fusão de modelos

Como mostra a figura acima, a estratégia SFT baseada em autocuradoria supera o Llama-3.1-8B-Instruct em 7 de 10 benchmarks, destacando a importância de selecionar exemplos de alta qualidade. Esses resultados também sugerem que escolher o modelo combinado certo pode melhorar o desempenho ainda mais entre os benchmarks avaliados.

Como usar o modelo Llama 3.1 Storm 8B

Usaremos a biblioteca transformers do Hugging Face para usar o Llama 3.1 Storm 8B Mannequin. Por padrão, transformers carregam o modelo em bfloat16, que é o tipo usado no ajuste fino. É recomendado que você o use.

Método 1: Use o Pipeline de Transformadores

Etapa: Instalação das bibliotecas necessárias

!pip set up --upgrade "transformers>=4.43.2" torch==2.3.1 speed up flash-attn==2.6.3

2º Passo: Carregue o modelo Llama 3.1 Storm 8B

import transformers

import torch

model_id = "akjindal53244/Llama-3.1-Storm-8B"

pipeline = transformers.pipeline(

   "text-generation",

   mannequin=model_id,

   model_kwargs={"torch_dtype": torch.bfloat16},

   device_map="auto",

)

3º Passo: Criar um método utilitário para criar a entrada do modelo

def prepare_conversation(user_prompt):

 # Llama-3.1-Storm-8B chat template

 dialog = (

     {"position": "system", "content material": "You're a useful assistant."},

     {"position": "consumer", "content material": user_prompt}

 )

 return dialog

4º Passo: Obtenha a saída

# Consumer question

user_prompt = "What's the capital of Spain?"

dialog = prepare_conversation(user_prompt)

outputs = pipeline(dialog, max_new_tokens=128, do_sample=True, temperature=0.01, top_k=100, top_p=0.95)

response = outputs(0)('generated_text')(-1)('content material')

print(f"Llama-3.1-Storm-8B Output: {response}")
Saída

Método 2: Usando Mannequin, tokenizer e mannequin.generate API

Etapa: Carregar o modelo Llama 3.1 Storm 8B e o tokenizador

import torch

from transformers import AutoTokenizer, LlamaForCausalLM

model_id = 'akjindal53244/Llama-3.1-Storm-8B'

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)

mannequin = LlamaForCausalLM.from_pretrained(

   model_id,

   torch_dtype=torch.bfloat16,

   device_map="auto",

   load_in_8bit=False,

   load_in_4bit=False,

   use_flash_attention_2=False  # Colab Free T4 GPU is an previous era GPU and doesn't assist FlashAttention. Allow if utilizing Ampere GPUs or newer equivalent to RTX3090, RTX4090, A100, and many others.

)

2º Passo: Aplicar o modelo de bate-papo Llama-3.1-Storm-8B

def format_prompt(user_query):

   template = """<|begin_of_text|><|start_header_id|>system<|end_header_id|>nnYou are a useful assistant.<|eot_id|><|start_header_id|>consumer<|end_header_id|>nn{}<|eot_id|><|start_header_id|>assistant<|end_header_id|>nn"""

   return template.format(user_query)

Etapa: Obtenha a saída do modelo

# Construct remaining enter immediate after making use of chat-template

immediate = format_prompt("What's the capital of France?")

input_ids = tokenizer(immediate, return_tensors="pt").input_ids.to("cuda")

generated_ids = mannequin.generate(input_ids, max_new_tokens=128, temperature=0.01, do_sample=True, eos_token_id=tokenizer.eos_token_id)

response = tokenizer.decode(generated_ids(0)(input_ids.form(-1):), skip_special_tokens=True)

print(f"Llama-3.1-Storm-8B Output: {response}")
Saída

Conclusão

O Llama 3.1 Storm 8B representa um passo significativo no desenvolvimento de modelos de linguagem eficientes e poderosos. Ele demonstra que modelos menores podem atingir desempenho impressionante por meio de técnicas inovadoras de treinamento e fusão, abrindo novas possibilidades para pesquisa de IA e desenvolvimento de aplicações. À medida que o campo continua a evoluir, esperamos ver mais refinamentos e aplicações dessas técnicas, potencialmente democratizando o acesso a recursos avançados de IA.

Mergulhe no futuro da IA ​​com o GenAI Pinnacle. Fortaleça seus projetos com recursos de ponta, desde o treinamento de modelos personalizados até o enfrentamento de desafios do mundo actual, como mascaramento de PII. Comece a explorar.

Perguntas frequentes

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *