当前位置:   article > 正文

LLaMA-Factory+qwen多轮对话微调测评_llama-factory微调qwen

llama-factory微调qwen

目录

训练的时间和效果

数据准备

数据样例

数据配置

环境搭建

模型微调训练

模型预测

运行成功的web UI


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

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

训练的时间和效果

7580例对话数据,单卡A6000,显存45GB

  1. {'train_runtime': 429687.6086, 'train_samples_per_second': 2.646, 'train_steps_per_second': 0.662, 'train_loss': 0.0977083860479767, 'epoch': 150.0}
  2. ***** train metrics *****
  3. epoch = 150.0
  4. train_loss = 0.0977
  5. train_runtime = 4 days, 23:21:27.60
  6. train_samples_per_second = 2.646
  7. train_steps_per_second = 0.662
  8. Figure saved at: /home/wangyp/Big_Model/llama_factory_sft300/training_loss.png
  9. 04/08/2024 18:26:00 - WARNING - llmtuner.extras.ploting - No metric eval_loss to plot.
  10. [INFO|modelcard.py:450] 2024-04-08 18:26:00,005 >> Dropping the following result as it does not have all the necessary fields:
  11. {'task': {'name': 'Causal Language Modeling', 'type': 'text-generation'}}

数据准备

数据样例

  1. [
  2. {"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": "如果孩子没有明确的适应证,或者他的身高已经处于正常范围内,通常不建议滥用生长激素以免出现副作用。因此,在决定使用生长激素之前,务必在医生的指导下评估孩子的具体情况,避免不必要的风险。"}]},
  3. {"id": "j26564", "conversations": [{"from": "user", "value": "好的,我明白了,我会带宝宝去儿科医生那里做个详细检查的。谢谢医生的帮助!"}, {"from": "assistant", "value": "不用客气,希望宝宝早日康复。如果还有其他问题,随时可以向我咨询。祝你和宝宝健康快乐!"}, {"from": "user", "value": "医生你好,我刚刚生下的宝宝鼻子上有一点黄点点,已经持续好几天了,这是什么东西啊?"}, {"from": "assistant", "value": "你好!对于新生儿鼻子上的黄点点,可能是黄疸的表现。黄疸是一种常见的新生儿现象,它是由于新生儿血液中胆红素水平增高造成的。可以进一步观察宝宝是否有以下症状:黄疸在其他部位,如眼睛、脸上出现;宝宝吃奶、睡觉和尿布情况是否正常;宝宝是否活动正常、有精神等。"}, {"from": "user", "value": "嗯,宝宝除了鼻子上有黄点点,其他地方没有发现黄疸的迹象。他的吃奶、睡觉和尿布情况都很正常,活动也很正常。这个黄点点有什么影响吗?"}, {"from": "assistant", "value": "如果宝宝只有鼻子上有黄点点,而其他地方没有黄疸迹象,并且宝宝的吃奶、睡觉等一切正常,一般来说是没有大问题的。但为了确认宝宝的健康状况,建议你带宝宝去当地的儿科医生那里做一个检查。医生会根据宝宝的具体情况给出更为准确的建议和诊断。"}]}
  4. ]

数据配置

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

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

  1. "wyp_cmtqa_erke": {
  2. "file_name": "/home/caofeng/llm_chat/part_of_data_wyp.json",
  3. "formatting":"sharegpt",
  4. "columns": {
  5. "messages": "conversations",
  6. "tools":"id"
  7. },
  8. "tags": {
  9. "role_tag": "from",
  10. "content_tag": "value",
  11. "user_tag": "user",
  12. "assistant_tag": "assistant"
  13. }
  14. }

环境搭建

  1. git clone https://github.com/hiyouga/LLaMA-Factory.git
  2. conda create -n llama_factory python=3.10
  3. conda activate llama_factory
  4. cd LLaMA-Factory
  5. pip install -r requirements.txt

模型微调训练

  1. CUDA_VISIBLE_DEVICES=1 python src/train_bash.py \
  2. --stage sft \
  3. --do_train \
  4. --model_name_or_path "/mnt/sdd/Qwen-7B-Chat" \
  5. --dataset wyp_cmtqa_erke \
  6. --template default \
  7. --finetuning_type lora \
  8. --output_dir "/home/wangyp/Big_Model/llama_factory_sft300" \
  9. --overwrite_cache \
  10. --per_device_train_batch_size 2 \
  11. --gradient_accumulation_steps 2 \
  12. --lr_scheduler_type cosine \
  13. --logging_steps 300 \
  14. --save_steps 56850 \
  15. --learning_rate 3e-4 \
  16. --num_train_epochs 150.0 \
  17. --plot_loss \
  18. --fp16

模型预测

  1. """
  2. 调用微调以后的模型代码
  3. """
  4. import warnings
  5. warnings.filterwarnings("ignore")
  6. import time
  7. from peft import AutoPeftModelForCausalLM
  8. from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
  9. sft_path = "/home/wangyp/Big_Model/sft150_based_sft_again_whoareyou2"
  10. # sft_path = "/home/wangyp/Big_Model/sft150_based_sft_again_whoareyou_merge"
  11. tokenizer = AutoTokenizer.from_pretrained(sft_path, trust_remote_code=True)
  12. model = AutoModelForCausalLM.from_pretrained(sft_path, device_map="auto", trust_remote_code=True).eval()
  13. import gradio as gradio
  14. # 合并微调模型
  15. # src_model_path="/home/wangyp/Big_Model/multi_chat_erke_output_qwen_30poch/checkpoint-7102"
  16. # trg_model_path="/home/wangyp/Big_Model/multi_chat_erke_output_qwen_30poch_sft/checkpoint-7102"
  17. # merge_model(src_model_path, trg_model_path)
  18. def merge_model(src_model_path, trg_model_path):
  19. model = AutoPeftModelForCausalLM.from_pretrained(
  20. src_model_path, # path to the output directory
  21. device_map="auto",
  22. trust_remote_code=True
  23. ).eval()
  24. merged_model = model.merge_and_unload()
  25. merged_model.save_pretrained(trg_model_path, max_shard_size="2048MB", safe_serialization=True)
  26. print("merge_and_unload 保存成功!")
  27. tokenizer = AutoTokenizer.from_pretrained(src_model_path, trust_remote_code=True)
  28. tokenizer.save_pretrained(trg_model_path)
  29. print("tikenizer 保存成功!")
  30. """
  31. 预测
  32. """
  33. def predict():
  34. s = ""
  35. q_list = [
  36. "我听说断掉夜奶也有助于减少牙菌斑的形成,是真的吗?",
  37. "还有其他预防和减少牙菌斑的方法吗?",
  38. "好的,我明白了。非常感谢您的建议!",
  39. "我想给我的孩子打生长激素,这个方法好吗?",
  40. "我家孩子身高一直没有长,我担心他会比同龄人矮小,所以想给他打生长激素。",
  41. "好的,那如果确实是生长激素缺乏,打生长激素会有哪些副作用吗?",
  42. "如果我孩子是由于特发性矮小症导致的,打生长激素能够增高吗?",
  43. "那什么情况下是不适合使用生长激素的呢?",
  44. "明白了,谢谢医生的解答。我会带孩子去医院咨询专业医生的意见。",
  45. ]
  46. history = None
  47. for q in (q_list):
  48. response, history = model.chat(tokenizer, q, history=history, system="你是一名医生角色,用有幽默的口吻对话询问")
  49. s += q + "\n" + response.strip() + "\n" + "================================================"+ "\n"
  50. with open("output.txt", "w", encoding="utf-8") as f:
  51. f.write(s)
  52. def multi_chat_gr(message, history):
  53. response, history = model.chat(tokenizer, message, history=history)
  54. print(len(history))
  55. print((history))
  56. print("++++++++++++++++++++++++++++++++++++")
  57. for i in range(len(response)):
  58. time.sleep(0.05)
  59. yield response[: i + 1]
  60. if __name__ == '__main__':
  61. # src_model_path="/home/wangyp/Big_Model/sft150_based_sft_again_whoareyou"
  62. # trg_model_path="/home/wangyp/Big_Model/sft150_based_sft_again_whoareyou_merge"
  63. # merge_model(src_model_path, trg_model_path)
  64. # predict()
  65. gr_instance = gradio.ChatInterface(fn=multi_chat_gr,
  66. title="这是一个大专家打造的医疗对话机器人,使用儿科对话数据进行训练,欢迎您的使用!结果仅供参考,不构成严谨的医疗建议。",
  67. chatbot=gradio.Chatbot(height=700, label="大专家AI医生", show_copy_button=True, avatar_images=["/home/wangyp/Big_Model/LLaMA-Factory-main/user.jpg","/home/wangyp/Big_Model/LLaMA-Factory-main/doctor.jpg"],render_markdown=True),
  68. textbox=gradio.Textbox(placeholder="请在这里输入您的问题", container=False, scale=7)
  69. )
  70. gr_instance.launch(share=True, server_name='0.0.0.0', server_port=6062)

tips:

计算steps的方法

  1. data_size = 100
  2. batch_size = 4
  3. epoch = 30
  4. total_steps = (data_size / batch_size) * epoch
  5. print("Total steps: ", total_steps)

运行成功的web UI

NLG-evaluation : GitHub - HeiBoWang/NLG-evaluation: A toolkit for evaluation of natural language generation (NLG), including BLEU, ROUGE, METEOR, and CIDEr.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/679970
推荐阅读
相关标签
  

闽ICP备14008679号