Token Reduction#
目前LightCompress支持对主流的多模态大语言模型进行token reduction,配置十分简单,即插即用。
下面是一个配置的例子
base:
seed: &seed 42
model:
type: Llava
path: model path
torch_dtype: auto
eval:
eval_pos: [pretrain, transformed]
type: vqa
name: [gqa, mmbench_en_dev, mme]
bs: 1
inference_per_block: False
sparse:
method: TokenReduction
special:
method: FastV
pruning_loc: 3
rate: 0.778
save:
save_trans: False
save_fake: False
save_path: /path/to/save/
配置文件中包含三大核心内容,包括:
model在模型选择上,可以选择LLaVA,LLaVA-NeXT,Qwen2.5VL以及LLaVA OneVision等,这些模型涵盖了图像任务和视频任务,详细的模型支持列表可以查阅文件,未来LightCompress也会支持更多的模型。eval首先,在eval_pos参数的选择上,pretrain表示原始保留所有视觉token的模型,transformed表示应用相应算法进行token reduction的模型。LightCompress接入了lmms-eval进行各种下游数据集测评,需要将type指定为vqa,name中的下游测评数据集参考lmms-eval文档中的命名方式。sparsemethod需要首先指定为TokenReduction,在special中继续指定具体的算法以及相关的一些超参数。由于每个算法对应的超参数不同,详细的可以参考配置文件。
结合量化#
LightCompress也支持同时使用token reduction和量化的极致压缩方案,首先需要选择量化算法存储一个fake_qunat模型,可以参考量化板块的文档。其次加载这个模型并在quant下加入token_reduction字段即可。
quant:
method: RTN
weight:
bit: 4
symmetric: False
granularity: per_group
group_size: 128
special:
actorder: True
static_groups: True
percdamp: 0.01
blocksize: 128
true_sequential: True
quant_out: True
token_reduction:
method: FastV
special:
pruning_loc: 3
rate: 0.778