这是一个更概念化的问题。我试图在Llama 2上执行PEFT QLoRA,特别是在imdb电影评论数据集上。我只使用650个样本进行训练,650个样本进行测试。我使用“meta-llama/Llama-2- 7 b-chat-hf”模型作为我的基本llama 2模型。在我使用SFTTrainer训练后,i将模型保存到一个目录中。如果我没有弄错的话,只将适配器权重保存到目录中,而不是整个模型权重。这样做之后,我知道这些适配器权重可以与原始模型权重一起加载。
model = PeftModel.from_pretrained(
model,
"./my_dir",
)
字符串
在这样做之后,我们应该将这些适配器权重合并到原始模型中,
merged_model = model.merge_and_unload()
型
然而,当我使用这个merged_model执行推理时,我注意到性能非常差,因为只在PEFT加载模型上进行推理,即从
model = PeftModel.from_pretrained(
model,
"./my_dir",
)
型
是理想的。这种行为是预期的吗?我正在运行这样的推理
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
pipeline = transformers.pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
prompt,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=500,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
型
有什么我可以做得更好。
1条答案
按热度按时间bxfogqkk1#
我认为你没有正确地将lora权重与基本模型合并。如下图所示:https://github.com/huggingface/peft/blob/main/examples/conditional_generation/peft_lora_seq2seq.ipynb
字符串