【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 paths
    input_file_path = "MedQA2019.xlsx"
    output_file_path = "output.jsonl"

    # Step 1: Extract data from the input file
    column_a, column_d = extract_data(input_file_path)

    # Step 2: Create conversations
    conversations = create_conversations(column_a, column_d)

    # Step 3: Write conversations to JSONL file
    write_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 paths
    output_file_path = "output.jsonl"
    train_file_path = "train.jsonl"
    test_file_path = "test.jsonl"

    # Step 1: Read the .jsonL file
    conversations = read_jsonl(output_file_path)

    # Step 2: Count the amount of "conversation" elements
    total_conversations = count_conversations(conversations)
    print("Total conversations:", total_conversations)

    # Step 3: Randomly split "conversation" elements by 7:3
    train_set, test_set = split_conversations(conversations)

    # Step 4: Save the 7/10 part as train.jsonl, save the 3/10 part as test.jsonl
    save_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 模型, 让模型学习到它是你的智能小助手

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法练习-A+B/财务管理/实现四舍五入/牛牛的菱形字符(题目链接+题解打卡)

难度参考 难度:简单 分类:熟悉OJ与IDE的操作 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。 题目 A B1. A B - AcWing题库财务管理1004:财…

C语言学习之字典(单词拆分)

实例要求: 1、给定字符串以及字符串列表作为字典; 2、判断是否可以利用字典中出现的单词拼接出字符串; 3、不要求字典中出现的单词全部都使用; 4、字典中的单词可以重复使用; 实例分析: 1、初始化数组…

对java的interface的理解

一个例子来让我们理解更加深刻 这是我们的整体文件布局 ①A是接口 ②B和C是用来实现接口的类 ③show是我们的运行函数,用来展示 A接口 接口中定义的方法可以不用去实现,用其他类去实现(必须实现) 关键字:interface public interface A { // public static …

Android Activity的启动流程(Android-10)

前言 在Android开发中,我们经常会用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的启动流程吗?今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程,同时由于Launcher的启动后续…

JavaEE学习笔记 2024-1-12 --Tomcat服务器、Servlet

JavaEE 个人整理非商业用途,欢迎探讨与指正!! JavaEE是企业级开发 是综合性非常强的阶段  包含的知识点:JavaSE,MySQL,JDBC,WEB(HTML,CSS,JS,前端框架),Servlet,JSP,XML,AJAX等技术 目录 JavaEE1.服务器2.Tomcat服务器2.1Tomcat的使用2.2Tom…

【驱动】I2C驱动分析(二)-驱动框架

I2C驱动框架简介 I2C 驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,系统的整体框架如下所示。 最上层是应用层,在应用层用户可以直接用open read write对设备进行操作,往下是设备驱动层&a…

SpringBoot 中使用 Quartz 创建定时任务

文章目录 一、使用示例二、运行原理 一、使用示例 自定义 job: Slf4j public class MyJob extends QuartzJobBean {Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {log.info("MyJob start...");l…

【unity】麦克风声音驱动,控制身体做出不同动作

1.在角色对象上挂在animator组件,并将动作控制器与其关联 2.在角色对象上挂在audio source组件。 3.新建voice control脚本,编写代码如下: using System; using System.Collections; using System.Collections.Generic; using UnityEngine;…

【OJ】牛客链表刷题

题目 1. 链表分割1.1 题目分析1.2 代码 2. 链表的回文结构2.1 题目分析2.2 代码 这里两道与链表有关的题目均来自牛客。 1. 链表分割 1.1 题目分析 因为这里代码不能选择用c语言写,所以选择用c,因为c兼容c。 题目要求分割链表,我们可以直接弄成两个带哨…

Codeforces Round 915 (Div. 2) D题 单调栈,特殊情况入手

Problem - D - Codeforces 目录 题意: 思路: 把0放后面: ———— 然后看懂下面思路,理解单调栈: 细节: 核心代码: 题意: mex指的是该数组缺的最小的自然数,例如…

2024最有发展潜力的代理项目!格行随身wifi代理项目分析测评,轻资产靠谱创业项目推荐

最近很多网友都有创业的想法,身边创业的朋友也不在少数,当然有成功的,也有亏的血本无归的。最近网上也有很多适合新手的创业或代理项目,什么单身经济啊,大健康啊还有创业圈一直在讨论的随身WiFi代理等。当然一些创投圈…

大文件的断点续传如何实现

断点续传 断点续传是一种数据恢复技术,主要用于在读取或发送数据时,因为网络问题、磁盘问题等原因导致数据传输中断。断点续传技术允许你在已经传输的数据基础上继续传输,从而节省数据传输时间。 断点续传通常用于文件传输过程中,…

由于找不到d3dcompiler_43.dll缺失,无法打开软件的解决方法分享

d3dcompiler43.dll是什么文件?为什么会出现丢失的情况?又该如何解决呢?本文将详细介绍d3dcompiler43.dll的作用和影响,并提供6个有效的解决方法。 一、d3dcompiler43.dll是什么文件? d3dcompiler43.dll是DirectX SDK…

SQL注入入门进阶_报错注入、延时注入、python脚本盲注

SQL注入入门进阶 学习目标 本篇文章入门SQL注入,除了回显的SQL注入还存在报错注入、布尔盲注和延时注入。如果sqlmap跑不出来的还可以使用burp intrude注入或者使用python编写脚本注入。 报错注入 concat() 函数的意思是讲,全部内容连成一个字符串&a…

书生·浦语大模型实战营第五节课笔记及作业

LMDeploy 大模型量化部署实践 1 大模型部署背景 1.1 模型部署及大模型特点 1.2 大模型部署挑战及方案 2 LMDeploy简介 2.1 核心功能-量化 2.2 核心功能-推理引擎TurboMind 2.1 核心功能-推理服务api server 3 动手实践及作业 按照文档LMDeploy 的量化和部署中的步骤在Intern…

【MIdjourney】一些材质相关的关键词

1.多维剪纸(Multidimensional papercut) "Multidimensional papercut"(多维剪纸)是一种剪纸艺术形式,通过多层次的剪纸技巧和设计来创造出立体感和深度感。这种艺术形式通常涉及在不同的纸层上剪裁不同的图案,并将它们…

鸿蒙开发-UI-布局-线性布局

鸿蒙开发-序言 鸿蒙开发-工具 鸿蒙开发-初体验 鸿蒙开发-运行机制 鸿蒙开发-运行机制-Stage模型 鸿蒙开发-UI 鸿蒙开发-UI-组件 鸿蒙开发-UI-组件-状态管理 鸿蒙开发-UI-应用-状态管理 鸿蒙开发-UI-渲染控制 鸿蒙开发-UI-布局 文章目录 前言 一、基本概念 二、布局子元素 1.子元…

大模型基础2

大模型基础2 第二章:大模型的能力 语言模型的适应性:从语言模型到任务模型的转化 语言模型转化为任务模型的过程称为"适应": 任务的自然语言描述一组训练实例(输入-输出对) 进行适应的两个种方法&#xf…

OSI七层协议和五层协议

【 1 】互联网协议交互的基础 硬件设备 光缆 【 2 】OSI七层协议 物理层(Physical Layer):负责传输比特流(0和1)以及物理连接的建立和维护。数据链路层(Data Link Layer):提供可…

禅道下载安装及基本使用(项目周期管理)实施必会!!!

文章目录 前言:一、为什么要使用禅道?二、禅道的下载与安装 前言: 禅道的使用能使公司提高项目管理效率、促进团队协作、支持敏捷开发,并可根据具体需求进行个性化配置。 本文章博主将以一个项目周期来带你们了解禅道。 一、为什…