大模型ChatGLM3-6B本地部署

0. 模型选择

表1. 一些常见的大模型

名称厂商参数量开源
GPT-4OpenAI>175BN
Gemini谷歌1370BN
文心一言4.0百度230BN
通义千问阿里云>70BY
盘古大模型华为>100BN
GLM-130B智谱AI130BN
ChatGLM-6B智谱AI6BY
LLaMA2Meta7BY

由于显存限制,选择参数量小的ChatGLM3-6B进行实战。

1. 部署

在以下两种环境中进行了部署测试,其中本地由于GPU显存小而部署失败(见附录)。云环境部署成功,后续都基于该环境。

测试环境操作系统显卡
本地windows11RTX 4060 (8G)
算家云ubuntu 20.04RTX 3090 (24G)

首先,下载代码库,配置环境,安装依赖。

# 克隆代码
git clone https://gitee.com/mirrors/chatglm3

# 安装依赖
cd chatglm3
##安装配置python和pip
apt-get update
apt-get install python3-dev python3-pip
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
##安装依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

然后,从魔搭(国内网络可以直接访问)下载模型。模型大小约11.6GB,使用cache_dir指定存放路径。

#git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
pip install modelscope
# execute in python scripts
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='/root/chatglm3/model')

最后,通过命令行启动模型。启动前将模型路径修改为存放路径。

basic_demo/cli_demo.py
##修改模型路径
MODEL_PATH = os.environ.get('MODEL_PATH', '/root/chatglm3/model/ZhipuAI\chatglm3-6b')

python cli_demo.py

下图展示了模型启动后的对话界面。

在这里插入图片描述

此外,ChatGLM3-6B 还有 3 个超参数。max_length指定输入和输出 token 的长度限制。temperature指定模型的温度。温度用于调整单词的概率分布,数值越小,给出的答案越精确。top_p指定模型采样策略参数。每一步只从累积概率超过 p 的最小单词集合中进行随机采样,而不考虑其它低概率的词。

场景temperature推荐值top_p推荐值
调用工具并根据工具内容回复0.00.7
代码注释生成0.10.2
代码生成0.20.1
数据脚本分析0.20.1
探索性代码编写0.60.7
聊天机器人回复0.50.5
创意写作0.70.8

2. 微调

增强模型能力的方法包括微调外挂知识库调用API等。常见的微调方法如下:

  • 全量微调FFT
  • 参数高效微调PEFT
    • Prompt Tuning
    • Prefix Tuning
    • LoRA
    • QLoRA

示例1. 法律小助手

1)需求分析

场景:以问答的方式帮助员工解决日常生活中遇到的法律问题。
落地方式:微调(推理能力强)或知识库(能频繁更新数据)。

2)数据准备

# 1. 下载公共数据集
##https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/lawzhidao/intro.ipynb
##原始数据是CSV格式,包含4列:title、question、reply、is_best,

# 2. csv格式转换成以下官方微调数据格式(可用GPT生成)
#{
#  "conversations":
#    [{"role":"user","content":"value1"},
#    {"role":"assistant","content":"value2"}]
#},
import csv
import json
import sys

csv_file = sys.argv[1]
json_file = sys.argv[2]

with open(csv_file, 'r') as IN, open(json_file, 'w') as OUT:
    for row in csv.DictReader(IN):
        title = row['title']
        reply = row['reply']
        entry = {
            'conversations':
            [{'role':'user', 'content':title},
             {'role':'assistant', 'content':reply}
            ]}
        line = json.dumps(entry, ensure_ascii=False)
        OUT.write(line+'\n')

执行上述脚本python csv2json.py lawzhidao_filter.csv law.json即可。

3)微调

首先,安装微调的依赖。

cd finetune_demo
pip install -r requirements.txt
#deepspeed...op_builder.builder.MissingCUDAException: CUDA_HOME does not exist, unable to compile CUDA op(s)
  #apt install nvidia-cuda-toolkit
#mpi4py...ERROR: Could not build wheels for mpi4py which use PEP 517 and cannot be installed directly
  #(x)pip install --upgrade pip setuptools wheel    #version
  #
#

然后,准备测试集和验证集。

#wc -l law.json
head -n 36000 law.json > law_train.json
tail -n 368 law.json > law_val.json

接着,通过finetune_demo/configs/lora.yaml文件修改配置。

  • data_config
    • train_file:训练集路径
    • val_file:验证集路径
    • test_file:测试集路径
    • num_proc:进程数
  • max_(input|output)_length:(输入|输出)序列的最大长度。
  • training_args
    • output_dir:模型输出目录
    • max_steps:最大训练轮数
    • per_device_train_batch_size:每个设备的训练批次大小
  • peft_config
    • peft_type:微调类型,LORA
    • task_type:任务类型
    • r:lora矩阵的秩
    • lora_alpha
    • lora_dropout

然后,开始微调。

python3 finetune_hf.py data ../model configs/lora.yaml

4)验证

python3 inference_hf.py \
    output/checkpoint-3000/ \  #新权重
    --prompt "xxxxxxxxxxxx"    #输入的提示

5)提供服务

可以通过 API 组件将模型的输入输出封装成接口对外提供服务。实际生产环境中,还需要考虑:

  • 模型的推理性能(效果);
  • 模型的推理吞吐量;
  • 服务的限流,适当保护大模型集群;
  • 服务降级,隐藏暂停使用。

具体见第4部分。

附录

部署失败记录-RTX4060

(1)源码下载和依赖安装–pass

# 克隆代码
git clone https://gitee.com/mirrors/chatglm3

# 安装依赖
cd ChatGLM3

## 虚拟环境
#pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
#pip install virtualenv
virtualenv -p D:\py\py311\python.exe vtenv
vtenv\Scripts\activate

## 安装依赖:出现的问题包括 fbgemm.dll依赖缺失 和 vLLM无法安装
pip install -r requirements.txt
#Error loading "...\overlay\Lib\site-packages\torch\lib\fbgemm.dll
  #(x)pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  #(√)https://www.jb51.net/python/3260230n0.htm
    #https://www.bilibili.com/opus/967745334024339490
#AssertionError: vLLM only supports Linux platform
  #(√)delete vllm from requirement.txt
#print(torch.cuda.is_available())
  #True

(2)模型下载–pass

#git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
pip install modelscope
# execute in python
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='E:\chatglm3_6b_model')

(3)通过命令行启动模型–failed(torch.OutOfMemoryError)

basic_demo/cli_demo.py
##修改模型路径
MODEL_PATH = os.environ.get('MODEL_PATH', '..\chatglm3_6b_model\ZhipuAI\chatglm3-6b')
##修改CPU或精度
###模型默认以FP16 精度加载,需要约13GB显存。
###如果修改为通过CPU启动,需要约32G内存。
###如果将精度修改为4-bit,需要约6GB显存。
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).float()  #CPU
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).quantize(bits=4,device="cuda").cuda().eval()  #4-bit

python cli_demo.py
#torch.OutOfMemoryError
  #(x)set 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128'

参考

独行.《AI大模型实战高手课》
御坂19610号.【经验分享】ChatGLM3-6B大模型本地部署 Windows + Pycharm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值