商城购物网站开发意义,android开发难吗,wordpress系统邮件设置方法,北京外包公司排行要解决的问题#xff1a; 如何让模型知道自己做什么#xff0c;是什么样身份。是谁创建了他#xff01;#xff01;#xff01;
概述
目标#xff1a;通过微调#xff0c;帮助模型认清了解对自己身份弟位
方式#xff1a;使用XTuner进行微调
微调前#xff08;回答…要解决的问题 如何让模型知道自己做什么是什么样身份。是谁创建了他
概述
目标通过微调帮助模型认清了解对自己身份弟位
方式使用XTuner进行微调
微调前回答比较官方
微调后对自己的身份有了清晰的认知
实操
# 创建自己的环境
conda create --name personal_assistant python3.10 -y# 激活环境
conda activate personal_assistant
# 进入家目录 ~的意思是 “当前用户的home路径”
cd ~
# 创建版本文件夹并进入以跟随本教程
# personal_assistant用于存放本教程所使用的东西
mkdir /root/personal_assistant cd /root/personal_assistant
mkdir /root/personal_assistant/xtuner019 cd /root/personal_assistant/xtuner019# 拉取 0.1.9 的版本源码
git clone -b v0.1.9 https://github.com/InternLM/xtuner
# 无法访问github的用户请从 gitee 拉取:
# git clone -b v0.1.9 https://gitee.com/Internlm/xtuner# 进入源码目录
cd xtuner# 从源码安装 XTuner
pip install -e .[all]数据准备
创建data文件夹用于存放用于训练的数据集
mkdir -p /root/personal_assistant/data cd /root/personal_assistant/data在data目录下创建一个json文件personal_assistant.json作为本次微调所使用的数据集。json中内容可参考下方(复制粘贴n次做数据增广数据量小无法有效微调下面仅用于展示格式下面也有生成脚本)
其中conversation表示一次对话的内容input为输入即用户会问的问题output为输出即想要模型回答的答案
[{conversation: [{input: 请介绍一下你自己,output: 我是kaai的小助手内在是上海AI实验室书生·浦语的7B大模型哦}]},{conversation: [{input: 请做一下自我介绍,output: 我是kaai的小助手内在是上海AI实验室书生·浦语的7B大模型哦}]}
]以下是一个python脚本用于生成数据集。在data目录下新建一个generate_data.py文件将以下代码复制进去然后运行该脚本即可生成数据集。
import json# 输入你的名字
name kaai
# 重复次数
n 10000# 创建初始问答数据
qa_data [{conversation: [{input: 请介绍一下你自己,output: f我是{name}的小助手内在是上海AI实验室书生·浦语的7B大模型哦}]},{conversation: [{input: 请做一下自我介绍,output: f我是{name}的小助手内在是上海AI实验室书生·浦语的7B大模型哦}]}
]# 将生成的问答数据保存到JSON文件中
file_path ./qa_data_repeated.jsonwith open(file_path, w, encodingutf-8) as file:# 使用json.dump直接写入文件而不是先创建一个大的字符串json.dump(qa_data * n, file, ensure_asciiFalse, indent4)下载模型InternLM-chat-7B、
Hugging Face 使用 Hugging Face 官方提供的 huggingface-cli 命令行工具。安装依赖:
pip install -U huggingface_hub然后新建 python 文件填入以下代码运行即可。
resume-download断点续下local-dir本地存储路径。linux 环境下需要填写绝对路径
import os# 下载模型
os.system(huggingface-cli download --resume-download internlm/internlm-chat-7b --local-dir your_path)XTuner 提供多个开箱即用的配置文件用户可以通过下列命令查看
# 列出所有内置配置
xtuner list-cfg#创建用于存放配置的文件夹config并进入
mkdir /root/personal_assistant/config cd /root/personal_assistant/config拷贝一个配置文件到当前目录xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH} 在本例中注意最后有个英文句号代表复制到当前路径
xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .修改拷贝后的文件internlm_chat_7b_qlora_oasst1_e3_copy.py修改下述位置 (这是一份修改好的文件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 中
datasetdict(typeload_dataset, pathjson, data_filesdict(traindata_path))
dataset_map_fnNone微调启动
xtuner train /root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py微调后参数转换/合并
# 创建用于存放Hugging Face格式参数的hf文件夹
mkdir /root/personal_assistant/config/work_dirs/hfexport MKL_SERVICE_FORCE_INTEL1# 配置文件存放的位置
export CONFIG_NAME_OR_PATH/root/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py# 模型训练后得到的pth格式参数存放的位置
export PTH/root/personal_assistant/config/work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth# pth文件转换为Hugging Face格式后参数存放的位置
export SAVE_PATH/root/personal_assistant/config/work_dirs/hf# 执行参数转换
xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATHMerge模型参数
export MKL_SERVICE_FORCE_INTEL1
export MKL_THREADING_LAYERGNU# 原始模型参数存放的位置
export NAME_OR_PATH_TO_LLM/root/personal_assistant/model/Shanghai_AI_Laboratory/internlm-chat-7b# Hugging Face格式参数存放的位置
export NAME_OR_PATH_TO_ADAPTER/root/personal_assistant/config/work_dirs/hf# 最终Merge后的参数存放的位置
mkdir /root/personal_assistant/config/work_dirs/hf_merge
export SAVE_PATH/root/personal_assistant/config/work_dirs/hf_merge# 执行参数Merge
xtuner convert merge \$NAME_OR_PATH_TO_LLM \$NAME_OR_PATH_TO_ADAPTER \$SAVE_PATH \--max-shard-size 2GB网页DEMO
安装网页Demo所需依赖
pip install streamlit1.24.0下载demo代码
# 创建code文件夹用于存放InternLM项目代码
mkdir /root/personal_assistant/code cd /root/personal_assistant/code
git clone https://github.com/InternLM/InternLM.git修改代码
/mnt/xtuner/xtuner019/personal_assistant/code/InternLM/chat/web_demo.pyst.cache_resource
def load_model():model (AutoModelForCausalLM.from_pretrained(/mnt/xtuner/xtuner019/personal_assistant/merge,trust_remote_codeTrue).to(torch.bfloat16).cuda())tokenizer AutoTokenizer.from_pretrained(/mnt/xtuner/xtuner019/personal_assistant/merge,trust_remote_codeTrue)return model, tokenizer
运行
streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006效果
微调前 微调后对自己的身份有了清晰的认知
你的路径应该如下
├── code
│ └── InternLM
│ ├── agent
│ │ ├── lagent.md
│ │ ├── lagent_zh-CN.md
│ │ ├── pal_inference.md
│ │ ├── pal_inference.py
│ │ ├── pal_inference_zh-CN.md
│ │ ├── README.md
│ │ └── README_zh-CN.md
│ ├── assets
│ │ ├── compass_support.svg
│ │ ├── license.svg
│ │ ├── logo.svg
│ │ ├── modelscope_logo.png
│ │ ├── robot.png
│ │ └── user.png
│ ├── chat
│ │ ├── chat_format.md
│ │ ├── chat_format_zh-CN.md
│ │ ├── lmdeploy.md
│ │ ├── lmdeploy_zh_cn.md
│ │ ├── openaoe.md
│ │ ├── openaoe_zh_cn.md
│ │ ├── react_web_demo.py
│ │ ├── README.md
│ │ ├── README_zh-CN.md
│ │ └── web_demo.py
│ ├── finetune
│ │ ├── README.md
│ │ └── README_zh-CN.md
│ ├── LICENSE
│ ├── model_cards
│ │ ├── internlm_20b.md
│ │ ├── internlm2_1.8b.md
│ │ ├── internlm2_20b.md
│ │ ├── internlm2_7b.md
│ │ └── internlm_7b.md
│ ├── README.md
│ ├── README_zh-CN.md
│ ├── requirements.txt
│ ├── sonar-project.properties
│ ├── tests
│ │ └── test_hf_model.py
│ └── tools
│ ├── convert2llama.py
│ └── README.md
├── config
│ ├── internlm_chat_7b_qlora_oasst1_e3_copy.py
│ └── work_dirs
│ └── internlm_chat_7b_qlora_oasst1_e3_copy
│ ├── 20240223_160926
│ │ ├── 20240223_160926.log
│ │ └── vis_data
│ │ └── config.py
│ ├── 20240223_161009
│ │ ├── 20240223_161009.log
│ │ └── vis_data
│ │ └── config.py
│ ├── 20240223_161051
│ │ ├── 20240223_161051.log
│ │ └── vis_data
│ │ ├── 20240223_161051.json
│ │ ├── config.py
│ │ └── scalars.json
│ ├── epoch_1.pth
│ ├── epoch_2.pth
│ ├── epoch_3.pth
│ ├── internlm_chat_7b_qlora_oasst1_e3_copy.py
│ └── last_checkpoint
├── data
│ ├── data.py
│ ├── data_QA.py
│ └── personal_assistant.json
├── hf
│ ├── adapter_config.json
│ ├── adapter_model.safetensors
│ ├── README.md
│ └── xtuner_config.py
├── internlm-chat-7b
│ ├── config.json
│ ├── configuration_internlm.py
│ ├── configuration.json
│ ├── generation_config.json
│ ├── modeling_internlm.py
│ ├── pytorch_model-00001-of-00008.bin
│ ├── pytorch_model-00002-of-00008.bin
│ ├── pytorch_model-00003-of-00008.bin
│ ├── pytorch_model-00004-of-00008.bin
│ ├── pytorch_model-00005-of-00008.bin
│ ├── pytorch_model-00006-of-00008.bin
│ ├── pytorch_model-00007-of-00008.bin
│ ├── pytorch_model-00008-of-00008.bin
│ ├── pytorch_model.bin.index.json
│ ├── README.md
│ ├── special_tokens_map.json
│ ├── tokenization_internlm.py
│ ├── tokenizer_config.json
│ └── tokenizer.model
└── merge├── added_tokens.json├── config.json├── configuration_internlm.py├── generation_config.json├── modeling_internlm.py├── pytorch_model-00001-of-00008.bin├── pytorch_model-00002-of-00008.bin├── pytorch_model-00003-of-00008.bin├── pytorch_model-00004-of-00008.bin├── pytorch_model-00005-of-00008.bin├── pytorch_model-00006-of-00008.bin├── pytorch_model-00007-of-00008.bin├── pytorch_model-00008-of-00008.bin├── pytorch_model.bin.index.json├── special_tokens_map.json├── tokenization_internlm.py├── tokenizer_config.json└── tokenizer.modelgithub链接
操作指南