Introdução geral
O Deepdive Llama3 From Scratch é um projeto de código aberto hospedado no GitHub que se concentra na análise e implementação passo a passo do processo de inferência dos modelos Llama3. Ele é otimizado com base no projeto naklecha/lllama3-from-scratch e foi criado para ajudar os desenvolvedores e alunos a obter uma compreensão mais profunda dos conceitos principais e dos detalhes de raciocínio do Llama3. O projeto fornece comentários de código detalhados, caminhos de aprendizado estruturados e instruções de rastreamento dimensional de matriz, facilitando o início para os iniciantes. Com um código claro de desmontagem e implementação passo a passo, os usuários podem dominar o processo completo, desde a inferência do modelo até a computação complexa, que é um recurso de alta qualidade para aprender modelos de linguagem grandes.
Lista de funções
- Raciocínio passo a passo para alcançarDescrição: fornece um detalhamento de cada etapa da inferência do modelo Llama3, incluindo a derivação matemática e a implementação do código.
- Comentários detalhados do códigoAdicionar anotações detalhadas a cada parte do código para explicar sua função e papel e ajudar a entender a lógica subjacente.
- Rastreamento dimensionalAnotar a alteração das dimensões da matriz no cálculo e mostrar claramente o processo de fluxo de dados.
- Otimização das estruturas de aprendizagemReorganize a ordem do conteúdo e o índice para facilitar o aprendizado passo a passo.
- Explicação do mecanismo de atenção do grupoDescrição: Uma explicação detalhada do mecanismo de atenção de consulta em grupo do Llama3 e sua implementação.
- Descrição da rede SwiGLU FeedforwardSwiGLU: Dissecando a estrutura da rede SwiGLU e sua função no modelo.
- Suporte à geração de várias palavrasDemonstra como gerar saída de várias palavras por meio de chamadas recursivas, incluindo o princípio de otimização do KV-Cache.
Usando a Ajuda
Como instalar e usar
O Deepdive Llama3 From Scratch é um projeto de código aberto do GitHub que pode ser usado sem um processo de instalação complicado. Abaixo estão as etapas detalhadas para você começar e explorar os recursos do projeto.
Obter o projeto
- Visite a página do GitHub
Abra seu navegador e digite o URLhttps://github.com/therealoliver/Deepdive-llama3-from-scratch
para acessar a página inicial do projeto. - Código de download
- Clique no ícone verde Código Botão.
- opção Baixar ZIP Faça o download do zip ou clone o projeto usando o comando Git:
git clone https://github.com/therealoliver/Deepdive-llama3-from-scratch.git
- Extraia o arquivo ZIP ou vá para a pasta do projeto clonado.
- Preparação ambiental
O projeto se baseia no ambiente Python e em bibliotecas comuns de aprendizagem profunda, como o PyTorch. As etapas a seguir são recomendadas para a configuração:- Certifique-se de que o Python 3.8 ou superior esteja instalado.
- Execute o seguinte comando no terminal para instalar a dependência:
pip install torch numpy
- Se você precisar executar a inferência completa do modelo, talvez seja necessário instalar adicionalmente o
transformadores
ou outras bibliotecas, dependendo dos requisitos específicos do código.
Funções principais
1. realização por raciocínio gradual
- Descrição funcionalEste é o núcleo do projeto, fornecendo uma desmontagem de cada etapa da inferência do Llama3, desde a incorporação de entrada até a previsão de saída.
- procedimento::
- Abra o arquivo principal na pasta do projeto (por exemplo
llama3_inference.py
(ou documentos com nomes semelhantes, dependendo da nomenclatura no projeto). - Leia as instruções no início do documento para entender o processo geral de raciocínio.
- Execute os trechos de código passo a passo, com comentários que expliquem cada segmento. Exemplo:
# Camada de entrada de incorporação para converter tokens em vetores token_embeddings = embedding_layer(tokens)
- Entenda os princípios matemáticos e a lógica de implementação de cada etapa por meio de comentários e comparações de código.
- Abra o arquivo principal na pasta do projeto (por exemplo
- Dicas e truquesRecomenda-se executá-lo com o Jupyter Notebook para executar o código bloco a bloco e ver os resultados intermediários.
2. comentários detalhados do código
- Descrição funcionalCada parte do código é acompanhada de anotações detalhadas, adequadas para que os iniciantes entendam conceitos complexos.
- procedimento::
- Abra o arquivo de projeto em um editor de código, como o VS Code.
- Ao navegar pelo código, observe que o código que começa com
#
Notas que começam com, por exemplo:# RMS normalizado para evitar valores instáveis, eps para evitar o zeramento normalizado = rms_norm(embeddings, eps=1e-6)
- Depois de ler os comentários, tente modificar os parâmetros você mesmo e execute-o, observando como os resultados mudam.
- Dicas e truquesTradução: Traduza as anotações para o seu próprio idioma para registrá-las e aprofundar sua compreensão.
3. rastreamento dimensional
- Descrição funcionalRotulagem de alterações na dimensão da matriz para ajudar os usuários a entender as transformações na forma dos dados.
- procedimento::
- Encontre locais para rotular as dimensões, por exemplo:
# Entrada [17x4096] -> Saída [17x128], um vetor de consulta por token q_por_token = torch.matmul(token_embeddings, q_layer0_head0.)
- Verifique o formato do tensor gerado pelo código e verifique se ele está de acordo com os comentários:
print(q_per_token.shape) # output torch.Size([17, 128])
- Compreensão do processo computacional dos mecanismos de atenção ou das redes feedforward por meio de alterações dimensionais.
- Encontre locais para rotular as dimensões, por exemplo:
- Dicas e truquesDiagramas de transformação de dimensão (por exemplo, 4096 -> 128) para obter uma compreensão visual do fluxo de dados.
4. explicação do mecanismo de atenção do grupo
- Descrição funcionalDescrição: Uma explicação detalhada do Grouped Query Attention (GQA) para Llama3, em que cada 4 cabeças de consulta compartilham um conjunto de vetores de valores-chave.
- procedimento::
- Localize o segmento de código do Mecanismo de Atenção, geralmente no
attention.py
ou em um documento semelhante. - Leia as notas relevantes, por exemplo:
# GQA: Dividir o cabeçalho da consulta em grupos, compartilhar KVs, reduzir a dimensionalidade para [1024, 4096] kv_weights = model["attention.wk.weight"]
- Execute o código e observe como o agrupamento reduz a quantidade de cálculos.
- Localize o segmento de código do Mecanismo de Atenção, geralmente no
- Dicas e truquesCalcular a economia de memória do GQA em comparação com a atenção tradicional de várias cabeças.
5 Descrição da rede SwiGLU feed-forward
- Descrição funcionalDescrição: Explique como as redes SwiGLU aumentam a não linearidade e melhoram a representação do modelo.
- procedimento::
- Encontre o código de implementação da rede feedforward, por exemplo:
# SwiGLU: w1 e w3 calculam combinações não lineares, w2 produz output = torch.matmul(F.silu(w1(x)) * w3(x), w2.)
- Leia as fórmulas anotadas e entenda seus princípios matemáticos.
- Modifique os dados de entrada, execute o código e observe as alterações na saída.
- Encontre o código de implementação da rede feedforward, por exemplo:
- Dicas e truquesTente substituí-lo pelo ReLU e compare a diferença de desempenho.
6. suporte à geração de várias palavras
- Descrição funcionalGeração de sequências de várias palavras por meio de chamadas recorrentes e introdução da otimização do KV-Cache.
- procedimento::
- Encontre o código da lógica de geração, por exemplo:
# Loop para prever a próxima palavra até encontrar o token final while token ! = "". next_token = model.predict(current_seq) current_seq.append(next_token)
- Leia as notas relacionadas ao KV-Cache para entender como o armazenamento em cache acelera a inferência.
- Digite uma frase curta (por exemplo, "Hello") e execute-a para gerar uma frase completa.
- Encontre o código da lógica de geração, por exemplo:
- Dicas e truques: Ajustes
max_seq_len
para testar saídas de diferentes comprimentos.
advertência
- Requisitos de hardwareO suporte à GPU pode ser necessário para executar a inferência completa, mas testes menores podem ser realizados na CPU.
- Conselhos sobre aprendizadoLeia em conjunto com o documento oficial da Llama3 para obter melhores resultados.
- Método de comissionamentoQuando você encontrar um erro, verifique a versão da dependência ou consulte a página de problemas do GitHub para obter ajuda.
Com essas etapas, você pode ter uma compreensão completa do Deepdive Llama3 From Scratch, desde o raciocínio básico até as técnicas de otimização!