O guia completo para depuração dimensional
A incompatibilidade da dimensão da matriz é o erro mais comum ao implementar o Llama3 e pode ser resolvido pelos seguintes métodos:
- Mecanismo de pré-inspeçãoAdicionar uma verificação de asserção antes de cada conjunto de operações de matriz, por exemplo
assert q.shape[-1] == k.shape[-1]
- Ferramentas de controle dimensionalUtilize as anotações dimensionais fornecidas pelo projeto, por exemplo, faça anotações na rede SwiGLU feed-forward
# [batch,seq_len,hidden_dim]→[batch,seq_len,inter_dim]
- técnica de diagnósticoQuando houver um erro de dimensionalidade, use o
torch.einsum
A fórmula visualiza o processo de cálculo (por exemplo"bsh,hd->bsd"
) - Programa típico de restauração1) Adicionar/remover dimensões de não compressão 2) Ajustar a ordem dos eixos usando permute 3) Verificar as configurações de in_features para camadas de projeção
Caso em questão: ao implementar o KV-Cache, a dimensão da sequência do cache precisa ser mantida igual à do token atual, o que pode ser feito pelo comandotorch.cat([past_k, current_k], dim=2)
Certifique-se de que as dimensões estejam alinhadas.
Essa resposta foi extraída do artigoDeepdive Llama3 From Scratch: Ensinando você a implementar modelos Llama3 a partir do zeroO