swift icon indicating copy to clipboard operation
swift copied to clipboard

训练使用 "Qwen1___5-7B-Chat" ,使用quantization_bit_ = 4。 后续在推理的时候,如何使用vllm框架进行推理??

Open xiaolvtongxue-zt opened this issue 2 months ago • 3 comments

请问老师们: 在训练时候使用了 "Qwen1___5-7B-Chat" 模型进行微调,同时在训练参数中,使用quantization_bit_ = 4,进行4bit量化的训练。 后续在推理的时候,我按照提供的例子进行导入

            model, tokenizer = get_model_tokenizer(model_type =model_type, model_id_or_path=output_dir_, model_kwargs={'device_map': 'auto'})
            model.generation_config.max_new_tokens = 1024*3
            model.generation_config.max_length = 1024*2

            self.model = Swift.from_pretrained(model, ckpt_dir, inference_mode=True)
            self.template = get_template(template_type, tokenizer)

但是我发现,此时在加入微调后的模型path_to_adapter后,整体的模型参数所占用的显存,似乎并不是我在微调训练时的4bit模型该占的显存,应该时没有进行4bit量化。 如下: image

问题有:

  1. 这种情况,是否是正确的?这样的推理,是否会跟训练时不对齐?
  2. 这种情况,如果我要使用vllm框架进行推理,inference中是否有参数支持? 感恩老师们的解答

xiaolvtongxue-zt avatar Apr 13 '24 01:04 xiaolvtongxue-zt

你可以试试swift infer推理哈,然后debug一下。quantization_bit属于运行时量化(使用的是bnb),所以你需要在推理的时候 也制定量化参数。

bnb量化的模型不支持vllm加速

Jintao-Huang avatar Apr 14 '24 13:04 Jintao-Huang

你可以试试swift infer推理哈,然后debug一下。quantization_bit属于运行时量化(使用的是bnb),所以你需要在推理的时候 也制定量化参数。

bnb量化的模型不支持vllm加速

我看了相关的推理文档:

  1. 不使用vllm框架时,这边如果不进行量化指定,原始模型+微调模型似乎也能按照微调的指令来进行回复。另外,我这边根据推理的文档,在推理时,把量化参数也进行了指定并传入:
1. 指定量化参数:
model_kwargs_ = {'device_map': 'auto'}
torch_dtype = torch.bfloat16
quantization_config = BitsAndBytesConfig(load_in_4bit=True,
                                                       bnb_4bit_compute_dtype=torch_dtype,
                                                       bnb_4bit_quant_type='nf4',
                                                       bnb_4bit_use_double_quant=True)
model_kwargs_.update({'quantization_config': quantization_config})

2. 加载模型时传入:
model, tokenizer = get_model_tokenizer(model_type =model_type, model_id_or_path=output_dir_, model_kwargs=model_kwargs_)

问题1:不知道这样传是否正确??虽然推理起来可以按照微调指令进行回复,但还是不太确定。

  1. 在使用VLLM框架时,我尝试将原始模型与我微调的模型进行合并,并进行推理,但推理结果似乎不尽人意。 问题2:在普通推理下,如果不进行量化指定,原始模型+微调模型似乎也能按照微调的指令来进行回复;但在合并后进行VLLM推理就不行,回复速度确实时提升了很多,但不能按照微调指令进行回复了,很是奇怪。

xiaolvtongxue-zt avatar Apr 15 '24 01:04 xiaolvtongxue-zt

量化模型的merge lora精度损失很大的 建议训完后量化,然后使用vllm

Jintao-Huang avatar Apr 15 '24 13:04 Jintao-Huang

量化模型的merge lora精度损失很大的 建议训完后量化,然后使用vllm

您好,根据上次的反馈,我在这次使用的微调中,直接使用lora微调,并没有使用量化。quantization_bit = 0; 训练模型后,将模型进行合并(为了后续可以使用VLLM进行推理。)

CUDA_VISIBLE_DEVICES=0,1 swift export --ckpt_dir './swift_qwen/output/qwen1half-7b-chat-swift/qwen1half-7b-chat/v1-20240416-160243/checkpoint-69500' --sft_type 'lora' --merge_lora true --model_id_or_path './models/models/qwen/Qwen1___5-7B-Chat'

此时发现,这样做,模型依旧未能按照实际微调的结果(即未合并前的模型)来进行回复。 想请问老师,到底时哪一步出现问题了?很是奇怪。

xiaolvtongxue-zt avatar May 03 '24 14:05 xiaolvtongxue-zt