pytorch 关于Llama 2的PEFT QLoRA培训

wz1wpwve  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(168)

这是一个更概念化的问题。我试图在Llama 2上执行PEFT QLoRA,特别是在imdb电影评论数据集上。我只使用650个样本进行训练,650个样本进行测试。我使用“meta-llama/Llama-2- 7 b-chat-hf”模型作为我的基本llama 2模型。在我使用SFTTrainer训练后,i将模型保存到一个目录中。如果我没有弄错的话,只将适配器权重保存到目录中,而不是整个模型权重。这样做之后,我知道这些适配器权重可以与原始模型权重一起加载。

  1. model = PeftModel.from_pretrained(
  2. model,
  3. "./my_dir",
  4. )

字符串
在这样做之后,我们应该将这些适配器权重合并到原始模型中,

  1. merged_model = model.merge_and_unload()


然而,当我使用这个merged_model执行推理时,我注意到性能非常差,因为只在PEFT加载模型上进行推理,即从

  1. model = PeftModel.from_pretrained(
  2. model,
  3. "./my_dir",
  4. )


是理想的。这种行为是预期的吗?我正在运行这样的推理

  1. tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
  2. pipeline = transformers.pipeline(
  3. "text-generation",
  4. model=model,
  5. tokenizer=tokenizer,
  6. torch_dtype=torch.float16,
  7. device_map="auto",
  8. )
  9. sequences = pipeline(
  10. prompt,
  11. do_sample=True,
  12. top_k=10,
  13. num_return_sequences=1,
  14. eos_token_id=tokenizer.eos_token_id,
  15. max_length=500,
  16. )
  17. for seq in sequences:
  18. print(f"Result: {seq['generated_text']}")


有什么我可以做得更好。

bxfogqkk

bxfogqkk1#

我认为你没有正确地将lora权重与基本模型合并。如下图所示:https://github.com/huggingface/peft/blob/main/examples/conditional_generation/peft_lora_seq2seq.ipynb

  1. config = PeftConfig.from_pretrained(peft_model_id)
  2. model = AutoModelForSeq2SeqLM.from_pretrained(config.base_model_name_or_path)
  3. model = PeftModel.from_pretrained(model, peft_model_id)
  4. tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)

字符串

相关问题