Flash Attention 3(FA3)量化,类似Attention量化,不同之处在于DeepSeek使用MLA算法,k rope的取值变化过大,不适合量化。因此此量化方式将k的非rope张量量化为8bit,k的rope张量不量化。目前使用的量化方案是perhead量化。通过对k的部分量化来减少KV Cache的显存占用,优化decode阶段attention算子的速度,提升吞吐。
[object Object]
FA3量化搭配W8A8量化后权重目录结构:
- 量化输出包含:权重文件quant_model_weight_w8a8.safetensors和权重描述文件quant_model_description.json。
- 目录中的其余文件为推理时所需的配置文件,不同模型略有差异。
以下展示了量化后权重描述文件quant_model_description.json中的部分内容:
和W8A8量化权重相比:新增fa_quant_type描述字段;新增self_attn字段及下面包含的内容;input_scale用于将q,k特征量化为int8类型;deq_scale用于将q,k输出反量化成浮点类型。
图 1 FA3量化权重推理时流程
表 1 float16权重量化后dtype及shape信息(假设原始权重的shape为[n, k])
进入“msmodelslim/example/DeepSeek/”目录,执行如下量化命令。
[object Object]FA3量化权重的quant_model_description.json中应包含"fa_quant_type": "FAKQuant"键值对。
开启KV Cache NZ格式。
纯模型推理时:在“${ATB_SPEED_HOME_PATH}/atb_llm/conf/config.json”中将“enable_nz”设置为“true”。
服务化推理时:在“{MindIE安装目录}/mindie_llm/conf/config.json”的"ModelConfig"字段下添加“enable_nz”字段,如下所示:
[object Object]
[object Object]
您可以使用以下指令执行对话测试,推理内容为"What's deep learning?"。
[object Object]