cristianoc20

Results 13 comments of cristianoc20

hi, i meet the same issue.Have you solve it?

不是 大小是正常的 7B和33B的我都试过 我发现腾讯的框架除了rotary_emb.inv_freq以外的权重都会保存 看上去是因为这个inv_freq不是一个可学习的参数,可以自己计算,所以不存进去state_dict()(可能了省点模型保存的内存) 我的解决方案是把这个inv_freq使用pytorch的register注册进模型的state_dict()里面,这样模型保存的参数里面就有state_dict()了。但这样会导致deepspeed使用zero_to_fp32时不把inv_freq写进bin文件(因为inv_freq没有可学习的参数,deepspeed会把他当作buff不存进去 所以需要改一下zero_to_fp32文件 让deepspeed正确保存这个参数)

是的我理解他不需要存,但是我的需求是用腾讯的框架预训练出来一个权重,然后加载到另一个框架里面做微调,而现在像huggingface的Llama权重的读取是需要这个权重的,不存的话会报错,所以我才手动实现了

我刚看了你们的转换代码 个人建议你们可以选择直接注册进去state_dict()里面 这样就不用在转换脚本里再算一次了 毕竟训练里面都算一次了 干啥不直接存呢~

> > 不是 大小是正常的 7B和33B的我都试过 我发现腾讯的框架除了rotary_emb.inv_freq以外的权重都会保存 看上去是因为这个inv_freq不是一个可学习的参数,可以自己计算,所以不存进去state_dict()(可能了省点模型保存的内存) 我的解决方案是把这个inv_freq使用pytorch的register注册进模型的state_dict()里面,这样模型保存的参数里面就有state_dict()了。但这样会导致deepspeed使用zero_to_fp32时不把inv_freq写进bin文件(因为inv_freq没有可学习的参数,deepspeed会把他当作buff不存进去 所以需要改一下zero_to_fp32文件 让deepspeed正确保存这个参数) > > 你这个训练使用的命令具体是哪个呢 用的deepspeed那个

如果用的zero3(zero2同理),在_get_fp32_state_dict_from_zero2_checkpoint中,处理buffer的时候遍历buffer的key value,把你刚才注册进去的那个freq的名字找到,把这个对应的key value存进去state_dict

因为是你没有改动我的代码的缘故 最后代码demo部分是soft-nms 效果很差 你把它改过来nms的方式应该会好很多 另外你测试的时候阈值也多测试一下 这个权重文件线上可以至少达到0.97左右

这个要看效果 我一般是先训练一些小epoch 看看loss能不能降 然后用生成的权重文件测试一下看看效果 后面的话我就会直接训练长epoch 看看更大的epoch loss是不是能降低 如果已经用很大的epoch loss还是差不多那就是数据或者别的什么问题 已经降不下去了 nan的原因有挺多的 在这份代码里面最主要的有两个原因 第一个是我们是多尺度训练 很容易就nan 你可以把尺寸的范围减少几个 甚至先用单一尺度训练 看看是不是多尺度的问题 第二个是我们的数据可能经过augument之后 有些gt box的w h变成0 导致我们的除数变成了0 你在那几处加个tf.maximum(union_area,1e-12)就可以 当然原repo也说了一般会出现几代nan 后面就会变回正常 这个我自己也是有出现 过多几个epoch就正常了

0.27的原因在前面说了 把默认的soft-nms注释掉 用普通的nms即可