当前位置:   article > 正文

ChatGLM模型(服务器部署+微调)_linux chatglm

linux chatglm


ChatGLM官方源码github地址
模型huggface地址

1.部署

1.1 部署前要先安装anaconda,我是在ubuntu上安装的,具体可参考这篇博客
1.2 下面就开始ChatGLM-6B的正式部署了。

# 下载模型代码
git clone https://github.com/THUDM/ChatGLM-6B
# 切换到项目文件夹下
cd ChatGLM-6B
# 新建chatglm环境
conda create -n chatglm python==3.8
# 激活chatglm环境
conda activate chatglm
# 安装运行依赖
pip install -r requirement.txt
#命令行 Demo
python3 cli_demo.py
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.微调

# 除 ChatGLM-6B 的依赖之外,还需要安装以下依赖,在上面创建的chatglm环境下安装
!pip install rouge_chinese nltk jieba datasets -i https://mirror.sjtu.edu.cn/pypi/web/simple
# 切换到ChatGLM-6B 的ptuning文件夹下
cd /ChatGLM-6B/ptuning
  • 1
  • 2
  • 3
  • 4

数据集下载,这里给出官方提供的数据集,从 Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen 目录放到本目录(ptuning)下。

# 执行train脚本开始微调
bash train.sh
  • 1
  • 2

这里我出现了如此下错误:
在这里插入图片描述
解决方案为,在main.py文件中添加这两行:

def main():

    parser = HfArgumentParser((ModelArguments, DataTrainingArguments, Seq2SeqTrainingArguments))
    if len(sys.argv) == 2 and sys.argv[1].endswith(".json"):
        # If we pass only one argument to the script and it's the path to a json file,
        # let's parse it to get our arguments.
        model_args, data_args, training_args = parser.parse_json_file(json_file=os.path.abspath(sys.argv[1]),local_rank=-1)
    else:
        model_args, data_args, training_args = parser.parse_args_into_dataclasses()

    # 这两行
    training_args.local_rank = -1
    print(training_args.local_rank)

    # Setup logging
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.推理

bash evaluate.sh
  • 1

4. 利用微调后的模型进行验证

1.新建infer_base.py文件

import os
import torch
from transformers import AutoConfig, AutoModel, AutoTokenizer
# 原始glm模型存储地址
MODEL_PATH = "./model/chatglm-6b"
# 微调后你的模型存储地址
CHECKPOINT_PATH = "./output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000"

# 载入Tokenizer
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)

config = AutoConfig.from_pretrained(MODEL_PATH, trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained(MODEL_PATH, config=config, trust_remote_code=True).cuda()

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)

print(f"Quantized to 4 bit")
model = model.quantize(4)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()


print("用户:你好\n")
response, history = model.chat(tokenizer, "你好", history=[])
print("ChatGLM-6B:\n",response)
print("\n------------------------------------------------\n用户:")

line = input()
while line:
    response, history = model.chat(tokenizer, line, history=history)
    print("ChatGLM-6B:\n", response)
    print("\n------------------------------------------------\n用户:")
    line = input()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

2.运行infer文件

python3 infer.py
  • 1

3.运行时出现两个bug如下:
bug1:
在这里插入图片描述
解决方法:
在代码的第一列加上如下代码:

#coding=gbk
  • 1

bug2:
在这里插入图片描述
解决方法:我的是因为这个文件下载时发生错误,重新下载就可以了。
4.微调后效果
在这里插入图片描述
5.原模型效果
在这里插入图片描述
6. 这里运行原模型时突然显示内存溢出错误,重新进入服务器后,问题解决。

5.参考博客

  1. 官方部署与微调教程
  2. 个人部署微调教程
  3. 止步前行博客
  4. 程序员树先生
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/251581
推荐阅读
相关标签
  

闽ICP备14008679号