使用xtuner微调InternLM-Chat-7B

1. 安装xtuner

#激活环境
source activate test_llm
# 安装xtuner
pip install xtuner#还有一些依赖项需要安装
future>=0.6.0
cython
lxml>=3.1.0
cssselect
mmengine

2. 创建一个ft-oasst1  数据集的工作路径,进入

mkdir ft-oasst1 
cd ft-oasst1

3.XTuner 提供多个开箱即用的配置文件

# 列出所有内置配置
xtuner list-cfg

 输出

==========================CONFIGS===========================
baichuan2_13b_base_qlora_alpaca_e3
baichuan2_13b_base_qlora_alpaca_enzh_e3
baichuan2_13b_base_qlora_alpaca_enzh_oasst1_e3
.....
chatglm2_6b_qlora_alpaca_e3
chatglm2_6b_qlora_alpaca_enzh_e3
chatglm2_6b_qlora_alpaca_enzh_oasst1_e3
.....
cohere_100b_128k_sp32
deepseek_coder_6_7b_base_qlora_code_alpaca_e3
deepseek_moe_16b_base_full_oasst1_e3
deepseek_moe_16b_base_qlora_oasst1_e3
.....
gemma_2b_full_alpaca_e3
gemma_2b_it_full_alpaca_e3
gemma_2b_it_qlora_alpaca_e3
.....
.....
internlm2_7b_qlora_oasst1_e3
internlm2_7b_qlora_sql_e3
internlm2_7b_w_tokenized_dataset
.....
llama2_70b_full_wizardlm_e1
llama2_70b_int8_lora_open_platypus_e1
llama2_70b_int8_lora_open_platypus_e1_hf
.....
llava_internlm2_chat_1_8b_clip_vit_large_p14_336_e1_gpu8_pretrain
llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune
llava_internlm2_chat_20b_clip_vit_large_p14_336_e1_gpu8_pretrain
.....
mistral_7b_full_finetune_custom_dataset_e1
mistral_7b_qlora_skypile_pretrain_e1
mistral_7b_w_tokenized_dataset
.....
qwen1_5_0_5b_chat_full_alpaca_e3
qwen1_5_0_5b_chat_qlora_alpaca_e3
qwen1_5_0_5b_full_alpaca_e3
.....
qwen_1_8b_chat_qlora_alpaca_e3
qwen_1_8b_chat_qlora_alpaca_enzh_e3
qwen_1_8b_chat_qlora_alpaca_enzh_oasst1_e3
.....
qwen_72b_qlora_alpaca_e3
qwen_72b_qlora_alpaca_enzh_e3
qwen_72b_qlora_alpaca_enzh_oasst1_e3
.....
starcoder_qlora_stack_exchange_example
yi_34b_qlora_alpaca_enzh_e3
yi_6b_qlora_alpaca_enzh_e3
zephyr_7b_beta_qlora_alpaca_e3

internlm_chat_7b_qlora_oasst1_e3含义

模型名internlm_chat_7b
微调使用算法qlora
数据集oasst1
把数据集跑几次

跑3次:e3 (epoch 3 )

拷贝一个配置文件到当前目录

xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .

 生成一个internlm_chat_7b_qlora_oasst1_e3_copy.py配置文件,修改配置文件

# PART 1中
#预训练模型存放的位置
pretrained_model_name_or_path = '/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b'
#微调数据存放的位置
data_path='/root/personal_assistant/data/personal_assistant.json'
# 训练中最大的文本长度
max_length = 512
# 每一批训练样本的大小
batch_size = 2
#最大训练轮数
max_epochs = 3
# 验证的频率
evaluation_freq = 90
# 用于评估输出内容的问题(用于评估的问题尽量与数据集的question保持一致)
evaluation_inputs = ["请介绍一下你自己" ,"请做一下自我介绍"]# PART 3中
dataset=dict(type=load_dataset, path='json', data_files=dict(train=data path))
dataset_map_fn=None

 

 4.下载internlm_chat_7b模型,下载到ft-oasst1文件夹中

详见:InternLM-Chat-7B部署调用-个人记录-CSDN博客

5.从 huggingface 下载数据集openassistant-guanaco到ft-oasst1文件夹中

git clone https://huggingface.co/datasets/timdettmers/openassistant-guanaco.git

6.微调模型

微调指令

xtuner train internlm_chat_7b_qlora_oasst1_e3_copy.py# 多卡
NPROC_PER_NODE=${GPU_NUM} xtuner train internlm_chat_7b_qlora_oasst1_e3_copy.py# 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可

跑完训练后,当前路径应该长这样:

|-- internlm-chat-7b
|-- internlm_chat_7b_qlora_oasst1_e3_copy.py
|-- openassistant-guanaco
|   |-- openassistant_best_replies_eval.jsonl
|   `-- openassistant_best_replies_train.jsonl
`-- work_dirs`-- internlm_chat_7b_qlora_oasst1_e3_copy|-- 20231101_152923|   |-- 20231101_152923.log|   `-- vis_data|       |-- 20231101_152923.json|       |-- config.py|       `-- scalars.json|-- epoch_1.pth|-- epoch_2.pth|-- epoch_3.pth|-- internlm_chat_7b_qlora_oasst1_e3_copy.py`-- last_checkpoint

 

7.微调后参数转换/合并

训练后的pth格式参数转Hugging Face格式

xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH  例如:
xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ./hf

将base模型与loRA模型合并

xtuner convert merge $NAME_OR_PATH_TO_LLM $NAME_OR_PATH_TO_ADAPTER $SAVE_PATH --max-shard-size 2GB  例如:
xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB

合并后

 

与原来的internlm的完全一样 

 

与合并后的模型对话

# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm_chat# 4 bit 量化加载
xtuner chat ./merged --prompt-template internlm_chat --bits 4

 效果:

 8.demo

创建文件demo.py

import torch
from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name_or_path = "merged" # 这里请修改tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model = model.eval()system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语).
- InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
- InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文.
"""messages = [(system_prompt, '')]print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============")while True:input_text = input("User  >>> ")input_text.replace(' ', '')if input_text == "exit":breakresponse, history = model.chat(tokenizer, input_text, history=messages)messages.append((input_text, response))print(f"robot >>> {response}")

 微调前
在这里插入图片描述
微调后
在这里插入图片描述 

9.自定义数据集微调

Xtuner接受jsonl格式的数据,所以我们在实际微调时,常常将文本数据转化成相应的格式进行微调,这里利用chatgpt工具帮我们写python脚本进行数据格式转换,将原xlsx格式

转换为我们需要的格式 

 再进行上述操作

结果展示

 10.xtuner补充

 

 

 

 

 

 

 

 

 

参考:XTuner大模型单卡低成本微调实战-CSDN博客 

参考:XTuner 大模型单卡低成本微调之本地实战_本地大模型微调-CSDN博客 

「浦语大模型四」Xtuner微调实战-CSDN博客 

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

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

相关文章

批量生成大量附件(如:excel,txt,pdf)压缩包等文件时前端超时,采用mq+redis异步处理和多线程优化提升性能

一.首先分析一下场景:项目中我需要从财务模块去取单证模块的数据来生成一个个excel文件 在单证那个一个提单号就是一个excel文件,我们这边一个财务发票可能会查出几千个提单,也就是会生成几百个excel,然后压缩为一个压缩包&#x…

【工具】2024年最新贵州省专业技术人员继续教育自动倍速刷课时脚本 - 篡改猴脚本

🔥🔥2024年最新贵州省专业技术人员继续教育自动倍速刷课时脚本|静音播放|自动跳过已完成的视频|解除防挂机提示|稳定极高 篡改猴脚本库国内地址:https://greasyfork.org/zh-CN/scripts/494638 一、自动播放脚本 脚本如下,仅供…

Zotero 使用入门(笔记)

参考文献:Zotero入门完整教程-共27节-免费,李长太>, 仅供参考学习

即插即用篇 | YOLOv8 引入 Strip Pooling | 重新思考场景解析的空间池化

本改进已集成到 YOLOv8-Magic 框架。 空间池化已被证明在捕获像素级预测任务的长距离上下文信息方面非常有效,如场景解析。在本文中,我们超越了通常具有N N规则形状的常规空间池化,重新思考空间池化的构成,引入了一种新的池化策略,称为条带池化,它考虑了一个长而窄的核,…

Redis不同数据类型value存储

一、Strings redis中String的底层没有用c的char来实现,而是使用SDS数据结构( char buf[])。 缺点:浪费空间 优势: 1.c字符串不记录自身的长度,所以获取一个字符串长度的复杂度是O(N),但是SDS记录分配的长度alloc,已使用长度len,获取长度的…

品味Fendi club:精酿啤酒的精致与与众不同

啤酒,作为世界三大饮料之一,其口感和品质的差异能给人们带来截然不同的体验。在众多啤酒中,Fendi club以其与众不同的精酿啤酒风格,吸引了无数热爱啤酒的人。 Fendi club啤酒的精致与与众不同,首先体现在其酿造工艺上。…

Nature子刊:常见口服药的副作用原来这么大!

哥伦比亚大学Harris H. Wang团队 在《Nature Microbiology》期刊上(IF28.3)发表了关于409种细菌-药物对揭示肠道微生物群扰动的驱动因素的文章,该研究通过对转录组学测定结果进行生信分析,强调了大规模转录组学在肠道微生物-外源化学物相互作用的功能发…

AI应用案例:供应链平台健康状况和发展趋势分析

某供应链平台在2019年就遍布了中国320个城市,为2600多家企业提供超40万个品类的供应链服务。它是通过直供城市终端销售门店,甚至是消费者,最大限度保证品牌和终端的销售利益。 但是平台交易市值较大、涉及的行业较多,而且打破了传…

6.数据库

1.实体用矩形表示,属性用椭圆表示,联系用菱形表示 2.层次模型用数表示 3.网状模型用图结构表示 4.关系模型用二维表格结构来表示 5.概念模式基本表 外模式视图 内模式存储 6.模式/内模式映像 外模式/模式映像 7.数据的物理独立性 跟内模式关系 逻辑是视图…

邦注科技给您解答 什么是注塑机模具保护器

模具监视器,这位制造业的守护神,时刻注视着模具的每一个细微变化。它的工作原理如同一位细心的侦探,利用传感器、数据采集系统和监控软件组成的精良装备,探寻模具的秘密。 传感器如同模具的耳目,敏锐地捕捉着模具的温度…

Github图片显示不出来?两步解决!

很多同学可能和我一样,在GitHub中找一些项目或者资料的时候;总是会看到一些图片显示不出来,或者数学公式乱码: 比如这样 还有这样 其实这个主要是因为DNS污染导致的,具体大家可以百度,这边不详细介绍。 解决…

LagentAgentLego智能体工具使用

1. lagent 参考文档 https://github.com/InternLM/Tutorial/blob/camp2/agent/lagent.md 使用 LMDeploy 部署 conda activate agent lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \--server-name 127.0.0.1 \--model-name in…

JavaEE初阶-多线程4

文章目录 一、单例模式1.1 饿汉模式1.2 懒汉模式 二、阻塞队列1.1 生产者消费者模型1.1.1 现实生活举例1.1.2 生产者消费模型的两个优势1.1.2.1 解耦合1.1.2.2 削峰填谷 1.2 阻塞队列代码1.2.1 使用java标准库的阻塞队列实现生产者消费者模型1.2.2 实现自己的阻塞队列 一、单例…

30年赚1000亿美元--“量化之王”和他最传奇的基金“大奖章”的秘密

文艺复兴是华尔街最成功、最神秘的机构之一。从1988-2018年的30年里,文艺复兴仅向内部员工开放的旗舰基金“大奖章”累计创造了超过1000亿美元的收益,年均回报率高达39%。作为对比,同期“股神”巴菲特的年均回报率为20.5%。 而且,…

【Linux】-IP地址、主机名配置[5]

目录 一、IP和主机名 1、IP地址 2、特殊IP地址 3、主机名 4、在Linux中修改主机名 5、配置主机名映射 二、虚拟机配置固定IP 1、为什么需要固定IP 2、在VMware Workstation中配置固定ip 一、IP和主机名 1、IP地址 每一台联网的电脑都会有一个地址,用于和…

大模型面试常考知识点1

文章目录 1. 写出Multi-Head Attention2. Pre-Norm vs Post-Norm3. Layer NormRMS NormBatch Norm 4. SwiGLU从ReLU到SwishSwiGLU 5. AdamW6. 位置编码Transformer位置编码RoPEALibi 7. LoRA初始化 参考文献 1. 写出Multi-Head Attention import torch import torch.nn as nn …

QT6 android程序界面强制横屏显示不旋转

QT6开发的Android程序有时候旋转后程序会变形,比如想让其固定位横屏显示,就需要进行特殊设置,本文提供一种简便的设置方法。 一.AndroidManifest.xml文件介绍 Android的Manifest.xml文件是一个重要的配置文件,用于描述应用程序的…

2024最新从0部署Django项目(nginx+uwsgi+mysql)

云服务器 我这里用的是腾讯云免费试用的2H4Gcentos服务器(后升级为2H8G,保险一点提高内存) 因为网上很多关于django部属的教程都是宝塔啊,python版本控制器啊这种的,我也误打误撞安装了宝塔面板,但这里我…

浅谈运维数据安全

在数字化日益深入的今天,运维数据安全已经成为企业信息安全体系中的核心要素。运维工作涉及到企业信息系统的各个方面,从硬件维护到软件升级,从网络配置到数据备份,无一不需要严谨的数据安全保障措施。本文将从运维数据安全的重要…

民航电子数据库:select查询时部分字段缺失

目录 前言异常排查原因解决使用systemPath标签引入本地Jar包后无法打包 前言 1、对接民航电子数据库 2、框架为shardingsphere caedb mybatis 3、部分SQL查询时,会出现字段缺失的情况 4、查看日志打印出来的SQL,字段并未缺失 异常 这里省略SQL语句…