Skip to content

关于 Equal Tokens 的计算方式以及渐进式剪枝超参数设置 #37

Description

@Ck2125

感谢作者的工作!我在复现 SparseVLM 时,对 Equal Tokens 的计算方式以及渐进式剪枝的超参数设置有两个疑问。

1. Equal Tokens 应该如何计算才更公平?

以开源代码中的 32-layer LLaVA 为例,pruning layers 为 [2, 6, 15]。

代码中针对不同目标 token budget 给出了多组渐进式剪枝配置,例如:

sparse_token_list_192 = [300, 200, 110] if not V2_0 else [300, 200, 118]
sparse_token_list_128 = [303, 110, 36]  if not V2_0 else [238, 108, 60]
sparse_token_list_96  = [238, 48, 26]   if not V2_0 else [246, 54, 28]
sparse_token_list_64  = [66, 30, 17]    if not V2_0 else [66, 34, 20]

这里讨论的是 V1,也就是 SparseVLM 的配置,还不是 V2 的 SparseVLM+。

以三个 pruning stage 后的视觉 token 数分别为 a, b, c 为例,目前代码中 Equal Tokens 的计算方式相当于:

N_equal = (2 * 576 + 4 * a + 9 * b + 17 * c) / 32

也就是按照各层输出的视觉 token 数进行平均。对于代码中的相应配置,可以得到约 192 / 128 / 96 / 64 的 Equal Tokens。

但 pruning 是在当前 layer 的 attention 计算之后发生的,因此该 pruning layer 实际进行 attention 计算时使用的仍然是剪枝前的视觉 token。

如果按照各层实际输入的视觉 token 数进行平均,我理解应该改为:

N_equal = (3 * 576 + 4 * a + 9 * b + 16 * c) / 32

此时就无法再得到原先的 192 / 128 / 96 / 64。

这个问题也与 #35 中讨论的 Equal Token Number 有关。想请问:

如果希望不同 pruning 方法在相同视觉 token 计算预算下进行公平比较,Equal Tokens 使用每层输入 token 数会更加合适?

2. 给定整体 token budget 后,pruning layers 和各阶段 token budget 是如何确定的?

即使给定一个目标 Equal Tokens,例如 192,仍然存在很多可能的配置,包括:

  • 选择哪些 layers 进行 pruning;
  • 每个 pruning stage 保留多少 token。

想请问:

  1. pruning layers(如 [2, 6, 15])是按照什么原则确定的?
  2. 给定目标 Equal Tokens 后,各 pruning stage 的 retained token numbers 是如何确定的?是否有统一的设计原则?
  3. 对于动态分辨率 VLM,初始视觉 token 数会随输入图像变化,此时应该使用 retain ratios 而不是固定的 retained token numbers。对于这种情况,设计原则是怎样?

这些超参数对于将 SparseVLM / SparseVLM+ 公平地迁移到其他 VLM 上非常关键。感谢解答!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions