Closed yuguo-Jack closed 1 year ago
我是直接把整个chosen_reward和rejected_reward拿来相减计算loss的,可以train
我想问下能训的代码是在哪,如果在step2中正常运行run_chatglm.sh,走不到你刚说的这部分代码里
我没有用deepspeed chat的计算loss的代码(我自己会有divergence_ind=0的问题),没有对chosen_reward和rejected_reward进行截取,而是直接loss += -torch.log(torch.sigmoid(chosen_reward - rejected_reward)+10e-5).mean() 这样来计算的
chosen_reward,rejected_reward来自于模型的输出,跟attention_mask无关,如果你觉得不合理,你可以在代码逆转chosen_reward,rejected_reward
chatglm和opt的tokenizer行为不一致,opt的经过其tokenizer后如下所示: chatglm tokenizer后如下: 可以看出,两者的padding顺序是不同的,首先带来的问题就是chatglm的step2 reward model内计算时按原始的索引是对不齐anwser部分的rewards的,导致chosen和reject的reward的loss计算肯定是不对的。我想问下,你工程里这部分也没有改动,是怎么训起来的,你不需要把chatglm和opt的tokenizer行为对齐吗。或者说按deepspeed-chat的方式直接调用chatglm的tokenizer的输出(如上图)真的可行吗,attention_mask和sentence里感觉不太能对上。期望回复
reward model 代码已更新
chatglm和opt的tokenizer行为不一致,opt的经过其tokenizer后如下所示: chatglm tokenizer后如下: 可以看出,两者的padding顺序是不同的,首先带来的问题就是chatglm的step2 reward model内计算时按原始的索引是对不齐anwser部分的rewards的,导致chosen和reject的reward的loss计算肯定是不对的。我想问下,你工程里这部分也没有改动,是怎么训起来的,你不需要把chatglm和opt的tokenizer行为对齐吗。或者说按deepspeed-chat的方式直接调用chatglm的tokenizer的输出(如上图)真的可行吗,attention_mask和sentence里感觉不太能对上。期望回复