赞
踩
chatglm文本生成入门级教程,其中原理性不在赘述,实操如下:
conda create -n xxx python==x.x
其中xxx为你要建立的虚拟环境的名字,自定义即可。pythonx.x为这个环境要使用的python版本。比如建立使用python3.8版本的名字为py38的虚拟环境:conda create -n py38 python3.8conda activate xxx
其中xxx为(1)中xxx,即虚拟环境名称。比如:conda activate py38pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
ssl_verify: True
channels:
4. http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64/
5. http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
6. default
7. conda-forge
show_channel_urls: True
原有
channels:
8. https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
9. https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
10. defaults
show_channel_urls: true
查看gpu使用情况:nvidia-smi
一般是进入huggingface官网下载,但目前官网进不去
进入虚拟环境
安装依赖:pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download --local-dir-use-symlinks False bigscience/bloom-560m --local-dir bloom-560m
其中bigscience/bloom-560m是需要下载的模型,local-dir是要下载到的本地路径
或者使用modelscope下载
一般要去github上下载,目前同样进不去
git clone https://gitcode.com/THUDM/ChatGLM2-6B.git
或者进入gitcode网站下载
下载源代码后,会生成一个chatglm-6b的路径
cd chatglm-6b
pip install -r requirements.txt
修改web_demo.py中的模型文件路径,修改为自己的文件路径
tokenizer = AutoTokenizer.from_pretrained("xxx/chatglm2-6b-32k", trust_remote_code=True)
model = AutoModel.from_pretrained("xxx/chatglm2-6b-32k", trust_remote_code=True).half().cuda()
CUDA_VISIBLE_DEVICES=5 python web_demo.py,即可完成对话
pip install rouge_chinese nltk jieba datasets
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1 #修改为以下命令,使用哪张卡进行训练 #torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \ CUDA_VISIBLE_DEVICES=2 python main.py \ --do_train \ --train_file /home/bxy/zw/data/train.json \ #修改训练数据验证数据 --validation_file /home/bxy/zw/data/dev.json \ --preprocessing_num_workers 10 \ --prompt_column content \ #修改数据集中的内容列名称 --response_column summary \ #修改数据集中的label列名称 --overwrite_cache \ #是否数据重新读入缓存,训练数据改变后要有此参数 --model_name_or_path /homebak/home_new/baixinyu/llm/chatglm2-6b-32k \ #模型路径 --output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \ #输出模型路径 --overwrite_output_dir \ --max_source_length 64 \ #content中的token不能超出 --max_target_length 128 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 4
bash train.sh
from transformers import AutoTokenizer, AutoModel import pandas as pd import numpy as np import json #读入测试数据 input_data_path = 'xxx.json' input_data = [] with open(input_data_path, 'r', encoding='utf-8') as f: input_data = f.readlines() contents = [] summarys = [] for line in input_data: line_dict = json.loads(line.strip('\\n')) contents.append(line_dict['content']) summarys.append(line_dict['summary']) # 模型加载 tokenizer = AutoTokenizer.from_pretrained("原始模型路径/chatglm2-6b", trust_remote_code=True) model = AutoModel.from_pretrained("原始模型路径/chatglm2-6b", trust_remote_code=True).half().cuda() model = model.eval() summary_generate = [] for content in contents: response, history = model.chat(tokenizer, content, history=[]) print("提示词:", content) print("文本生成:", response) summary_generate .append(response) # 文件保存 ,可以将提示词和生成文本进行文件保存
import torch, os from transformers import AutoConfig, AutoModel, AutoTokenizer import pandas as pd #加载微调后的模型 MODEL_PATH = "原始模型路径" CHECKPOINT_PATH = "微调后的模型路径(output中的路径)" pre_seq_len = 128 tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True) config = AutoConfig.from_pretrained(MODEL_PATH, trust_remote_code=True, pre_seq_len=pre_seq_len) model = AutoModel.from_pretrained(MODEL_PATH, config=config, trust_remote_code=True) prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "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() #读取数据 #模型对话 代码和以上一致,只是model替换为微调后的model
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。