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
数据准备
数据样例
[
{"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中加入这个配置
"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"}
}
环境搭建
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
模型微调训练
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
模型预测
"""
调用微调以后的模型代码
"""
import warnings
warnings.filterwarnings("ignore")
import timefrom peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfigsft_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 directorydevice_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 = Nonefor 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的方法
data_size = 100
batch_size = 4
epoch = 30total_steps = (data_size / batch_size) * epoch
print("Total steps: ", total_steps)
相关文章:
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 数据准备 数据样例 [ {"id": "x3959", "conversations": [{&qu…...
邦芒面试:如何在面试中巧妙回答自己的缺点
在面试中,被问及自己的缺点时,如何巧妙回答是一门学问。恰当的回答不仅能够展示你的自我认知,还能让面试官看到你的成长潜力和积极态度。 首先,切忌谈一些看似缺点实则优点的话题,如追求完美、待人接物太客气等。这些…...
Android:身份证识别功能实现
说明: 此文使用华为SDK、百度SDK、百度在线API三种方式实现。 一、使用华为SDK实现身份证识别: 说明:免费,不需要联网。 1.AndroidManifest.xml添加权限:<uses-permission android:name"android.permissio…...
MacOS安装Homebrew教程
安装 Homebrew 是在 macOS 上管理软件包的一种简便方法。以下是安装 Homebrew 的步骤: 打开终端:你可以通过在 Spotlight 搜索栏中输入“终端”并按下回车键来打开 macOS 的终端应用程序。 执行安装命令:在终端中粘贴以下命令并按下回车键执…...
laravel如何通过DB获取一条数据并转成数组
在 Laravel 中,你可以使用原生数据库查询构建器(DB facade)来获取一条数据,并将其转换为数组。这可以通过在查询链的末尾调用 first() 方法后,使用 toArray() 方法来实现。first() 方法会返回一个 StdClass 对象&#…...
ENSP USG防火墙接入虚拟机;开启Web访问;
1.添加防火墙及云,启动防火墙; 2.配置桥接网卡; 默认账户:admin 默认密码:Admin123 #第一次登陆需修改密码; 默认G0/0/0口为管理口,而在模拟器中进入防火墙的web需如下配置: 配置 …...
数据结构算法题(力扣)——链表
以下题目建议大家先自己动手练习,再看题解代码。这里只提供一种做法,可能不是最优解。 1. 移除链表元素(OJ链接) 题目描述:给一个链表的头节点 head 和一个整数 val ,删除链表中所有满足值等于 val 的节点…...
LeetCode---391周赛
题目列表 3099. 哈沙德数 3100. 换水问题 II 3101. 交替子数组计数 3102. 最小化曼哈顿距离 一、哈沙德数 简单的模拟题,代码如下 class Solution { public:int sumOfTheDigitsOfHarshadNumber(int x) {int s 0, tmp x;while(tmp){stmp%10;tmp/10;}return x…...
微信小程序的页面交互2
一、自定义属性 (1)定义: 微信小程序中的自定义属性实际上是由data-前缀加上一个自定义属性名组成。 (2)如何获取自定义属性的值? 用到target或currentTarget对象的dataset属性可以获取数据 ÿ…...
【VSCode】修改插件地址
不想放在原始C盘下面C:\Users\{用户}\.vscode\extensions为了后续存储空间考虑,想通过添加环境变量创建名为VSCODE_EXTENSIONS的环境变量,内容指向vs Code扩展所在目录即可 直接配置环境变量,不要在有空格的文件夹下面 变量名称:…...
自然语言处理NLP概述
大家好,自然语言处理(NLP)是计算机科学领域与人工智能领域中的一个重要方向,其研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文将从自然语言处理的本质、原理和应用三个方面,对其进行概述。 一、NLP的本质 NLP是一种…...
计算机网络——37认证
认证 目标:Bob需要Alice证明他的身份 Protocol ap1.0:Alice说"A am Alice" 可能出现的问题: 在网络上Bob看不到Alice,因此Trudy可以简单的声称他是Alice 认证:重新尝试 Protocol ap2.0:Alice…...
Java中利用BitMap位图实现海量级数据去重
🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 前言 什么是BitMap?有什么用? 基本概念 位图的优势 …...
Linux知识点记录
Linux知识点记录 1. 后台运行应用程序方法一:&方法二:nohup & 2. 一个shell脚本中执行多个应用程序3. 2>&14. shell脚本清除日志5. 通过grep查找匹配字符串 1. 后台运行应用程序 参考文章:https://blog.csdn.net/Pan_peter/…...
js的check函数
在JavaScript中,并没有一个内置的名为check的函数。然而,你可以根据需求自定义一个check函数,用于执行各种验证和检查任务。这个check函数的具体作用完全取决于你如何定义和实现它。 以下是一个简单的示例,展示了如何定义一个che…...
赛尼格磁电科技邀您到场参观2024第13届生物发酵展
参展企业介绍 北京赛尼格磁电科技有限公司是一家中加合资的专业永磁组件生产商,2001年成立于中国北京。公司专业从事磁性材料的应用及各类磁系统的设计、开发及制造,公司产品广泛应用于汽车行业、建筑行业、电子行业、航海领域、医学领域、教育领域等。 …...
gpt国内怎么用?最新版本来了
claude 3 opus面世后,这几天已经有许多应用,而其精确以及从不偷懒(截止到2024年3月11日还没有偷懒)的个性,也使得我们可以用它来首次完成各种需要多轮对话的尝试。 今天我们想要进行的一项尝试就是—— 如何从一个不知…...
Vim脚本语言入门:打造你的编辑器
简介 Vim脚本语言是Vim编辑器内置的一种脚本语言,它赋予用户高度的定制和自动化编辑任务的能力。通过编写Vim脚本,用户可以根据自己的需求来扩展和改进Vim编辑器的功能,从而提高编辑效率和舒适度。 在Vim中,脚本语言被广泛用于创…...
myweb项目资料集
项目要求 前后端分离后端采用 flask 框架前端采用 vue3 框架 后端部分 Flask 3 框架: https://dormousehole.readthedocs.io/en/latest/quickstart.html Session: https://blog.csdn.net/zhangvalue/article/details/93892241 MySQL 操作…...
Kubernetes(k8s):部署、使用 metrics-server
Kubernetes(k8s):部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
