TencentPretrain icon indicating copy to clipboard operation
TencentPretrain copied to clipboard

似乎没有保存rotary_emb.inv_freq的权重

Open cristianoc20 opened this issue 1 year ago • 10 comments

似乎没有保存rotary_emb.inv_freq的权重

cristianoc20 avatar May 02 '23 03:05 cristianoc20

是只有17M的文件生成吗

jiangjingyao avatar May 04 '23 08:05 jiangjingyao

不是 大小是正常的 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正确保存这个参数)

cristianoc20 avatar May 04 '23 12:05 cristianoc20

这个权重不需要存,是算出来的,可以参考huggingface的转换代码


发件人: cristianoc20 @.> 发送时间: Thursday, May 4, 2023 8:33:22 PM 收件人: Tencent/TencentPretrain @.> 抄送: Subscribed @.***> 主题: Re: [Tencent/TencentPretrain] 似乎没有保存rotary_emb.inv_freq的权重 (Issue #58)

不是 大小是正常的 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正确保存这个参数)

― Reply to this email directly, view it on GitHubhttps://github.com/Tencent/TencentPretrain/issues/58#issuecomment-1534698839, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AE3SPV6I7XPQMG67UVNIHPTXEOOZFANCNFSM6AAAAAAXSPRTXM. You are receiving this because you are subscribed to this thread.Message ID: @.***>

ydli-ai avatar May 04 '23 12:05 ydli-ai

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

cristianoc20 avatar May 04 '23 13:05 cristianoc20

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

cristianoc20 avatar May 04 '23 13:05 cristianoc20

不是 大小是正常的 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正确保存这个参数)

你这个训练使用的命令具体是哪个呢

jiangjingyao avatar May 04 '23 13:05 jiangjingyao

不是 大小是正常的 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那个

cristianoc20 avatar May 04 '23 14:05 cristianoc20

不是 大小是正常的 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正确保存这个参数)

请问怎么修改zero_to_fp32文件 让deepspeed正确保存这个参数

yangzhipeng1108 avatar May 16 '23 03:05 yangzhipeng1108

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

cristianoc20 avatar May 16 '23 04:05 cristianoc20

这个权重不需要存,是算出来的,可以参考huggingface的转换代码 ________________________________ 发件人: cristianoc20 @.> 发送时间: Thursday, May 4, 2023 8:33:22 PM 收件人: Tencent/TencentPretrain @.> 抄送: Subscribed @.> 主题: Re: [Tencent/TencentPretrain] 似乎没有保存rotary_emb.inv_freq的权重 (Issue #58) 不是 大小是正常的 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正确保存这个参数) ― Reply to this email directly, view it on GitHub<#58 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AE3SPV6I7XPQMG67UVNIHPTXEOOZFANCNFSM6AAAAAAXSPRTXM. You are receiving this because you are subscribed to this thread.Message ID: @.>

你好,我想请问一下这个计算代码在哪里呀?我没有找到

zhoujiawei3 avatar Aug 02 '24 15:08 zhoujiawei3