ChatGLM3-6B部署与微调
由于ChatGLM3在不断更新,本文对应的代码时间:2024/12/9
1、环境准备
资源配额-GPU规格:ecs.gn6v-c8g1.2xlarge(支持资源包抵扣)
选择镜像:modelscope:1.11.0-pytorch2.1.2tensorflow2.14.0-gpu-py310-cu121-ubuntu22.04
python版本:Python 3.10.13
CPU:8;内存:32 GiB;GPU:1;型号:NVIDIA V100
2、ChatGLM3-6B代码下载
-
代码下载及创建虚拟环境
git clone https://github.com/THUDM/ChatGLM3.git cd ChatGLM3 conda create -n chatglm3-6b python=3.10当创建虚拟环境出现以下错误时
解决步骤如下:
conda config --show channels conda config --remove channels defaults conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda create -n chatglm3-6b python=3.10 #解决完成在创建一次 -
安装依赖(警告无需在意,报错当场解决)
conda activate chatglm3-6b python -m pip install --upgrade pip pip install -r requirements.txt
3、ChatGLM3-6B模型下载
-
阿里云不支持huggingface,可以选择到modelscope下载,把模型放在根目录下
cd /mnt/workspace git lfs install git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git#时间有点长,耐心等待 cd chatglm3-6b/ pwd #得到一个路径
4、验证模型对话demo
-
修改模型路径
手动点击目录到ChatGLM3/basic_demo/cli_demo.py中,修改模型路径
将路径 'THUDM/chatglm3-6b'修改为 '/mnt/workspace/chatglm3-6b'(也就是步骤3得到的路径),完成后记得ctrl+s保存
-
去到basic_demo目录下
cd ChatGLM3 cd basic_demo python cli_demo.py -
可能会遇到报错:有多个库没有安装,缺什么安什么
安装完执行
python cli_demo.py,还报错就继续安装缺少的库,直到出现对话尝试与部署的模型对话,最后记得stop来终止程序
5、微调(数据来自官方提供的AdvertiseGen数据集)
-
为微调创建一个虚拟环境
cd /mnt/workspace #回到根目录 conda create -n ChatGLM3-6b-finetunning python=3.10 conda activate ChatGLM3-6b-finetunning cd ChatGLM3 cd finetune_demo/ pip install -r requirements.txt #再次安装依赖安装依赖时可能会报错(没报错就跳过)
#执行 conda install gcc_linux-64 conda install gxx_linux-64 conda install gfortran_linux-64 pip install mpi4py #再次执行 pip install -r requirements.txt -
微调数据集:对于一组完整的微调数据集,必须包含训练数据集和验证数据集
在 finetune_demo目录下mkdir data
mkdir data cd data/ mkdir raw mkdir fix我们使用 AdvertiseGen 数据集来进行微调。从 Tsinghua Cloud 下载处理好的 AdvertiseGen 数据集,将解压后的 AdvertiseGen 目录中的train.json和dev.json两个文件上传到raw目录
在lora_finetune.ipynb的下图代码,将红框中内容改为如下所示,记得ctrl+s保存,然后运行它,最终我们需要使用的微调数据集是data/fix下的两个json文件
**在执行微调命令之前,强调一下,官方在github上更新了lora.yaml,如果按这个配置进行微调,会爆显存。我在github找到了别人之前微调的lora.yaml,经过测试,可以微调,请下载替换,下载地址github.com/KevinFanng/…(将新的lora.yaml替换原来的代码,原来lora.yaml在ChatGLM3/fineture_demo/configs目录下)记得ctrl+s保存
-
开始微调
返回到/mnt/workspace/ChatGLM3/finetune_demo#目录
python finetune_hf.py data/fix/ /mnt/workspace/chatglm3-6b/ configs/lora.yaml如果报错,根据提示依次安装依赖,以下是我缺少的依赖
pip install typer pip install nltk pip install sentencepiece pip install -U transformers python finetune_hf.py data/fix/ /mnt/workspace/chatglm3-6b/ configs/lora.yaml#再次执行注意:出现ImportError: cannot import name 'log' from 'torch.distributed.elastic.agent.server.api的报错,将pytorch降级,现在默认装的是2.4.0,我降到2.3.1,然后transformers降到4.36.2,可以运行
pip uninstall torch pip install torch==2.3.1 pip uninstall transformers pip install transformers==4.36.2 python finetune_hf.py data/fix/ /mnt/workspace/chatglm3-6b/ configs/lora.yaml#再次执行