赞
踩
本文仅仅是测试一下ptuning技术方案,使用少量数据测试下微调流程
系统:CentOS-7
CPU: 14C28T
显卡:Tesla P40 24G
驱动: 515
CUDA: 11.7
cuDNN: 8.9.2.26
https://huggingface.co/THUDM/chatglm2-6b
下载模型相关文件到自己目录
我的是/models/chatglm2-6b
[root@ai-server chatglm2-6b]# pwd /models/chatglm2-6b [root@ai-server chatglm2-6b]# ll -h total 12G -rw-r--r--. 1 root root 678 Jul 29 09:30 cli.py -rw-r--r--. 1 root root 1.2K Jul 29 09:30 config.json -rw-r--r--. 1 root root 2.2K Jul 29 09:30 configuration_chatglm.py -rw-r--r--. 1 root root 50K Jul 29 09:30 modeling_chatglm.py -rw-r--r--. 1 root root 4.1K Jul 29 09:30 MODEL_LICENSE.txt -rw-r--r--. 1 root root 1.8G Jul 29 09:33 pytorch_model-00001-of-00007.bin -rw-r--r--. 1 root root 1.9G Jul 29 09:33 pytorch_model-00002-of-00007.bin -rw-r--r--. 1 root root 1.8G Jul 29 09:33 pytorch_model-00003-of-00007.bin -rw-r--r--. 1 root root 1.7G Jul 29 09:33 pytorch_model-00004-of-00007.bin -rw-r--r--. 1 root root 1.9G Jul 29 09:33 pytorch_model-00005-of-00007.bin -rw-r--r--. 1 root root 1.8G Jul 29 09:33 pytorch_model-00006-of-00007.bin -rw-r--r--. 1 root root 1005M Jul 29 09:32 pytorch_model-00007-of-00007.bin -rw-r--r--. 1 root root 20K Jul 29 09:30 pytorch_model.bin.index.json -rw-r--r--. 1 root root 15K Jul 29 09:30 quantization.py -rw-r--r--. 1 root root 348 Jul 29 09:30 README-env.md -rw-r--r--. 1 root root 7.9K Jul 29 09:30 README.md -rw-r--r--. 1 root root 9.9K Jul 29 09:30 tokenization_chatglm.py -rw-r--r--. 1 root root 244 Jul 29 09:30 tokenizer_config.json -rw-r--r--. 1 root root 995K Jul 29 09:30 tokenizer.model
conda create --name glm2 python=3.10
conda activate glm2
git clone https://github.com/THUDM/ChatGLM2-6B
cd ChatGLM2-6B
pip install rouge_chinese nltk jieba datasets -i https://pypi.tuna.tsinghua.edu.cn/simple
参考数据
data/train.json 文章开头【自我意识-训练数据train.json】
可以替换【AI小木】【小吕】来构建你自己的自我认识数据集
一定注意数据中格式,符号中英文等等
data/dev.json
我使用和train.json一致,正式使用是要使用真实数据
cd ptuning
修改 train.sh
--train_file data/train.json \
--validation_file data/dev.json \
--model_name_or_path /models/chatglm2-6b \
--max_steps 100 \
--logging_steps 1 \
--save_steps 50 \
sh train.sh
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.65.01 Driver Version: 515.65.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P40 Off | 00000000:03:00.0 Off | 0 | | N/A 78C P0 196W / 250W | 7845MiB / 23040MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ {'train_runtime': 2787.9684, 'train_samples_per_second': 0.574, 'train_steps_per_second': 0.036, 'train_loss': 1.142700309753418, 'epoch': 20.0} 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [46:27<00:00, 27.88s/it]***** train metrics ***** epoch = 20.0 train_loss = 1.1427 train_runtime = 0:46:27.96 train_samples = 80 train_samples_per_second = 0.574 train_steps_per_second = 0.036
train_loss 要小,如果1,2这种未调出的效果很差
如果调整了数据集,要清理缓存,缓存目录如下
/root/.cache/huggingface/datasets
output/adgen-chatglm2-6b-pt-128-2e-2/checkpoint-100
vim cli.py
import logging import os import sys import json import torch from transformers import AutoConfig, AutoModel, AutoTokenizer # 载入Tokenizer tokenizer = AutoTokenizer.from_pretrained("/models/chatglm2-6b", trust_remote_code=True) config = AutoConfig.from_pretrained("/models/chatglm2-6b", trust_remote_code=True, pre_seq_len=128) model = AutoModel.from_pretrained("/models/chatglm2-6b", config=config, trust_remote_code=True) prefix_state_dict = torch.load(os.path.join("./output/adgen-chatglm2-6b-pt-128-2e-2/checkpoint-100", "pytorch_model.bin")) new_prefix_state_dict = {} for k, v in prefix_state_dict.items(): if k.startswith("transformer.prefix_encoder."): new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict) # 之后根据需求可以进行量化 # Comment out the following line if you don't use quantization #model = model.quantize(4) model = model.half().cuda() model.transformer.prefix_encoder.float() model = model.eval() response, history = model.chat(tokenizer, "你是谁", history=[]) print(response)
python cli.py
cat web_demo.sh
PRE_SEQ_LEN=128
CUDA_VISIBLE_DEVICES=0 python3 web_demo.py \
--model_name_or_path /models/chatglm2-6b \
--ptuning_checkpoint output/adgen-chatglm2-6b-pt-128-2e-2/checkpoint-100 \
--pre_seq_len $PRE_SEQ_LEN
注意
web_demo.py
外网访问
demo.queue().launch(share=False, inbrowser=True,server_name='0.0.0.0')
sh web_demo.sh
http://192.168.0.0:7860/
好,可以体验了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。