记录微调chatglm3

用于记录chatglm3的过程,防止忘记

需要注意的

可以使用xtuner -h查看有哪些功能可以使用。

[2023-10-31 11:40:18,643] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect)
10/31 11:40:22 - mmengine - INFO - Arguments received: ['xtuner', '-h']. xtuner commands use the following syntax:xtuner MODE MODE_ARGS ARGSWhere   MODE (required) is one of ('list-cfg', 'copy-cfg', 'log-dataset', 'check-custom-dataset', 'train', 'test', 'chat', 'convert', 'preprocess')MODE_ARG (optional) is the argument for specific modeARGS (optional) are the arguments for specific commandSome usages for xtuner commands: (See more by using -h for specific command!)1. List all predefined configs:xtuner list-cfg2. Copy a predefined config to a given path:xtuner copy-cfg $CONFIG $SAVE_FILE3-1. Fine-tune LLMs by a single GPU:xtuner train $CONFIG3-2. Fine-tune LLMs by multiple GPUs:NPROC_PER_NODE=$NGPUS NNODES=$NNODES NODE_RANK=$NODE_RANK PORT=$PORT ADDR=$ADDR xtuner dist_train $CONFIG $GPUS4-1. Convert the pth model to HuggingFace's model:xtuner convert pth_to_hf $CONFIG $PATH_TO_PTH_MODEL $SAVE_PATH_TO_HF_MODEL4-2. Merge the HuggingFace's adapter to the pretrained LLM:xtuner convert merge $NAME_OR_PATH_TO_LLM $NAME_OR_PATH_TO_ADAPTER $SAVE_PATH4-3. Split HuggingFace's LLM to the smallest sharded one:xtuner convert split $NAME_OR_PATH_TO_LLM $SAVE_PATH5. Chat with LLMs with HuggingFace's model and adapter:xtuner chat $NAME_OR_PATH_TO_LLM --adapter $NAME_OR_PATH_TO_ADAPTER --prompt-template $PROMPT_TEMPLATE --system-template $SYSTEM_TEMPLATE6-1. Preprocess arxiv dataset:xtuner preprocess arxiv $SRC_FILE $DST_FILE --start-date $START_DATE --categories $CATEGORIES7-1. Log processed dataset:xtuner log-dataset $CONFIG7-2. Verify the correctness of the config file for the custom dataset.xtuner check-custom-datasetRun special commands:xtuner helpxtuner versionGitHub: https://github.com/InternLM/xtuner

xtuner命令都有对应的python文件,可以在源码的xtuner/tools下找到,方便了解我们在运行命令时可以选择哪些参数

下载模型

这是我下载模型的地址。
上传到网盘上了

环境

主要是安装xtuner,使用xtuner工具继续微调。

pip install 'xtuner[deepspeed]'

也可以git上下载源码安装,就是使用命令方便一点

git clone https://github.com/InternLM/xtuner.git
cd xtuner
pip install -e '.[all]'

数据处理

之前微调Atom模型的时候使用自己收集的数据做了一个问答的csv文件,格式如下
在这里插入图片描述
需要把数据转为json格式,格式如下:

[{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
},
{"conversation":[{"system": "xxx","input": "xxx","output": "xxx"}]
}]

转换的代码如下:

import csv
import jsoncsv_file = 'data.csv'
json_file = 'output.json'data = []  # 存储转换后的数据# 读取CSV文件
with open(csv_file, 'r', encoding="utf-8") as file:reader = csv.DictReader(file)for row in reader:instruction = row['question']output = row['answer']item = {"conversation":[{# system需要填入你认为合适的语句'system': '你是一个***专家。请回答我下面的问题。','input': instruction,'output': output}]}data.append(item)# 将转换后的数据写入JSON文件
with open(json_file, 'w', encoding="utf-8") as file:json.dump(data, file, indent=4, ensure_ascii=False)print("转换完成!")

微调

XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:

xtuner list-cfg

通过xtuner copy-cfg 下载chatglm3的配置文件

xtuner copy-cfg chatglm3_6b_base_qlora_alpaca_zh_e3  .

这行命令会下载一个chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py,接下来我们需要更改这个文件。

  • pretrained_model_name_or_path:改为chatglm3模型路径
  • alpaca_zh_path:改为json文件路径
  • max_epochs:改为你需要的训练轮数
  • evaluation_inputs:(可选)改成自己的问题

微调启动!!

NPROC_PER_NODE=2 xtuner train chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py --work-dir 保存路径

pt转hf

xtuner convert pth_to_hf  chatglm3_6b_base_qlora_alpaca_zh_e3_copy.py  训练保存的pth模型路径  hf模型保存路径

合并模型

xtuner convert merge chatglm3模型路径  上面的hf模型保存路径  合并模型保存路径

测试

使用xtuner的chat进行测试,注意一定要填–prompt-template,不然他默认选择的是PROMPT_TEMPLATE的default的值,会报错,原因如下:
在这里插入图片描述
如果你是源码运行的话也可以把default的值改为’default’。

运行chat代码测试模型

xtuner chat 合并模型路径 --prompt-template default

在这里插入图片描述

参考

https://github.com/InternLM/xtuner/blob/151917720c7d57d02b78d9972e4b6ff755de93a0/README_zh-CN.md

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

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

相关文章

软件测试之接口测试详解

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给…

C++启动线程的方法

&#xff08;1&#xff09;函数指针 情况一&#xff1a;主线程有join&#xff0c;正常执行 #include <thread> #include <iostream>void work(int num) {while(num-- > 0) {std::cout << num << std::endl;} }int main() {std::thread t(work, 5);…

塔望食观察丨从“一药难求”看国内退烧药品牌是怎样炼成的

随着新冠疫情防疫的全面放开&#xff0c;感染患者不断增多&#xff0c;市民在未知的恐慌中开启了囤药模式&#xff0c;药店中的“四类药”&#xff08;退烧、止咳、抗病毒、抗生素类药品&#xff09;被一抢而空&#xff0c;尤其是以退烧类药物更为短缺&#xff0c;以解热镇痛的…

简单工厂模式

1 概念及特点 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。 通过专门定义一个类来负责创建其他类的实例&#xff0c;被创建的实例通常都具有共同的父类。 简单工厂模式可以减少客户程序对类创建过程的依赖。 2 实现步骤 1. 提供一个工厂类 简单工厂模式的核…

针灸养生服务预约小程序的效果如何

针灸服务的市场需求度很高&#xff0c;每个城市中都有不少相关品牌&#xff0c;对商家来说&#xff0c;如何引流拓客、打造品牌是生意开展的首要条件之一&#xff0c;且主要以同城用户为主&#xff0c;或连锁情况下为各店引流&#xff0c;但传统线下模式很难实现生意拓展。 那…

缓存和数据库一致性解决方案

引入缓存提高性能 如果你的业务处于起步阶段&#xff0c;流量非常小&#xff0c;那无论是读请求还是写请求&#xff0c;直接操作数据库即可&#xff0c;这时你的架构模型是这样的&#xff1a; 但随着业务量的增长&#xff0c;你的项目请求量越来越大&#xff0c;这时如果每次都…

双十一限时优惠!沃通SSL证书、代码签名证书年度好价

2023年11月01日至11月11日&#xff0c;沃通2023“双十一限时特惠”活动&#xff0c;精选9款SSL证书、国密SSL证书、代码签名证书产品推出年度好价&#xff0c;部分SSL证书产品低至5折&#xff0c;更有EV代码签名证书爆款特惠&#xff01;多种数字证书一站式采购&#xff0c;解决…

外汇天眼:GOMAX──假网友热心教投资,高返利活动骗入金

在通讯科技如此发达的今日&#xff0c;人们愈来愈习惯透过网路交友&#xff0c;寻找志同道合的伙伴&#xff0c;甚至发展一段亲密关系。 然而&#xff0c;近年来假交友诈骗十分猖獗&#xff0c;至今已造成许多民众极大的财务损失&#xff0c;成为无法忽视的社会问题。 不久前&a…

听GPT 讲Rust源代码--library/std(6)

题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…

SQLAlchemy删除所有重复的用户|Counter类运用

Python标准库中的collections模块中的Counter类。Counter类用于计算可迭代对象中元素的出现次数&#xff0c;并以字典的形式返回结果&#xff0c;其中键是元素&#xff0c;值是该元素的出现次数。 for name, count in Counter(names).items() 是一个循环语句&#xff0c;它用于…

【小算法】C++ 时间戳转换

背景 使用 C 而不是 C 的方法来实现时间戳转换问题。 方法 简化 #include <ctime> #include <chrono> #include <iomanip> using sys_clock std::chrono::system_clock; using time_point_t sys_clock::time_point; using time_duration_t sys_clock:…

基于单片机的智能电子鼻的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、智能电子鼻系统的设计方案1.1智能电子鼻系统的设计思路1.2智能电子鼻系统的设计流程图1.3智能电子鼻系统的硬件数…

const pp = ref<boolean>(false)如何定义才可以取pp为null

1、要将pp定义为可以为null的引用类型&#xff0c;可以使用联合类型boolean | null代替boolean。具体的定义如下: const pp: Ref<boolean | null> ref(null);这样就可以将pp设置为null了。 2、 const loaded ref<Nullable<boolean>>(false); Nullable<…

leetcode第369周赛

2917. 找出数组中的 K-or 值 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。 返回 nums …

如何读懂深度学习项目python代码-慢慢调试

以文章multi-label learning from single positive为例&#xff1b; 手动print打印出你不懂的地方&#xff1b;把不会的地方单独拎出来&#xff0c;重新创建一个小文件单独运行&#xff1b;问神奇的chatgpt&#xff0c;github上有个学术型chatgpt可以帮你读懂项目代码&#xf…

对象的常见的方法

获取对象的键值对数量&#xff1a; 你可以使用 Object.keys()、Object.values() 或 Object.entries() 方法来获取对象的键、值或键值对数组&#xff0c;并然后获取数组的长度。 var person { name: "John", age: 30 }; var keys Object.keys(person); // 获取键的…

4.1 Bloom算法

一、Bloom算法介绍 1.具体效果 2.实现思路 先将原图按照一定阈值提取较亮的区域模糊提取出的图像将模糊过的图像与原图混合 3.HDR与LDR LDR&#xff08;Low Dynamic Range&#xff0c;低动态范围&#xff09; JPG、PNG格式图片RGB范围在[0,1]之间 HDR&#xff08;High Dynam…

RabbitMQ之队列Queue参数详解

public Queue( String name, boolean durable,boolean exclusive, boolean autoDelete, Map<String, Object> arguments) 分别是 name-队列标识&#xff0c;名称durable-queue队列是否持久化&#xff0c;rabbit宕机重启后&#xff0c;queue是否能被重新加载&#xff0c…

计算机网络第3章-TCP协议(2)

TCP拥塞控制 TCP拥塞控制的三种方式&#xff1a; 慢启动、拥塞避免、快速恢复 慢启动 当一条TCP连接开始时&#xff0c;cwnd的值是一个很小的MSS值&#xff0c;这使得初始发送速率大约为MSS/RTT。 在慢启动状态&#xff0c;cwnd的值以1个MSS开始并且每当传输的报文段首次被…

使用Hystrix实现请求合并,降低服务器并发压力

1.引入Hystrix <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency> 2.在启动类上开启Hystrix功能 EnableHystrix 3.请求合并实现代码 import com…