Este projeto fornece uma análise multidimensional do mecanismo Grouped Query Attention empregado pelo Llama3:
Princípios de realização::
Os comentários do código explicam em detalhes o projeto do GQA, fazendo com que várias cabeças de consulta compartilhem o mesmo conjunto de vetores de valores-chave, o que reduz significativamente a quantidade de cálculos em comparação com a atenção tradicional de várias cabeças. Por exemplo, o projeto é anotado com alterações na dimensão da matriz de peso:kv_weights = model["attention.wk.weight"] # 维度降至[1024,4096].
Nível de otimização de engenharia::
O projeto demonstra como o GQA tem trabalhado por meio detorch.matmule outras operações para implementar o cálculo, e sugere que o usuário compare a diferença no espaço de memória da MHA tradicional. São incluídos trechos de código típicos:# GQA分组计算:4个查询头共享1组KV
group_size = 4
q_per_token_group = q_per_token.reshape(q_per_token.shape[0], -1, group_size)
Conselhos sobre aprendizado::
Recomenda-se ler o código correspondente em conjunto com o documento "Llama: Open and Efficient Foundation Language Models", ajustando ogroup_sizeObservação paramétrica das variações de desempenho computacional e compreensão profunda do valor de engenharia do GQA.
Essa resposta foi extraída do artigoDeepdive Llama3 From Scratch: Ensinando você a implementar modelos Llama3 a partir do zeroO































