书生作业:XTuner

作业链接: https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md

 xtuner: https://github.com/InternLM/xtuner

环境配置

首先,按照xtuner的指令依次完成conda环境安装,以及xtuner库的安装。

然后,我们开始尝试使用QLora 进行Finetune。

数据集准备

通过执行generate_data.py,我们实现对数据的处理。

需要复制下列内容

import json

# set user name
name = 'nibaba'
# repeat time
n =  10000

# 初始化OpenAI格式的数据结构
data = [
    {
        "messages": [
            {
                "role": "user",
                "content": "请做一下自我介绍"
            },
            {
                "role": "assistant",
                "content": "我是{}的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦".format(name)
            }
        ]
    }
]

# 通过循环,将初始化的对话数据重复添加到data列表中
for i in range(n):
    data.append(data[0])

# 将data列表中的数据写入到一个名为'personal_assistant.json'的文件中
with open('personal_assistant.json', 'w', encoding='utf-8') as f:
    # 使用json.dump方法将数据以JSON格式写入文件
    # ensure_ascii=False 确保中文字符正常显示
    # indent=4 使得文件内容格式化,便于阅读
    json.dump(data, f, ensure_ascii=False, indent=4)

然后,会看到personal_assistant.json的对应输出。

模型准备

从Modelscope上下载 InterLM2-Chat-1.8B的模型,因此参数量较小,对于显存的需求较低。我们使用X-tuner中的list-cfg寻找合适的配置文件。

然后选择internlm2_1_8b_qlora_alpaca_e3

 使用copy-cfg设定config

xtuner copy-cfg internlm2_1_8b_qlora_alpaca_e3 /root/ft/config

然后我们对于配置文件/root/ft/config/internlm2_1_8b_qlora_alpaca_e3_copy.py进行一定修改。

-from xtuner.dataset.map_fns import alpaca_map_fn, template_map_fn_factory
+from xtuner.dataset.map_fns import openai_map_fn, template_map_fn_factory



-pretrained_model_name_or_path = 'internlm/internlm2-1_8b'
+pretrained_model_name_or_path = '/root/ft/model'


-alpaca_en_path = 'tatsu-lab/alpaca'
+alpaca_en_path = '/root/ft/data/personal_assistant.json'


-max_length = 2048
+max_length = 1024


-max_epochs = 3
+max_epochs = 2



-save_steps = 500
-save_total_limit = 2  # Maximum checkpoints to keep (-1 means unlimited)
+save_steps = 300
+save_total_limit = 3  # Maximum checkpoints to keep (-1 means unlimited)
 
 # Evaluate the generation performance during the training
-evaluation_freq = 500
-SYSTEM = SYSTEM_TEMPLATE.alpaca
-evaluation_inputs = [
-    '请给我介绍五个上海的景点', 'Please tell me five scenic spots in Shanghai'
-]
+evaluation_freq = 300
+SYSTEM = ''
+evaluation_inputs = ['请你介绍一下你自己', '你是谁', '你是我的小助手吗']
 
-    dataset=dict(type=load_dataset, path=alpaca_en_path),
+    dataset=dict(type=load_dataset, path='json', 


-    dataset_map_fn=alpaca_map_fn,
+    dataset_map_fn=openai_map_fn,

模型训练

在完成配置后,我们就可以开始模型训练了!
 

xtuner train /root/ft/config/internlm2_1_8b_qlora_alpaca_e3_copy.py --work-dir /root/ft/train

在训练了300轮后,我们可以进行提问

<|User|>:请你介绍一下你自己
<|Bot|>:我是游侠的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦</s>
 
<|User|>:你是谁
<|Bot|>:我是游侠的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦</s>
 
<|User|>:你是我的小助手吗
<|Bot|>:是的</s>
 

 模型转换

基于该指令,我们可以将模型转换为bin文件。

xtuner convert pth_to_hf /root/ft/train/internlm2_1_8b_qlora_alpaca_e3_copy.py /root/ft/train/iter_768.pth /root/ft/huggingface

目录如下

|-- huggingface/
    |-- adapter_config.json
    |-- xtuner_config.py
    |-- adapter_model.bin
    |-- README.md

 模型合并

lora文件不能单独使用,需要和原始文件合并。

xtuner convert merge /root/ft/model /root/ft/huggingface /root/ft/final_model

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

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

相关文章

VBA信息获取与处理第四节:获取唯一非重复值返回数组的代码

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

scanf留下的那一片云彩

【题目描述】 给出一个由O和X组成的串&#xff08;长度为1&#xff5e;80&#xff09;&#xff0c;统计得分。每个O的得分为目前连续出现的O的个数&#xff0c;X的得分为0。例如&#xff0c;OOXXOXXOOO的得分为1200100123。 输入第一行表示有n个字符串&#xff0c;后续是n行字…

【matlab基础知识代码】(十八)无约束最优化问题

min下面的x称为优化向量或者是决策变量 匿名函数法 >> f(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); x0[0; 0]; [x,b,c,d]fminsearch(f,x0), x 0.6111 -0.3056 b -0.6414 c 1 d 包含以下字段的 struct: iterations: 72 funcCount: 137 algor…

Hive SQL-DML-insert插入数据

Hive SQL-DML-insert插入数据 1. 插入静态数据 可以直接插入具体的值到Hive表中&#xff1a; INSERT INTO TABLE tablename (column1, column2, column3) VALUES (value1, value2, value3),(value4, value5, value6),...;2. 插入查询结果 将一条查询的结果直接插入到另一个表中…

软件工程基础知识,软考选择题的重点

本篇知识来自&#xff1a;软件设计师考试同步辅导 ---考点。。。。。&#xff0c;钟彩华 博伟玉 清华出版社&#xff0c;那本书。仅供学习。以下理解都是本人自己认为的。仅供参考。 本书的第132页&#xff0c;第五章知识。 目录 软件工程叙述 软件的生命周期 软件过程 软…

android studio配置Http Proxy

1、问题描述&#xff1a; Error:Unable to tunnel through proxy. Proxy returns “HTTP/1.1 400 Bad Request” 解决&#xff1a;HTTP Proxy设置 1.File→Settings…→System Settings → HTTP Proxy → Auto-detect proxy settings”&#xff1b; 2.勾选下方“Automatic prox…

Codigger:Vim的革新者,提升开发体验和功能性

深知Vim在编程和文本编辑领域的卓越地位&#xff0c;因此&#xff0c;在设计和开发过程中&#xff0c;Codigger始终将保留Vim的核心功能和高度定制能力作为首要任务。然而&#xff0c;Vim的复杂性和高度定制性也让很多新用户望而却步。为了降低这种使用门槛&#xff0c;Codigge…

常用Linux命令详细总结

一、文档编辑、过滤、查看命令 1、cp 复制文件和目录 -a 复制文件并保持文件属性 -d 若源文件为链接文件&#xff0c;则复制链接文件属性而非文件本身 -i 覆盖文件前提示&#xff0c;如果不要提示&#xff0c;在命令前加上\ -r 递归复制&#xff0c;通常用于目录的复制 …

【bug记录】清除僵尸进程,释放GPU显存

目录 1. 为什么会出现这种情况&#xff1f;2. 解决方案方法一&#xff1a;使用 fuser 命令方法二&#xff1a; 3. 小贴士 在进行深度学习或其他需要GPU支持的任务时&#xff0c;我们有时会发现虽然没有可见的进程在执行&#xff0c;但GPU资源却意外地被占用。这种情况往往会阻碍…

揭秘LLMOps,高效开发大型语言模型

大家好&#xff0c;随着人工智能&#xff08;AI&#xff09;的蓬勃发展&#xff0c;一个新兴领域语言模型运维&#xff08;LLMOps&#xff09;正逐渐成为关注的焦点。LLMOps专注于对大型语言模型&#xff08;LLMs&#xff09;&#xff0c;例如OpenAI的GPT系列&#xff0c;进行全…

ESP32重要库示例详解(一):EEPROM之Preferences库

1. 了解EEPROM 在嵌入式系统开发中&#xff0c;断电后晚能存储少量数据是常见需求。EEPROM&#xff08;Electrically Erasable Programmable Read-Only Memory&#xff09;是一种非易失性存储器&#xff0c;即使断电数据也不会丢失。ESP32的EEPROM模拟功能利用闪存空间&#x…

信创应用软件之办公流版签

信创应用软件之办公流版签 文章目录 信创应用软件之办公流版签概述流式文件版式文件电子签章厂商金山办公永中-永中Office中标-中标普华Office福昕科技e签宝法大大 概述 办公流版签软件主要包括办公中常用到的流式软件、版式软件以及电子签章。 版式文件和流式文件都是文书类…

时间范围交集查询

业务场景&#xff1a; 数据库中时开始时间与结束时间&#xff0c;筛选数据条件将这两个字段&#xff08;开始时间、结束时间&#xff09;糅合成一个字段&#xff0c;并且是范围筛选。 数据库字段&#xff1a; 筛选条件&#xff1a; 数据分析 全部包含&#xff08;子集&#…

WorkPlus im(即时通讯)集成平台助力政企数字化转型升级

随着互联网技术的不断发展&#xff0c;企业内部通讯软件已经成为企业日常运营中不可或缺的一部分。企业IM&#xff08;即时通讯&#xff09;和移动门户作为企业内部通讯软件的关键组成部分&#xff0c;为企业提供更加高效、便捷的通讯方式&#xff0c;提高了企业的运营效率。 针…

共绘财富管理新蓝图,ATFX赞助出席拉美峰会,引领家族资本新航向

全球新兴市场中&#xff0c;拉丁美洲以其非凡活力与潜力格外引人注目&#xff0c;成为全球资本竞相追逐的价值洼地。ATFX自2019年开设墨西哥办事处以来&#xff0c;持续深耕拉美市场已成为头部品牌。自4月行业资深人士Ergin Erdemir掌舵拉美业务后&#xff0c;掀起市场营销新浪…

队列的实现以及队列如何实现栈

一、队列的定义 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为 队尾 出队列&#xff1a;进行删除操作的一端称为 队头 …

选型前必看,西门子五大系列PLC的区别及特点

西门子是全球知名的自动化解决方案提供商&#xff0c;其PLC&#xff08;可编程逻辑控制器&#xff09;系列产品广泛应用于工业控制领域。不同系列的PLC在功能、性能和适用范围上有所区别。本文将详细介绍西门子PLC各个系列的特点和区别&#xff0c;以及在实践应用时如何采用无线…

用vsCode开发uni-app(vue + ts)项目流程

提示:记录项目创建流程 文章目录 前言一、安装 uni-app 插件二、ts 类型校验1.安装类型声明文件2.配置 tsconfig,json三、json 注释问题四、组件引入1. 安装 uni-app2. 组件自动引入3. 配置 ts 类型五、小程序端 Pinia 持久化六、uni.request 请求封装七、请求成功提取数据和设…

内容付费小程序功能源码系统 带完整的安装代码包以及搭建部署教程

随着互联网技术的不断进步&#xff0c;内容创作和传播方式发生了翻天覆地的变化。用户对于高质量、有价值的内容需求日益增长&#xff0c;而内容创作者也希望通过自己的专业知识、经验分享等方式获取经济回报。然而&#xff0c;传统的内容分发方式存在诸多局限性&#xff0c;如…

使用map类型的参数在mapper.xml中使用案例

使用map类型的参数在mapper.xml中使用案例 简介&#xff1a;在常见的开发中&#xff0c;对于参数的装载一般使用map类型方式&#xff0c;这样可以避免创建很多参数实体类&#xff0c;不管嵌套多层的数据参数都可以通过map拿取&#xff0c;对于嵌套多层的map&#xff0c;我们需…