以通义千问-1_8B-Chat为例,按照官方教程,简单介绍如何将模型进行本地CPU部署以及预训练微调:
1、环境条件:Linux 24G内存左右
2、本地部署:
提前安装好git跟git lfs,否则可能拉取不到模型文件,git lfs主要用于大文件拉取。
拉取项目文件:
git clone https://github.com/QwenLM/Qwen.git
创建环境,建议单独创建一个新环境,避免与现有环境冲突,创建后要先安装pytorch,再安装项目依赖模块。
# 创建环境
conda create -n llm python==3.10.4
# 激活环境
conda activate llm
# 安装pytorch 因为没有GPU 安装CPU版本即可
conda install pytorch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 cpuonly -c pytorch
# 再安装项目依赖
pip install -r requirements.txt
项目文件以及环境安装好后,继续拉取模型文件,由于内存有限,拉取1.8B即可
拉取模型:
git clone https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git qwen_model
调用官方给的web_demo.py 进行本地推理,由于没有GPU使用CPU即可:
python web_demo.py --server-name 0.0.0.0 -c qwen_model --cpu-only
运行成功后出现模型对话地址:
打开地址,如果0.0.0.0无法打开,更换为主机的地址或者自定义的域名,比如我的主机域名为:node1,在浏览器输入:node1:8000即可:
至此本地化简单部署结束,此时我们使用还是官方训练好的模型,接下来,我们使用自定义数据,对模型进行微调,使其变为我们自己想要训练的模型:
参照官方文档:https://github.com/QwenLM/Qwen/blob/main/README_CN.md
Qwen模型的训练数据格式为:
[{"id": "identity_0","conversations": [{"from": "user","value": "你好"},{"from": "assistant","value": "我是一个语言模型,我叫通义千问。"}]}
]
按照模型的数据格式构建好自己的数据集,这里,我们将回答替换为是我们创造了Qwen模型,让它按照预设输出回答:
数据集构建后,使用项目文件:finetune/finetune_lora_single_gpu.sh 进行lora微调:
# 使用自定义数据集对模型进行微调bash finetune/finetune_lora_single_gpu.sh -m qwen_model/ -d train_data_law.json
模型微调过程会使用CPU,且占用内存大概22G左右;如果遇到内存不足,重启主机释放内存后再尝试训练,模型训练完会在当前路径生成一个 output_qwen文件夹,直接运行可能会报错,需要把原来模型里面的generation_config.json文件复制到output_qwen文件夹下面:
调用微调好的模型:
python web_demo.py --server-name 0.0.0.0 -c output_qwen/ --cpu-only
再次跟它对话,可以正常返回微调结果: