基础篇

F04|组批和补齐:为什么两句话变成[2,3]

基础篇约 2.2 千字1 组分步图解

从具体对象与小例子开始,理解计算过程与适用条件。

本章目录
动态图解 · F04

组批没有把两句话混成一句

为了整齐补上的PAD,会不会被模型误当成内容?

组批像把几张试卷一起送进机器,但每张试卷仍单独计算。补齐让它们占用同样多的位置;有效位置表让模型知道哪些格子只是空位。整齐的数组形状不能替代真实长度信息。

B本批几条输入。
T数组为每条输入安排了多少位置。
PAD占位符,不是原文中新增的词。

输入与适用条件:B=2,T=3,右侧补齐。可见性、取输出位置必须与这一约定一致。

1 / 4 · 长度不同

第1步,共4步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

组批没有把两句话混成一句:长度不同本步的数据表真实长度3123真实长度242—第一句三个位置,第二句两个位置。两句话仍各自独立。

第一句三个位置,第二句两个位置。两句话仍各自独立。

本步状态由图形与说明共同给出。

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

许多张量运算要求规则形状,组批可提高设备利用。

怎样实现

短句补位,同时携带真实长度和匹配的mask;生成接口的左右补齐要求应另行核对。

可能的代价与误解

只补0却不屏蔽;或者无条件取最后一列,都可能改变短句结果。

如何判断是否做对

把同一句分别单独推理和混合长度组批,核对其有效位置输出。

“组批”就是让若干条输入一起处理

一次只处理“我爱学习”,是单条输入。把“我爱学习”和“你爱”放在同一次计算中,叫一个批次(batch)。本批有2条,批大小B=2。

它们还是两条独立输入,不是把第二句话接到第一句话后面。批轴提供“一起调度”的组织方式,标准独立样本计算不让两条样本互相读取内容。尤其不能因为组批就把不同用户的上下文混起来。

上一课的两条编号是:

第0条:[1,2,3]      长度3
第1条:[4,2]        长度2

如果要放成规则的矩形表,每一行需一样长。我们把本批安排的长度设为T=3,给第二条补一个占位编号0:

input_ids = [[1,2,3],
             [4,2,0]]
shape     = [2,3]

Padding(补齐)是在短输入中增加占位项,不是在原话中补出有意义的新内容。编号0在本教材恰好是PAD;真实模型的PAD编号可能不同,也可能需要按模型配置处理。

真实长度与安排长度不是一回事

第二条真实长度仍是2,表里安排了3个位置。若生产系统把本批都补到128,形状就会是[2,128];这不证明两条原话都含128个Token。

为了告诉后续计算哪些位置是真实内容,另配一张标记表:

is_real = [[1,1,1],
           [1,1,0]]

这里1表示真实位置,0表示填充位置。这是后面padding mask(填充掩码)的基础。“掩码”先理解成决定某项能不能参与运算的标记;完整的注意力掩码要到F12再把行列关系讲清。

补左边和补右边有什么区别

右补齐把第二行写成[4,2,0];左补齐会写成[0,4,2]。两者都能表达“你爱”,但真实位置所在列不同。

如果程序总取“最后一列的预测”继续生成,右补齐行的最后一列是PAD,就可能取错位置。因此某些解码流程要求左补齐,或者必须按真实长度选取最后一个有效位置。哪种策略正确取决于生成代码和模型约定,不能只把一侧称为普适最佳方案。

本书基础算例用右补齐,因为对初读者直观;若用于生成,明确取每行最后一个有效位置,不能直接照抄[:, -1]。

补齐不等于截断,更不等于上下文压缩

补齐增加占位;截断删掉过长输入的部分内容;摘要压缩尝试用较短描述替代较长历史。删除真实内容可能让规则或证据消失,补齐本身没有这个目的。

组批也不总要把所有请求凑成同一个长方形。高性能推理可以采用长度分组或变长组织方式。本课用普通密集表解释形状,不把它包装成所有服务的真实内部存储。

为什么组批可能快,也可能让一个人等更久

同一套参数能够在多条输入上一起运算,可能更充分利用硬件。但为了凑够一批而等待,会增加某条请求的等待时间。还有一个浪费:把长度2和长度1000的两条都补到1000,会产生许多填充位置。

因此B、T不是越大越好。B说明并行组织了多少条,T影响每条安排多少位置;后续还要结合硬件、缓存和队列讨论。现在只需要能从实际输入写出编号表和有效位置表。

运行示例 · F04

为什么“你爱”最后有个0,但没有多出一个词

输入与条件。第一句“我爱学习”是 [1,2,3];第二句“你爱”是 [4,2]。希望把它们放进同一个两行表。

步骤与对象内部动作中间结果 / 新状态
1比较长度两句分别有3和2个Token统一安排长度3,不能把真实长度都改记成3。
2右补齐第二行末尾放PAD编号0ID表为 [[1,2,3],[4,2,0]]。
3记录有效性第一行全真,第二行末尾是假有效位置表为 [[1,1,1],[1,1,0]]。
4预测时选位置第一句取下标2,第二句取下标1第二行下标2是PAD,不能把它当“爱”的位置。
5计算利用率6个安排位置里有5个真实Token占位比例为 1/6;变长批处理可有其他实现,不必都填成矩形。

把过程连起来。0表示为了整齐而占的格子,并不是给“你爱”添加了新的文字;真实Token与占位必须一直能区分。

边界与反例。某些现成生成器要求左补齐;本例解释右补齐的对象语义,不承诺所有生成API都自动选择最后有效位置。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

课后自检

自检 1

长度分别为4和2的两条输入右补齐到4,编号表是什么形状?有几个PAD?

查看参考答案收起参考答案
形状[2,4],第二条增加2个PAD。真实Token总数是6,表里安排8个位置。
自检 2

把两个用户输入组成一批,就让它们共享语义上下文吗?

查看参考答案收起参考答案
不应如此。普通batch是独立样本的计算组织。跨样本共享上下文是另一件事,不能由组批推出。

机制依据:[F-PADDING][F-TENSOR]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。