InstructGPT高效实践——【DeepSpeed( 五 )


此处的处理部分很大程度依赖于原先所定义的实例函数,由此可见,只要正确编写实例函数,后续过程基本也不会出现什么问题 。流程大致就是取出对应阶段所需的格式数据,然后使用进行处理,综上所述:
0.3 版块相关问题 【1.2.2.2 阶段数据集处理过程】中,为什么要专门对 token进行flip(翻转)操作?
这个额外操作很好解释,主要是便于进行前侧的操作 。具体来说,取用的目的在于,将输入至actor模型中,actor将根据自回归地生成后续内容,以此进行经验采集 。以基座为opt-125m的actor模型为例,该模型所能支持的最大序列长度()为512,而还将预设有最大长度(),通常为的一半,即256,余下的另一半长度将被用于生成 。那么当输入的不满足最大长度时,将需要对该进行操作(将在后续的代码中有所体现),而操作通常又是直接于序列后侧加入pad token,后的输入将变成[, ]的形式,自回归生成任务将接续进行生成——这是不合理的,因此需要先将输入进行flip翻转,翻转后进行操作,然后再flip翻转回来,后的输入就成为了[, ]的形式,对于自回归任务来说,接续的内容进行生成才是合理的 。
通过下述伪代码例子应该能更好地理解这个操作的用意 。
max_prompt_len = 5pad_token_id = 0prompt_token_ids = [233, 11, 22]# padding位于后侧 ×prompt_token_ids.padding() = [233, 11, 22, 0, 0]prompt_token_ids.flip(0) = [22, 11, 233]prompt_token_ids.flip(0).padding() = [22, 11, 233, 0, 0]# padding位于前侧 √prompt_token_ids.flip(0).padding().flip(0) = [0, 0, 233, 11, 22]
后续
关于训练阶段的具体内容可见【中篇】【下篇】 。