阿里云万网网站,建立个人视频播放网站,张家口桥西区建设局网站,企业网站seo工作前言#xff1a;最近大模型太火了#xff0c;导师让我看看能不能用到自己的实验中#xff0c;就想着先微调一个chatGLM试试水#xff0c;微调的过程并不难#xff0c;难的的硬件条件跟不上#xff0c;我试了一下lora微调#xff0c;也算跑通了吧#xff0c;虽然最后评估… 前言最近大模型太火了导师让我看看能不能用到自己的实验中就想着先微调一个chatGLM试试水微调的过程并不难难的的硬件条件跟不上我试了一下lora微调也算跑通了吧虽然最后评估的时候报错了淦 真正设计lora微调的就那一行代码仅以此博客作为记录希望有大佬能够告知为啥评估的时候会出现那两个bug不胜感激 环境准备
GPU3090两块 系统镜像Ubuntu 9.4.0-1ubuntu1~20.04.2 python版本Python 3.10
部署
创建python环境
conda create -n py310_chat python3.10 小编这里报错了 说什么channel获取不到可以理解为conda的下载源找不到 解决办法 将获取不到的channel删除即可
conda config --remove channels 要删除的channel还有报错就接着删然后查看当前是否还存在channel
conda config --show channels如果没有可用channel使用下述命令添加这里给出几个例子
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
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 activate py310_chat下载克隆项目
git clone https://github.com/THUDM/ChatGLM3.git进入目录安装依赖
cd ChatGLM3
pip install -r requirements.txt预训练好的模型下载
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git因为模型很大这里下载可能需要点时间 小编这里下载模型的时候也出了点问题只下载了一部分就报错停止了重新下载还是会出现类似情况所以我就去hugging face把缺失的文件手动的一个一个下载下来拷贝到chatglm3-6b中
命令行demo运行
打开项目下的basic_demo可以看到很多可运行的demo这里选择cli_demo.py成功运行之后终端会出现一个交互式命令行你就可以跟chatGLM聊天了
注意 这里你需要将cli_demo.py中的MODEL_PATH和TOKENZIER_PATH改为上述第五步中下载的模型地址 web demo小编也运行了但是出了点问题时间紧迫也没有去探究为什么报错
微调
准备数据集
这里先用官方提供的数据集试试水AdvertiseGen数据集 数据集下载完成之后放到你的项目下
安装依赖
进入到项目中的finetune_demo目录下这里是官方提供的微调代码以及还有微调所需要安装的依赖
pip install -r requirements.txt处理数据集
运行lora_finetune.ipynb最开始的一段代码对train.json和dev.json进行“切割对齐”生成最终的微调数据集 这里我们只需要修改一下原数据集存放的路径和处理之后数据集存放的路径就可以了即下述这一行代码中的路径
配置文件修改
配置文件都放在finetune_demo目录下的configs目录中 包括以下文件
ds_zereo_2 / ds_zereo_3.json: deepspeed 配置文件。lora.yaml / ptuning.yaml / sft.yaml: 模型不同方式的配置文件包括模型参数、优化器参数、训练参数等 详情可查看finetune_demo目录下的readme文件
按照官网的lora.yaml配置进行微调CUDA out of memory了 可替换成下述配置https://github.com/KevinFanng/makeChatGLM3FinetuneData/blob/main/lora.yaml这是我参考的博主的文章里面提供的我单张3090不行两张3090可以
运行微调代码
单机单卡
python finetune_hf.py 数据集路径/ 模型路径/ configs/lora.yaml单机双卡 OMP_NUM_THREADS1 torchrun --standalone --nnodes1 --nproc_per_node2 finetune_hf.py 数据集路径/ 模型路径/ configs/lora.yaml发现还是有很多包都没装上缺什么装什么就可以啦
后记 尽管我一再的修改配置文件使参数尽可能的小一点但是一块3090还是没有带起来后来我就采用单机双卡的训练模式跑是跑起来了训练跑完一轮的时候评估却报错了具体错误如下
在包的内部报这个错误给我整不会了想来想去也只能是版本错误咋回事呢
TypeError: BatchEncoding.to() got an unexpected keyword argument non_blocking
第二个错误是device的错误to(device)的时候报空类型我麻了
AttributeError: ‘NoneType’ object has no attribute ‘to’
微调代码解析
微调调用的是封装好的peft包主要跟下面这行代码有关get_peft_model是peft包中的方法接受两个参数一个是我们要微调的模型。一个是微调参数返回值是设置完微调参数之后的模型
model get_peft_model(model, peft_config)参考
感谢博主https://www.bilibili.com/read/cv33842619/