Open bao-xiaoyi opened 2 months ago
您好,具体的命令发下,我们复现下
您好,具体的命令发下,我们复现下
cd Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/deepseek bash hf2mcore_deepseek_v2_moe_convertor.sh A2.4B open_llm/DeepSeek-Coder-V2-Lite-Instruct output_model/deekseek-coder-V2-lite-instruction-mg 2 1 4 false
因为 deepspeek 的开源权重是 bfloat16,huggingface load 进来会自动转换成 float32,占用空间就会 double,如果你想按原类型加载,需要将加载代码修改为如下,原类型是权重目录中 config.json 的 torch_dtype 值
config = AutoConfig.from_pretrained(args.load)
hf_model = AutoModelForCausalLM.from_pretrained(args.load, trust_remote_code=True, torch_dtype=config.torch_dtype)
或者添加 --bf16/--fp16 参数,但是我实验过,精度损失不小,不建议使用这个参数控制类型。
因为 deepspeek 的开源权重是 bfloat16,huggingface load 进来会自动转换成 float32,占用空间就会 double,如果你想按原类型加载,需要将加载代码修改为如下,原类型是权重目录中 config.json 的 torch_dtype 值
config = AutoConfig.from_pretrained(args.load) hf_model = AutoModelForCausalLM.from_pretrained(args.load, trust_remote_code=True, torch_dtype=config.torch_dtype)
或者添加 --bf16/--fp16 参数,但是我实验过,精度损失不小,不建议使用这个参数控制类型。
感谢大佬回答,但是为什么原类型加载会有精度损失?
因为 deepspeek 的开源权重是 bfloat16,huggingface load 进来会自动转换成 float32,占用空间就会 double,如果你想按原类型加载,需要将加载代码修改为如下,原类型是权重目录中 config.json 的 torch_dtype 值
config = AutoConfig.from_pretrained(args.load) hf_model = AutoModelForCausalLM.from_pretrained(args.load, trust_remote_code=True, torch_dtype=config.torch_dtype)
或者添加 --bf16/--fp16 参数,但是我实验过,精度损失不小,不建议使用这个参数控制类型。
感谢大佬回答,但是为什么原类型加载会有精度损失?
如果你加上了 --bf16/--fp16,在代码中实际是先 load 时自动转换为 fp32 类型,再在转换时执行 model.bfloat16()/float16(),会有精度损失,具体代码见 https://github.com/aeeeeeep/Pai-Megatron-Patch/blob/ad0b25d217df8ae1d6b0f67d860c8edaf7863e14/toolkits/model_checkpoints_convertor/deepseek/hf2mcore_deepseek_v2_moe.py#L219-L225
因为 deepspeek 的开源权重是 bfloat16,huggingface load 进来会自动转换成 float32,占用空间就会 double,如果你想按原类型加载,需要将加载代码修改为如下,原类型是权重目录中 config.json 的 torch_dtype 值
config = AutoConfig.from_pretrained(args.load) hf_model = AutoModelForCausalLM.from_pretrained(args.load, trust_remote_code=True, torch_dtype=config.torch_dtype)
或者添加 --bf16/--fp16 参数,但是我实验过,精度损失不小,不建议使用这个参数控制类型。
感谢大佬回答,但是为什么原类型加载会有精度损失?
如果你加上了 --bf16/--fp16,在代码中实际是先 load 时自动转换为 fp32 类型,再在转换时执行 model.bfloat16()/float16(),会有精度损失,具体代码见 https://github.com/aeeeeeep/Pai-Megatron-Patch/blob/ad0b25d217df8ae1d6b0f67d860c8edaf7863e14/toolkits/model_checkpoints_convertor/deepseek/hf2mcore_deepseek_v2_moe.py#L219-L225
同学您好,方便进入钉钉,然后加下我们一起对焦一下这个问题吗?
我在转换qwen2-7B的时候也遇到了,hf的权重15G,megatron的权重36G。 我起初以为是hf用了safetensor,但是发现转换的megatron权重不连续,不能直接用safetensor保存。 然后如果转成连续,用torch.save保存空间也更小。所以感觉可能是转换的megatron 的权重tensor不连续的问题
模型转换前后大小差别很大(30G->53G),是存在什么问题吗