ChatGLM3-6B模型的部署与微调

本文记录在AutoDL平台上部署和微调ChatGLM3-6B模型的过程。

基本模型部署

租用算力

在AutoDL平台租用一张3090/4090单卡(24G)即可,PyTorch镜像选尽量新的。

进入到JupyterLab,使用清华大学提供的PyPI镜像,加快下载速度:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装必要的库,包括modelscope库和transformers库。modelscope库用于下载、缓存和加载预训练的AI模型,transformers库则包含了大量预训练模型,用于自然语言理解和生成任务:

pip install modelscope
pip install transformers

模型下载

写一个download_model.py:

> import torch from modelscope import snapshot_download, AutoModel,
> AutoTokenizer import os

# 指定模型缓存的目录。这个目录是AutoDL的临时目录。
cache_dir = '/root/autodl-tmp'

# 使用Modelscope库中的snapshot_download函数下载ZhipuAI提供的名为'chatglm3-6b'的预训练语言模型。
# 如果模型已经下载过了,它将使用缓存的版本,而不是重新下载。
# 'revision'参数指定要下载的模型的版本;'master'通常指向最新稳定版本的代码。
model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir=cache_dir, revision='master')

# 'model_dir'变量现在包含了下载的模型文件的路径。
# 接下来可以使用这个目录来加载模型和分词器(tokenizer)。

运行download_model.py脚本来下载ChatGLM3-6B模型。如果提示下载目录非空,可以rm -rf清空该目录:

python download_model.py

克隆仓库

为了确保模型下载和后续步骤的速度,执行AutoDL提供的网络加速脚本:

source /etc/network_turbo

克隆ChatGLM3的Git仓库,并安装相关依赖:

git clone https://github.com/THUDM/ChatGLM3
pip install -r requirements.txt

此时已可部署进行推理,可以运行web_demo.py。
之后,取消设置的镜像加速代理:

unset http_proxy && unset https_proxy

AdvertiseGen数据集微调

数据集

上传并解压数据集,数据集链接见ChatGLM3微调的Guide:

sudo apt-get update sudo apt-get install unzip unzip AdvertiseGen

然后将数据集处理成特定的格式,以便微调脚本能够正确读取:

./scripts/format_advertise_gen.py --path "AdvertiseGen/train.json"
# 如果遇到权限问题,添加执行权限:
# chmod u+x ./scripts/format_advertise_gen.py

最终实际训练格式为:

[
  {
    "prompt": "<prompt text>",
    "response": "<response text>"
  }
  // ...
]

微调相关依赖

安装微调过程中需要的依赖:

pip install transformers==4.30.2 accelerate sentencepiece astunparse deepspeed

微调脚本执行

微调脚本finetune_pt.sh包含了一系列的参数设置,用于控制微调过程。这些参数包括学习率、GPU数量、批处理大小、梯度累积步数等。可以根据需要调整这些参数:

# 简单修改参数,非常粗糙,仅验证微调代码能跑:
MAX_STEP=50
SAVE_INTERVAL=25

# 开始 P-Tuning v2 微调
./scripts/finetune_pt.sh  

微调过程中,以下的输出显示了训练的进度和耗时:

50%|██████████████████████████████████████████████████████████████████ | 25/50 [12:14<12:14, 29.36s/it]
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [24:27<00:00, 29.36s/it]

基本推理

微调完成后需要验证模型的效果。通过运行inference.py脚本,可以对微调后的模型进行基本的推理测试,注意改路径:

python inference.py \
    --pt-checkpoint "/root/autodl-tmp/ChatGLM3/finetune_chatmodel_demo/output/advertise_gen_pt-20231128-160019-128-2e-2/checkpoint-50" \
    --model /root/autodl-tmp/ZhipuAI/chatglm3-6b

验证结果

以下是原模型权重的推理结果,作为基准对照:

用户:你好 
ChatGLM:你好👋!我是人工智能助手 ChatGLM3-6B,很高兴见到你,欢迎问我任何问题。

用户:返回C++的helloworld程序
ChatGLM:当然可以,以下是一个简单的 C++ `helloworld` 程序:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

这是一个包含 `main` 函数的文件,当你编译并运行它时,它会输出 "Hello, World!"。

用户:类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
ChatGLM:您提供的信息看起来像是一个商品描述或服装参数,其中包含以下内容:

- 类型:#上衣
- 材质:#牛仔布
- 颜色:#白色
- 风格:#简约
- 图案:#刺绣
- 衣样式:#外套
- 衣款式:#破洞

这些信息可能用于描述一种或多种服装 item,例如一种白色牛仔外套,上面有刺绣图案,衣款式为破洞风格,材质为牛仔布,风格为简约。

在粗糙的微调后,灾难性遗忘非常严重,但说明了微调的可行性。微调后的推理结果:

Prompt:你好
Response: ,你不知道。

Prompt:返回C++的helloworld程序
Response: 而在生活中,我们也可以看到很多的设计,而 為了满足大家对于时尚的喜爱,我们推出了这一款时尚的拖地长裙,拖地长裙采用纯色设计,整体简约大气,拖地设计,穿起来更加优雅,拖地长度适中,穿起来更加舒适,拖地设计,穿起来更加有气质。

Prompt:类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
Response: 这款牛仔外套,采用牛仔面料,穿起来很有力量感。衣身采用刺绣设计,增加了视觉上的层次感,而破洞的装饰,更增添一份酷感。整体简约大气,穿起来很有气质。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值