Qwen 微调LoRA之后合并模型,使用 webui 测试

Qwen 微调LoRA之后合并模型

AI学习交流qq群873673497
官网turingevo.com
邮箱wmx@turingevo.com
githubhttps://github.com/turingevo
huggingfacehttps://huggingface.co/turingevo

qwen_lora_merge.py :

import os
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

def save_model_and_tokenizer(path_to_adapter, new_model_directory):
    """
    加载模型,合并模型,然后保存模型。
    加载分词器并保存。
    """
    # 检查路径有效性
    if not os.path.exists(path_to_adapter):
        raise FileNotFoundError(f"路径 {path_to_adapter} 不存在。")
    if not os.path.exists(new_model_directory):
        os.makedirs(new_model_directory, exist_ok=True)

    try:
        # 模型加载与合并
        model = AutoPeftModelForCausalLM.from_pretrained(
            path_to_adapter,
            device_map="auto",
            trust_remote_code=True
        ).eval()

        merged_model = model.merge_and_unload()
        
        # 保存合并后的模型
        merged_model.save_pretrained(
            new_model_directory, 
            max_shard_size="2048MB", 
            safe_serialization=True
        )
        
        # 加载并保存分词器
        tokenizer = AutoTokenizer.from_pretrained(
            path_to_adapter,
            trust_remote_code=True
        )
        
        # 假设我们有一个函数来保存分词器,这里只是示意
        save_tokenizer(tokenizer, new_model_directory)
        
    except Exception as e:
        # 异常处理,记录或抛出异常
        print(f"加载或保存过程中遇到错误:{e}")
        raise

def save_tokenizer(tokenizer, directory):
    """
    保存分词器到指定目录。
    """
    # 假设这里有一个路径拼接逻辑,将分词器文件保存到指定目录
    tokenizer.save_pretrained(directory)


if __name__=="__main__":

    lora_model_path="/media//huggingface_cache/out_models/qwen1_8b_chat_lora/checkpoint-1200"
    new_model_directory = "/media/huggingface_cache/out_models/qwen1_8b_chat_lora/Qwen-1_8B-Chat_law_merge"
    # 使用函数来执行任务
    save_model_and_tokenizer(lora_model_path, new_model_directory)

使用 webui 测试

web_ui.py


import torch

print(torch.cuda.is_available())
print(torch.version.cuda)
print(torch.backends.cudnn.version())

import gradio as gr

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig


MODEL_PATH="/media/huggingface_cache/out_models/qwen1_8b_chat_lora/Qwen-1_8B-Chat_law_merge"

tokenizer = AutoTokenizer.from_pretrained(
    MODEL_PATH,
    trust_remote_code=True
)

model = AutoModelForCausalLM.from_pretrained(
    MODEL_PATH,
    device_map="auto",
    trust_remote_code=True
).eval()



# Define Gradio interface components
title = "Transformer Chatbot"
description = "Enter your message and receive a response from the transformer-based language model."

def generate_answer_ui(query, history):
    response, history = model.chat(tokenizer, "你好", history=history)
    return f"> 问题:\n{query}\n\n> 回答:\n{response}\n\n>"

def main():
    iface = gr.ChatInterface(
        fn=generate_answer_ui,
        title=title,
        description=description,
        examples=[
            ["这里可以使用你微调的数据代替"],
            ["你叫什么名字?"],
        ],
    )

    iface.launch(inbrowser=True)

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值