【XTuner 大模型单卡低成本微调实战】学习笔记

参考学习教程【XTuner 大模型单卡低成本微调实战】

理论

Finetune简介

大语言模型

在这里插入图片描述

微调模式

增量预训练

在这里插入图片描述

指令跟随微调

在这里插入图片描述

LoRA和QLoRA

在这里插入图片描述

Xtuner介绍

在这里插入图片描述

实战

自定义微调

用 Medication QA 数据集进行微调

将数据转为 XTuner 的数据格式

目标格式:(.jsonL)

引自教程文档

  • 写提示词请Chatgpt完成,提示词如下:

Write a python file for me. using openpyxl. input file name is MedQA2019.xlsx
Step1: The input file is .xlsx. Exact the column A and column D in the sheet named “DrugQA” .
Step2: Put each value in column A into each “input” of each “conversation”. Put each value in column D into each “output” of each “conversation”.
Step3: The output file is .jsonL. It looks like:
[{
“conversation”:[
{
“system”: “xxx”,
“input”: “xxx”,
“output”: “xxx”
}
]
},
{
“conversation”:[
{
“system”: “xxx”,
“input”: “xxx”,
“output”: “xxx”
}
]
}]
Step4: All “system” value changes to “You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients’ questions.”
(引自教程文档)

  • 下载相对应的安装包
pip install openpyxl

在这里插入图片描述

  • 执行python脚本,获得格式化后的数据集
 python xlsx2jsonl.py

python脚本如下:

import openpyxl
import json# Step 1: Extract columns A and D from the sheet named "DrugQA"
def extract_data(file_path):workbook = openpyxl.load_workbook(file_path)sheet = workbook["DrugQA"]column_a = [cell.value for cell in sheet['A']]column_d = [cell.value for cell in sheet['D']]return column_a, column_d# Step 2: Create conversations from extracted data
def create_conversations(column_a, column_d):conversations = []for input_value, output_value in zip(column_a, column_d):conversation = {"system": "You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions.","input": str(input_value),"output": str(output_value)}conversations.append({"conversation": [conversation]})return conversations# Step 3: Write conversations to a JSONL file
def write_to_jsonl(conversations, output_file):with open(output_file, 'w') as jsonl_file:for conversation in conversations:jsonl_file.write(json.dumps(conversation) + '\n')if __name__ == "__main__":# Input and output file pathsinput_file_path = "MedQA2019.xlsx"output_file_path = "output.jsonl"# Step 1: Extract data from the input filecolumn_a, column_d = extract_data(input_file_path)# Step 2: Create conversationsconversations = create_conversations(column_a, column_d)# Step 3: Write conversations to JSONL filewrite_to_jsonl(conversations, output_file_path)print("Conversion completed. JSONL file created at:", output_file_path)
格式化后的数据集

在这里插入图片描述

划分训练集和测试集

  • 写提示词请Chatgpt完成,提示词如下:

my .jsonL file looks like:
[{
“conversation”:[
{
“system”: “xxx”,
“input”: “xxx”,
“output”: “xxx”
}
]
},
{
“conversation”:[
{
“system”: “xxx”,
“input”: “xxx”,
“output”: “xxx”
}
]
}]
Step1, read the .jsonL file.
Step2, count the amount of the “conversation” elements.
Step3, randomly split all “conversation” elements by 7:3. Targeted structure is same as the input.
Step4, save the 7/10 part as train.jsonl. save the 3/10 part as test.jsonl
(引自教程文档)

  • 生成的python脚本如下:
import json
import random# Step 1: Read the .jsonL file
def read_jsonl(file_path):with open(file_path, 'r') as jsonl_file:data = jsonl_file.readlines()conversations = [json.loads(line.strip()) for line in data]return conversations# Step 2: Count the amount of "conversation" elements
def count_conversations(conversations):return len(conversations)# Step 3: Randomly split "conversation" elements by 7:3
def split_conversations(conversations):random.shuffle(conversations)total_conversations = len(conversations)split_index = int(0.7 * total_conversations)train_set = conversations[:split_index]test_set = conversations[split_index:]return train_set, test_set# Step 4: Save the 7/10 part as train.jsonl, save the 3/10 part as test.jsonl
def save_to_jsonl(data, file_path):with open(file_path, 'w') as jsonl_file:for item in data:jsonl_file.write(json.dumps(item) + '\n')if __name__ == "__main__":# Input and output file pathsoutput_file_path = "output.jsonl"train_file_path = "train.jsonl"test_file_path = "test.jsonl"# Step 1: Read the .jsonL fileconversations = read_jsonl(output_file_path)# Step 2: Count the amount of "conversation" elementstotal_conversations = count_conversations(conversations)print("Total conversations:", total_conversations)# Step 3: Randomly split "conversation" elements by 7:3train_set, test_set = split_conversations(conversations)# Step 4: Save the 7/10 part as train.jsonl, save the 3/10 part as test.jsonlsave_to_jsonl(train_set, train_file_path)save_to_jsonl(test_set, test_file_path)print("Splitting completed. Train and test sets saved at:", train_file_path, "and", test_file_path)

运行数据集划分结果

pth 转 huggingface

 xtuner convert pth_to_hf ./internlm_chat_7b_qlora_medqa2019_e3.py ./work_dirs/internlm_chat_7b_qlora_medqa2019_e3/epoch_3.pth ./hf

在这里插入图片描述

训练结果

在这里插入图片描述

用 MS-Agent 数据集赋予 LLM 以 Agent 能力

在这里插入图片描述

作业

构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412511.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HANA:多个单值(Multiple)参数创建,传参,查询写法

作者 idan lian 如需转载备注出处 如果对你有帮助,请点赞收藏~~~ 1.场景 最近做hana视图,传参遇到了需要传多个单值的场景,比如看财务凭证明细表,需要跨年查看,参数刚好是年,就得分开输入,很…

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN Matlab语言…

内网穿透的应用-使用Docker搭建一个Wiki.Js知识库系统并实现分享他人远程创作

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

QT5构建套件检测不到MSVC2017解决方法

文章目录 前言一、本地环境二、现象三、解决办法 前言 记录一下 QT5 构建套件检测不到 MSVC2017 解决方法 。Qt Creator MSVC开发环境搭建(Qt Creator 集成工具 MSVC编译) 一、本地环境 电脑操作系统:Win11Qt 版本:Qt 5.14.2 …

MySQL表的基本插入查询操作详解

博学而笃志,切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…

metinfo_6.0.0 任意文件读取漏洞复现

漏洞点为/include/thumb.php 一测:/include/thumb.php?dir..././http/..././config/config_db.php 二测:/include/thumb.php?dir.....///http/.....///config/config_db.php 三测:/include/thumb.php?dirhttp/.....///.....///config/conf…

WebGL中开发AR应用

WebGL在本质上是用于在浏览器中进行3D和2D图形渲染的技术,而增强现实(AR)通常需要与现实世界的环境进行交互。要在WebGL中开发AR应用,您可以采取以下步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专…

反射计数 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C 题目描述 给定一个包含 0 和 1 的二维矩阵, 给定一个初始位置和速度。 一个物体从给定的初始位置触发, 在给定的速度下进行移动, 遇到矩阵的边缘则发生镜面反射无论物体经过 0 还是 1,都不…

Unity | AudioSource 无声音

Unity | AudioSource 无声音 你是否也会遇到相同的问题?AudioSource没声音? 解决: 注意查看一下几处声音设置:

redis数据安全(五)事务

一、概念: 1、介绍:Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命…

边缘计算的挑战和机遇(结合RDH-EI)

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 🌲序言🌴前端代码的引入🎋约定前后端交互接口🍃后端服务器代码实现🚩UserController.java🚩BookController.java ⭕总结 🌲序言 该图书管理系统,博主将一步一步进行实现。…