LLaMA-Factory+qwen多轮对话微调

LLaMA-Factory地址:https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md

qwen地址:https://huggingface.co/Qwen/Qwen-7B-Chat/tree/main

数据准备

数据样例

python 复制代码
[
{"id": "x3959", "conversations": [{"from": "user", "value": "明白了,谢谢医生的解答。我会带孩子去医院咨询专业医生的意见。"}, {"from": "assistant", "value": "非常好,建议您与儿科医生进行进一步的沟通和检查,以确定最适合您孩子的治疗方案。如果对生长激素还有其他疑问,随时都可以来咨询我。希望孩子能够健康地成长!"}, {"from": "user", "value": "我想给我的孩子打生长激素,这个方法好吗?"}, {"from": "assistant", "value": "您好!打生长激素的方法并不适用于所有的孩子,是否有具体的情况需要我了解一下呢?"}, {"from": "user", "value": "我家孩子身高一直没有长,我担心他会比同龄人矮小,所以想给他打生长激素。"}, {"from": "assistant", "value": "明白了,生长激素主要适用于因生长激素缺乏而导致的矮小症治疗。首先,我建议您带孩子去儿科医生那里做详细的检查,以确定是否存在生长激素缺乏的情况。"}, {"from": "user", "value": "好的,那如果确实是生长激素缺乏,打生长激素会有哪些副作用吗?"}, {"from": "assistant", "value": "确定了生长激素缺乏后,打生长激素在使用过程中有一定的副作用风险。通常,生长激素可能会引起血糖升高、骨质疏松等问题,并偶尔会增加肿瘤的风险。因此,在决定使用生长激素之前,医生会从多个方面评估您孩子的病情,以确保安全性和有效性。"}, {"from": "user", "value": "如果我孩子是由于特发性矮小症导致的,打生长激素能够增高吗?"}, {"from": "assistant", "value": "对于特发性矮小症,如果在骨骺闭合之前正确使用生长激素,通常可以达到一定的增高效果。然而,每个孩子的情况都不尽相同,所以在使用生长激素之前,医生会详细评估孩子的生长发育情况并权衡利弊。"}, {"from": "user", "value": "那什么情况下是不适合使用生长激素的呢?"}, {"from": "assistant", "value": "如果孩子没有明确的适应证,或者他的身高已经处于正常范围内,通常不建议滥用生长激素以免出现副作用。因此,在决定使用生长激素之前,务必在医生的指导下评估孩子的具体情况,避免不必要的风险。"}]},

{"id": "j26564", "conversations": [{"from": "user", "value": "好的,我明白了,我会带宝宝去儿科医生那里做个详细检查的。谢谢医生的帮助!"}, {"from": "assistant", "value": "不用客气,希望宝宝早日康复。如果还有其他问题,随时可以向我咨询。祝你和宝宝健康快乐!"}, {"from": "user", "value": "医生你好,我刚刚生下的宝宝鼻子上有一点黄点点,已经持续好几天了,这是什么东西啊?"}, {"from": "assistant", "value": "你好!对于新生儿鼻子上的黄点点,可能是黄疸的表现。黄疸是一种常见的新生儿现象,它是由于新生儿血液中胆红素水平增高造成的。可以进一步观察宝宝是否有以下症状:黄疸在其他部位,如眼睛、脸上出现;宝宝吃奶、睡觉和尿布情况是否正常;宝宝是否活动正常、有精神等。"}, {"from": "user", "value": "嗯,宝宝除了鼻子上有黄点点,其他地方没有发现黄疸的迹象。他的吃奶、睡觉和尿布情况都很正常,活动也很正常。这个黄点点有什么影响吗?"}, {"from": "assistant", "value": "如果宝宝只有鼻子上有黄点点,而其他地方没有黄疸迹象,并且宝宝的吃奶、睡觉等一切正常,一般来说是没有大问题的。但为了确认宝宝的健康状况,建议你带宝宝去当地的儿科医生那里做一个检查。医生会根据宝宝的具体情况给出更为准确的建议和诊断。"}]}
]

数据配置

使用自定义数据集时,请更新 data/dataset_info.json 文件,该文件的格式请参考 data/README_zh.md

data/dataset_info.json中加入这个配置

python 复制代码
 "wyp_cmtqa_erke": {
  	"file_name": "/home/caofeng/llm_chat/part_of_data_wyp.json",
  	"formatting":"sharegpt",
	  "columns": {
	    "messages": "conversations",
	    "tools":"id"
	  },
	  "tags": {
	    "role_tag": "from",
	    "content_tag": "value",
	    "user_tag": "user",
	    "assistant_tag": "assistant"
	  }
}

环境搭建

bash 复制代码
git clone https://github.com/hiyouga/LLaMA-Factory.git
conda create -n llama_factory python=3.10
conda activate llama_factory
cd LLaMA-Factory
pip install -r requirements.txt

模型微调训练

bash 复制代码
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --do_train \
    --model_name_or_path "/mnt/sdd/Qwen-7B-Chat" \
    --dataset wyp_cmtqa_erke \
    --template default \
    --finetuning_type lora \
    --output_dir "/home/wangyp/Big_Model/llama_factory_sft30" \
    --overwrite_cache \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 2 \
    --lr_scheduler_type cosine \
    --logging_steps 1 \
    --save_steps 30 \
    --learning_rate 3e-4 \
    --num_train_epochs 30.0 \
    --plot_loss \
    --fp16

模型预测

python 复制代码
"""
调用微调以后的模型代码
"""
import warnings
warnings.filterwarnings("ignore")
import time

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

sft_path = "/home/wangyp/Big_Model/llama_factory_sft_merge/checkpoint-240"
tokenizer = AutoTokenizer.from_pretrained(sft_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(sft_path, device_map="auto", trust_remote_code=True).eval()
import gradio as gr


# 合并微调模型
# src_model_path="/home/wangyp/Big_Model/multi_chat_erke_output_qwen_30poch/checkpoint-7102"
# trg_model_path="/home/wangyp/Big_Model/multi_chat_erke_output_qwen_30poch_sft/checkpoint-7102"
# merge_model(src_model_path, trg_model_path)
def merge_model(src_model_path, trg_model_path):
    model = AutoPeftModelForCausalLM.from_pretrained(
        src_model_path, # path to the output directory
        device_map="auto",
        trust_remote_code=True
    ).eval()
    merged_model = model.merge_and_unload()
    merged_model.save_pretrained(trg_model_path, max_shard_size="2048MB", safe_serialization=True)
    print("merge_and_unload 保存成功!")

    tokenizer = AutoTokenizer.from_pretrained(src_model_path, trust_remote_code=True)
    tokenizer.save_pretrained(trg_model_path)
    print("tikenizer 保存成功!")



"""
预测
"""
def predict():
    s = ""
    q_list = [
        "我想给我的孩子打生长激素,这个方法好吗?",
        "我家孩子身高一直没有长,我担心他会比同龄人矮小,所以想给他打生长激素。",
        "好的,那如果确实是生长激素缺乏,打生长激素会有哪些副作用吗?",
        "如果我孩子是由于特发性矮小症导致的,打生长激素能够增高吗?",
        "那什么情况下是不适合使用生长激素的呢?",
        "明白了,谢谢医生的解答。我会带孩子去医院咨询专业医生的意见。",
              ]
    history = None
    for q in (q_list):
        response, history = model.chat(tokenizer, q, history=history)
        s += q + "\n" + response.strip() + "\n" + "================================================"+ "\n"

    with open("output.txt", "w", encoding="utf-8") as f:
        f.write(s)


def multi_chat_gr(message, history):
    response, history = model.chat(tokenizer, message, history=history)
    for i in range(len(response)):
        time.sleep(0.05)
        yield "You typed: " + response[: i + 1]



if __name__ == '__main__':
    # src_model_path="/home/wangyp/Big_Model/llama_factory_sft30/checkpoint-240"
    # trg_model_path="/home/wangyp/Big_Model/llama_factory_sft_merge/checkpoint-240"
    # merge_model(src_model_path, trg_model_path)

    # predict()


    gr_instance = gr.ChatInterface(fn=multi_chat_gr)
    gr_instance.launch(share=True, server_name='0.0.0.0', server_port=6062)

tips:

计算steps的方法

python 复制代码
data_size = 100
batch_size = 4
epoch = 30

total_steps = (data_size / batch_size) * epoch
print("Total steps: ", total_steps)
相关推荐
try2find2 天前
安装llama-cpp-python踩坑记
开发语言·python·llama
西西弗Sisyphus2 天前
LLaMA-Factory 单卡后训练微调Qwen3完整脚本
微调·llama·llama-factory·后训练
顾道长生'2 天前
(Arxiv-2024)自回归模型优于扩散:Llama用于可扩展的图像生成
计算机视觉·数据挖掘·llama·自回归模型·多模态生成与理解
Zhijun.li@Studio12 天前
【LLaMA-Factory 实战系列】二、WebUI 篇 - Qwen2.5-VL 多模态模型 LoRA 微调保姆级教程
人工智能·自然语言处理·llama·多模态大模型
1213412 天前
LLM:重构数字世界的“智能操作系统”
gpt·aigc·ai编程·llama·gpu算力
冷雨夜中漫步20 天前
Java中如何使用lambda表达式分类groupby
java·开发语言·windows·llama
扫地的小何尚22 天前
全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠
c++·人工智能·语言模型·机器人·ocr·llama·gpu
CFAteam22 天前
DeepSeek AI功能演示:如何生成Verilog脚本
人工智能·ai·fpga开发·llama
Tadas-Gao24 天前
从碳基羊驼到硅基LLaMA:开源大模型家族的生物隐喻与技术进化全景
人工智能·机器学习·大模型·llm·llama
Run_Clover24 天前
llama-factory微调大模型环境配置避坑总结
llama