赞
踩
.safetensors
或者 .bin
结尾的大文件RLHF
的一个训练后,使用了 FSDP
分布式训练器.pt
文件中.from_pretrained
即可加载本地模型的参数policy.pt
里面的 state
的内容,使用 model.load_state_dict
即可使用这些参数来覆盖原始模型的参数model.save_pretrained
即可def FSDP_model_merge(model_path : str, pt_path : str, output_path : str):
print("Loading Model")
model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16)
print("Loading Checkpoint")
model.load_state_dict(torch.load(pt_path)['state'])
print("Saving Model")
model.save_pretrained(output_path,safe_serialization=True, torch_dtype=torch.float16)
print("Done")
bin
是通用的二进制存储文件safetensors
是更加安全的文件,专门存储张量数据model.save_pretrained()
方法里面的 safe_serialization
设置成 True
的话,就会用 safetensors
格式了,注意不同 transformers
版本的该方法的 safe_serialization
的默认值是不同的(较新的版本该值默认为 True
,较老的为 False
)model.save_pretrained
方法调用后,在文件夹中其实还会新增/替换这几个文件:config.json
generation_config.json
model.safetensors.index.json
model.safetensors.index.json
的文件主要是参数和文件的存储关系映射total_size
中查看模型的参数大小13476839424
,除以
1
0
9
10^9
109 之后为
13
13
13,即该模型参数大小大约为
13
G
13G
13Gmlp.down_proj
等generation_config.json
主要是生成任务的参数,还有 transformers
库的版本号config.json
比较重要,是记录该模型的重要参数LlamaForCausalLM
,中间各种网络的参数,词汇表大小等。torch_dtype
原本是 float16
,我直接保存的话类型变成了 float32
,因此文件大小翻倍了model.safetensors.index.json
里面,多了一个 self_attn.rotary_emb.inv_freq
参数,但这个貌似对于内存不是特别影响,应该问题是不大的total_size
只打了7k多Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。