批量序列填充会影响性能吗?注意力面膜有多有效?

问题描述 投票:0回答:1

在 Transformer 模型中,可变长度的序列通常会填充到批次中的最大长度。但是,如果我的序列长度差异很大,则批次可能包含大量填充(可能超过 50%)。

我对以下问题感到好奇:

PyTorch 计算 Transformer 时,填充标记会对计算速度产生负面影响吗? 注意力掩码的存在是否允许模型有效地跳过填充标记,从而仅对性能产生最小的影响?

总体而言,注意力面具的效果如何?如果我有一个只有 10% 非零值的稀疏注意力掩模,计算量是否有效减少到大约 10%?

感谢您的见解!

pytorch nlp huggingface-transformers transformer-model
1个回答
0
投票

注意力是在形状为

(batch_size, sequence_length, embedding_dimension)
的张量上计算的。计算和内存需求随着这些维度的大小而变化。

对于固定大小的输入,填充百分比不会影响性能。应用填充蒙版会产生一些较小的开销(即,没有填充蒙版可以节省一次蒙版填充操作),但在 x% 填充和 y% 填充之间,您不会看到差异。总体计算要求由张量大小决定。

对于批处理序列,将长度差异很大的序列批处理在一起可能会增加效率低下的情况。假设您有 10 个长度为

8
的序列和 10 个长度为
128
的序列。现在将这些序列填充并批处理为两批。如果均匀混合长度,您将得到序列长度为
128
的两批。如果在批处理之前按长度排序,则会得到一个序列长度为
8
的批次和另一个长度为
128
的批次。与第二种情况(一批 8 个,一批 128 个)相比,第一种情况(两批序列长度 128)需要更多的计算。

也就是说,对于固定的输入大小,您不会看到百分比填充带来的性能变化。注意操作无法“跳过”填充标记。这种方法所需的条件控制流不能很好地适应 GPU 并行执行操作的方式。填充掩码的唯一作用是它为填充标记分配 0 注意力权重。

© www.soinside.com 2019 - 2024. All rights reserved.