Visão Geral
Este exemplo técnico demonstra um caminho otimizado para multiplicação de matrizes quantizadas, utilizando ativações e pesos no formato HiFloat8, com saída em bfloat16. A implementação emprega arquivos de cabeçalho dedicados para tiling e kernels (incluindo variações SWAT e não totalmente carregados), seguindo uma estrutura similar a outros exemplos de quantização MX no repositório.
Organização e Arquivos
O código fonte é fornecido em arquivos .asc, com dois executáveis principais que correspondem a diferentes semânticas de escala quantizada:
quant_matmul_hifp8_tt: Implementa escala dupla por tensor, onde ambas as escalas de entrada (x1 e x2) são do tipoKERNEL_QUANT_PERTENSOR. Os dados de escala são carregados de arquivos binários FP32 (pertoken_scale.binescale.bin).quant_matmul_hifp8_tc: Implemneta escala por canal, com x1 definido comoKERNEL_QUANT_DEFAULTou nulo, e x2 comoKERNEL_QUANT_PERCHANNEL. O arquivoscale.bincontém N valores FP32 representando escalas por canal, que são convertidos para uint64 no host antes da transferência para o dispositivo.
Diretórios de entrada e saída padrão (input/ e output/) são compartilhados entre os modos, sendo recomendável gerar dados específicos para cada execução para evitar sobreposições.
Processo de Construção
Os alvos de construção são integrados dentro do projeto matmul_recipes. Os executáveis resultantes são instalados em um subdiretório específico após a compilação.
Parâmetros de Execução
O programa aceita os parâmetros de dimensão da matriz m, k e n. Parâmetros opcionais transA e transB podem ser fornecidos para controlar a transposição das matrizes de entrada, com padrões equivalentes a transA=false e transB=true.
Geração de Dados e Validação
Para executar o modo com escala dupla por tensor, utilize o script de geração de dados correspondente, seguido pela execução do binário:
python3 gen_data_tt.py m_val k_val n_val
./quant_matmul_hifp8_tt m_val k_val n_val
Para o modo com escala por canal, o processo é análogo, usando o script e executável apropriados:
python3 gen_data_tc.py m_val k_val n_val
./quant_matmul_hifp8_tc m_val k_val n_val
Após a execução, um script de verificação é automaticamente invocado para comparar as saídas geradas pela NPU com as referências de CPU, garnatindo a corretude dos resultados.
Referências
Para uma compreensão mais profunda da arquitetura e otimização de multiplicação de matrizes, consulte os guias de performance para operadores de quantização MX disponíveis no repositório. Detalhes sobre o tipo de dado HiFloat8 podem ser encontrados em exemplos específicos de características de hardware.