IDPruner (核心自研算法)#

IDPruner (Importance and Diversity Pruner) 是 AngelSlim 的核心视觉 Token 剪枝算法。它通过引入信息检索领域的重排序机制,解决了 MLLM 在极高压缩比下精度大幅退化的问题。

1. 算法动机#

MLLM 推理中的视觉 Token 存在显著冗余。现有的剪枝方案往往陷入局部最优:

  • 仅关注重要性 (Importance):导致 Token 极度向前景目标(如人脸、主体)聚集,丢失对全局推理至关重要的背景上下文。

  • 仅关注多样性 (Diversity):倾向于均匀采样,虽保证了覆盖度,但容易保留任务无关的噪声且丢失关键细节。

我们的方法兼顾了多样性维度和重要性维度,并且超过了其他的两者兼顾的方法,将两个维度的结合推向帕累托最优。

2. 技术核心#

IDPruner 的决策逻辑由三个要素驱动:

  1. 重要性度量 (Importance Source):采用经过端到端训练的轻量化 Scorer(评分器),预测每个 Token 对最终语义生成的贡献度。

  2. 相似性度量 (Similarity Source):利用模型自身的视觉隐藏层特征向量,在特征空间计算 Token 间的余弦相似度以识别冗余。

  3. MMR 选择机制 (Maximal Marginal Relevance):采用贪心策略迭代选择 Token,目标是最大化以下函数: $$v^* = \arg \max_{v_i \in V \setminus S} [\lambda \cdot \text{Imp}(v_i) - (1 - \lambda) \cdot \max_{v_j \in S} \text{Sim}(v_i, v_j)]$$ 通过动态惩罚与已选集合高度相似的候选 Token,确保最终集合在保留高价值信息的同时,具备最优的语义覆盖面。

3. 实验结果 (Qwen-2.5-7B-Instruct)#

在 Qwen-2.5-7B 上的大规模评测表明,IDPruner 在 75% 甚至 90% 的极端压缩率下,性能均显著优于现有主流方法。

Method

AI2D

ChartQA

DocVQA

MMBCN

MMB

MME

MMStar

OCR

POPE

SQA

VQAT

Avg

Baseline

82.48

83.68

94.90

80.41

83.08

1702

61.88

85.30

87.80

88.45

82.74

100.0%

保留 25% Tokens

FastV

75.68

68.20

81.20

73.20

76.12

1636

51.08

43.00

85.20

83.49

80.06

87.16%

VisionZip

77.40

67.20

71.48

76.12

78.78

1637

54.86

46.50

85.76

83.99

76.21

87.55%

HiPrune

77.49

68.60

73.52

76.03

78.09

1619

54.43

47.10

86.02

84.18

76.43

87.80%

VisionSelector

79.60

72.00

93.24

75.86

78.78

1688

55.78

72.50

86.74

85.08

80.39

94.22%

DivPrune

77.98

62.00

85.32

75.77

77.84

1650

52.97

58.40

85.88

83.94

75.88

89.26%

DART

74.35

60.80

78.90

73.88

76.72

1625

52.90

46.00

84.34

84.33

71.68

85.74%

VisPruner

77.62

68.04

77.39

75.69

78.87

1657

54.01

48.70

85.68

84.18

75.17

88.31%

SCOPE

78.92

71.20

85.40

77.75

79.38

1684

56.86

61.70

86.78

85.23

79.66

92.51%

IDPruner

80.51

74.32

93.16

76.63

79.73

1695

56.49

74.00

87.06

85.52

80.83

95.18%

保留 10% Tokens

FastV

67.23

39.48

51.90

53.26

55.58

1332

38.02

24.10

76.31

79.28

72.59

68.07%

VisionZip

70.60

41.56

37.94

66.67

71.05

1462

45.19

23.40

81.06

83.24

61.06

71.84%

HiPrune

69.82

43.96

39.89

67.44

70.88

1438

45.04

23.70

80.70

82.65

62.51

72.22%

VisionSelector

74.81

62.68

87.00

68.99

71.65

1569

46.93

55.50

82.69

81.95

74.52

85.39%

DivPrune

70.11

41.36

66.20

69.42

72.16

1529

44.46

31.80

81.91

80.96

62.72

76.09%

DART

67.88

34.84

49.86

63.92

67.35

1451

42.93

24.30

79.70

80.96

54.06

69.80%

VisPruner

69.88

42.68

50.85

66.84

70.96

1442

44.14

24.40

81.03

81.11

59.66

72.60%

SCOPE

71.63

50.04

56.45

71.22

75.43

1608

48.74

34.10

84.10

82.25

70.61

79.35%

IDPruner

75.16

62.48

85.98

71.65

74.66

1618

47.48

53.90

85.43

82.80

74.43

86.47%

(注:粗体为最优值,下划线为次优值。)

4. 快速开始#

通过以下命令启动 IDPruner 的基准评测:

python tools/run_token_pruning_evaluation.py \
    --model_path "Qwen/Qwen2.5-VL-7B-Instruct" \
    --configs "configs/qwen2_5_vl/pruning/idpruner_r0.75.yaml" \
    --tasks "textvqa" \
    --output_dir "./results/idpruner_test"

关键配置说明:selector_path#

idpruner_r0.75.yaml 中,selector_path 是算法运行的核心参数,它指定了用于预测 Token 重要性的 Scorer 权重路径:

params:
    ratio: 0.9
    mmr_lambda: 0.5
    parallel_k: 1
model_related_params:
    selector_path:
        "7b": "AngelSlim/Qwen2.5-VL-7B-Instruct-Selector"
        "3b": "AngelSlim/Qwen2.5-VL-3B-Instruct-Selector"