Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用qlora做二次预训练merge后推理极慢 #23

Closed
valkryhx opened this issue Jul 12, 2023 · 10 comments
Closed

用qlora做二次预训练merge后推理极慢 #23

valkryhx opened this issue Jul 12, 2023 · 10 comments

Comments

@valkryhx
Copy link

我用qlora的方式先做了一次sft
没有merge 推理速度还行。
又用qlora做了二次pretrain 看影响的层除了qkv之外dense层也影响了 结果把二次预训练的glm2 6b基座模型和qlora adapter做完merge之后,推理速度极慢,一个问题五分钟还没出答案,不知道大佬有没有遇到过这个情况

@shuxueslpi
Copy link
Owner

@valkryhx 我觉得不是推理慢,是陷入输出循环了,如果用stream_chat的方法应该能看出来。
你是用的merge后的int4模型吗?官方的int4方法貌似不是最优的,会导致一些性能,准确性的下降。

@valkryhx
Copy link
Author

@valkryhx 我觉得不是推理慢,是陷入输出循环了,如果用stream_chat的方法应该能看出来。 你是用的merge后的int4模型吗?官方的int4方法貌似不是最优的,会导致一些性能,准确性的下降。

好的 我等会用stream方法看看。
另外为什么用您项目主页的推理方式 会报错:RuntimeError: self and mat2 must have the same dtype
我是用qlora SFT 然后加载base model时用到bitsandbytes的qconfig

config = PeftConfig.from_pretrained(peft_model_path)
q_config = BitsAndBytesConfig(load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.float32)

base_model = AutoModel.from_pretrained(config.base_model_name_or_path,
quantization_config=q_config,
trust_remote_code=True,
device_map='auto')

add adapter

model = PeftModel.from_pretrained(base_model, peft_model_path) # 这里就报错了

@shuxueslpi
Copy link
Owner

@valkryhx 各个库的版本和我的一致吗?我这里这部分一直没有报过错的。

@valkryhx
Copy link
Author

valkryhx commented Jul 13, 2023

我看您设置的bnb_4bit_compute_dtype=torch.float32
而我在做qlora的config里面是bnb_4bit_compute_dtype=torch.float16
有可能是这个原因?

@valkryhx
Copy link
Author

另外 我也看到您和bash99 讨论的帖子 THUDM/ChatGLM2-6B#141 (comment)
您项目主页提供的推理方案 是否对应这个帖子中提到的方案4呢?

@valkryhx
Copy link
Author

@valkryhx 各个库的版本和我的一致吗?我这里这部分一直没有报过错的。

这个问题排查出来了 我使用adapter推理那一步提前把peft版本回退到0.3.0了 所以报错 ,使用正确的peft==0.4.0dev就好了

@shuxueslpi
Copy link
Owner

@valkryhx 主页的对应的不是4,主页的模型没有merge,方案4的模型首先要:

python3 merge_lora_and_quantize.py \
    --lora_path saved_files/chatGLM2_6B_QLoRA_t32 \
    --output_path /tmp/qlora-model2 \
    --remote_scripts_dir remote_scripts/chatglm2-6b \
    --qbits 0

获得一个合并后的fp16模型,然后这个模型可以直接加载,那就是fp16的推理,也可以按照训练脚本里那样,用bitsandbytes的config,以nf4的方式加载进来,这个就是方案4

@valkryhx
Copy link
Author

@valkryhx 主页的对应的不是4,主页的模型没有merge,方案4的模型首先要:

python3 merge_lora_and_quantize.py \
    --lora_path saved_files/chatGLM2_6B_QLoRA_t32 \
    --output_path /tmp/qlora-model2 \
    --remote_scripts_dir remote_scripts/chatglm2-6b \
    --qbits 0

获得一个合并后的fp16模型,然后这个模型可以直接加载,那就是fp16的推理,也可以按照训练脚本里那样,用bitsandbytes的config,以nf4的方式加载进来,这个就是方案4

那主页的方案相当于方案几呢?

@shuxueslpi
Copy link
Owner

@valkryhx 主页的对应的不是4,主页的模型没有merge,方案4的模型首先要:

python3 merge_lora_and_quantize.py \
    --lora_path saved_files/chatGLM2_6B_QLoRA_t32 \
    --output_path /tmp/qlora-model2 \
    --remote_scripts_dir remote_scripts/chatglm2-6b \
    --qbits 0

获得一个合并后的fp16模型,然后这个模型可以直接加载,那就是fp16的推理,也可以按照训练脚本里那样,用bitsandbytes的config,以nf4的方式加载进来,这个就是方案4

那主页的方案相当于方案几呢?

主页相当于方案1,也就是inference_qlora.py这个脚本的方式,没有把base model和lora model合并

@valkryhx
Copy link
Author

谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants