轻量微调和推理ChatGLM模型实践
通过在DSW中微调和推理ChatGLM-6B模型,实现定制化、高交互性的对话系统。ChatGLM-6B是一个开源的、支持中英双语的对话语言模型,基于General Language Model (GLM) 架构,具有62亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署,从而实现更智能、交互性更强的人机对话体验。
准备环境和资源
创建工作空间,详情请参见创建工作空间。
创建DSW实例,其中关键参数配置如下。具体操作,请参见创建及管理DSW实例。
地域及可用区:进行本实践操作时,建议选择华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)这四个地域。这四个地域在后续操作中下载ChatGLM模型数据时速度更快。
实例规格选择:ecs.gn6v-c8g1.2xlarge。
镜像选择:在官方镜像中选择
pytorch:1.12-gpu-py39-cu113-ubuntu20.04
。
步骤一:下载ChatGLM-6B
进入DSW开发环境,具体操作请参见实例界面介绍。
在Notebook页签的Launcher页面,单击快速开始区域Notebook下的Python3。
在Notebook中执行以下代码,下载ChatGLM-6B。
说明由于ChatGLM数据较大,下载耗时与您所在的地域与网络环境有关,请耐心等待下载完成。
如果运行后未出现正常返回结果,并出现类似
404 Not Found
的错误,请尝试重新运行下载命令。
北上杭深地域用户
执行以下代码获取当前地域的下载链接。
import os dsw_region = os.environ.get("dsw_region") url_link = { "cn-shanghai": "https://atp-modelzoo-sh.oss-cn-shanghai-internal.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz", "cn-hangzhou": "https://atp-modelzoo.oss-cn-hangzhou-internal.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz", "cn-shenzhen": "https://atp-modelzoo-sz.oss-cn-shenzhen-internal.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz", "cn-beijing": "https://atp-modelzoo-bj.oss-cn-beijing-internal.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz", }
根据获取到的下载链接下载ChatGLM-6B数据。
path = url_link[dsw_region] os.environ['LINK_CHAT'] = path !wget $LINK_CHAT !tar -xvf ChatGLM-6B-main.tar.gz
其他地域用户
选择距离您当前实例所在地域最近的地域下载链接进行下载。
上海:
https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz
杭州:
https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz
深圳:
https://atp-modelzoo-sz.oss-cn-shenzhen.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz
北京:
https://atp-modelzoo-bj.oss-cn-beijing.aliyuncs.com/release/tutorials/chatGLM/ChatGLM-6B-main.tar.gz
安装相关依赖。
!cd ChatGLM-6B-main && pip install -r requirements.txt && \ pip install rouge_chinese nltk jieba datasets gradio==3.37.0
步骤二:准备数据
阿里云PAI为您提供了样例数据(AdvertiseGen_Simple),用于后续的微调和推理,您也可以使用符合数据格式要求的自定义数据进行后续的操作。
了解数据格式要求。
数据文件为JSON文件。
JSON文件中每条数据是一个字典,记录输入文本和输出文本。
准备数据。
使用PAI公共样例数据
执行以下命令即可获取公共样例数据(AdvertiseGen_Simple)。
!cd ChatGLM-6B-main/ptuning && wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/chatGLM/AdvertiseGen_Simple.zip && unzip AdvertiseGen_Simple.zip
使用自定义数据
按数据格式要求准备好数据集JSON文件后,上传至PAI_DSW实例。具体操作,请参见上传下载数据文件。
修改上述步骤下载的ChatGLM模型数据中的train.sh脚本以及evaluate.sh脚本(路径:
ChatGLM-6B-main/ptuning
)。将其中的 train_file、validation_file和test_file修改为对应的数据集路径。
将其中的prompt_column和response_column修改为自定义数据集JSON文件中输入文本和输出文本对应的KEY。
步骤三:微调模型
以使用PAI公共样例数据进行微调为例,运行以下命令进行模型微调。生成的模型文件保存在./ChatGLM-6B-main/ptuning/chatglm-6b
路径下。
模型训练过程有量化过程,训练时间可能会比较久,请您耐心等待训练完成。
!cd ChatGLM-6B-main/ptuning && bash train.sh
步骤四:模型推理
运行以下命令进行模型推理。
!cd ChatGLM-6B-main/ptuning && bash evaluate.sh
模型推理的测评指标为中文Rouge score和BLEU-4。
模型推理成功后,生成的推理结果保存在
./ChatGLM-6B-main/ptuning/output/adgen-chatglm-6b-pt-8-1e-2/generated_predictions.txt
。
您如果自行安装推理ChatGLM模型时,执行模型推理前需先检查推理执行脚本evaluate.sh中的CHECKPOINT参数,确保CHECKPOINT参数取值是训练保存的路径名称。
步骤五:在DSW中启动WebUI
查看并修改web_demo.py文件的参数取值。
tokenizer和model变量的路径修改为您的模型存储路径,需配置至checkpoint-6文件夹路径,如上图所示。
配置
share=true
开放公网访问。
执行以下命令,启动WebUI。
!cd ChatGLM-6B-main/ && python web_demo.py
在返回结果中,单击
Running on public URL
后的URL(例如:http://127.0.0.1:7860),进入WebUI页面。后续您可以在该页面,进行模型推理。说明由于
http://127.0.0.1:7860
为内网访问地址,仅支持在当前的DSW实例内部通过单击链接来访问WebUI页面,不支持通过外部浏览器直接访问。
步骤六:试玩模型
完成以上操作后,您已经成功完成了ChatGLM模型微调训练及WebUI部署。您可以在WebUI页面,进行模型推理验证。
在Enter text and press enter中输入文本内容,例如:什么是ChatGLM?
。单击Generate,输出如图推理结果。