- Implementa o Llama3 do zero com um único tensor e multiplicação de matrizes.
- Carrega diretamente os tensores do arquivo de modelo Llama3 fornecido pela Meta
Resumo da implementação do modelo LLaMA-3 do zero
Configuração do tokenizador
- Configura o tokenizador usando a biblioteca Tiktoken
- Define tokens especiais e os adiciona ao tokenizador
Leitura dos arquivos do modelo
- Carrega o arquivo do modelo (
consolidated.00.pth) usando PyTorch
- Lê a configuração do modelo a partir do arquivo
params.json
- Inclui informações como número de dimensões (
dim), número de camadas (n_layers) e número de heads (n_heads)
Conversão de texto em tokens
- Converte o texto do prompt em uma sequência de tokens usando o tokenizador
- Converte cada token em seu embedding correspondente
- Normaliza os embeddings usando normalização RMS
Implementação da atenção
- Carrega do modelo as matrizes de consulta (
wq), chave (wk), valor (wv) e saída (wo)
- Calcula os vetores de consulta, chave e valor para cada token
- Adiciona informação posicional usando RoPE (Rotary Positional Embedding)
- Calcula as pontuações de atenção por meio do produto interno entre consulta e chave
- Aplica máscara nas pontuações de atenção para tokens futuros
- Aplica a função Softmax para calcular a distribuição de atenção
- Multiplica a distribuição de atenção pelos vetores de valor para obter o resultado da atenção
Atenção multi-head
- Executa o cálculo de atenção para todos os heads de atenção
- Concatena os resultados de cada head para gerar o resultado final da atenção
Rede feed-forward
- Implementa a rede feed-forward com a função de ativação SwiGLU (Swish Gated Linear Unit)
- Soma o resultado da atenção com a saída da rede feed-forward para gerar o embedding final
Repetição de todas as camadas
- Repete os cálculos de atenção e da rede feed-forward para todas as camadas do transformer
- Aplica normalização RMS ao embedding final
Predição de tokens
- Multiplica o embedding final pela matriz de saída para calcular os logits
- Prevê como próximo token aquele com o maior valor entre os logits
- Decodifica e exibe o token previsto
Opinião do GN⁺
- Este artigo é muito útil para entender a estrutura interna e o funcionamento do modelo Llama3. Em especial, o processo de implementação do zero deixa claro como cada componente do modelo interage com os demais.
- Para engenheiros de software iniciantes, pode ser um pouco complexo. Ainda assim, a explicação passo a passo está bem organizada, então é possível entender acompanhando com calma.
- Também é possível aprender como conceitos avançados, como RoPE (embeddings posicionais rotativos), ajudam a melhorar o desempenho do modelo. Isso pode ser útil ao implementar ou aprimorar outros modelos de NLP.
- Este artigo ajuda a compreender em profundidade a estrutura interna e o funcionamento de modelos de deep learning. Isso será muito útil na hora de otimizar ou depurar modelos.
1 comentários
A Anya é fofa.