CTranslate2 当批处理类型为"tokens"时,一批中的令牌数量可能超过max_batch_size,

wj8zmpe1  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(36)

你好!
使用batch_type=tokens的score_batch功能,我发现get_batch_size_increment函数通过每个例子的长度来增加批次大小,而不是给定句子中最长的示例。这可能会导致一个具有超过max_batch_size的tokens的批次。实际大小可能是max_batch_size加上填充token的数量。
CTranslate2/src/batch_reader.cc
第22行:| | return example.length(); |
作为一个小实验,我比较了按句子长度倒序排列的输入文件和未排序的原始文件。我发现即使使用相同的max_batch_size,排序后的文件也能成功完成处理,而未排序的原始文件在使用相同的max_batch_size时产生了内存不足错误。我认为这是因为未排序的输入文件中的填充token数量更多,导致批次中的实际token数量更大。

eaf3rand

eaf3rand1#

你好,
是的,在构建批次时只考虑实际的标记。在许多情况下这不是一个问题,因为输入示例首先按长度排序,因此每个批次中的填充位置数量减少了。
将填充标记也考虑进去可能更有意义。我们将在将来考虑进行这个更改。

相关问题