赞
踩
GPU:3090两块
系统镜像:Ubuntu 9.4.0-1ubuntu1~20.04.2
python版本:Python 3.10
conda create -n py310_chat python=3.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中
打开项目下的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目录中
包括以下文件:
按照官网的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_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=2 finetune_hf.py 数据集路径/ 模型路径/ configs/lora.yaml
发现还是有很多包都没装上,缺什么装什么就可以啦!
后记:
尽管我一再的修改配置文件使参数尽可能的小一点,但是一块3090还是没有带起来,后来我就采用单机双卡的训练模式,跑是跑起来了,训练跑完一轮的时候评估却报错了,具体错误如下:
在包的内部报这个错误,给我整不会了,想来想去也只能是版本错误,咋回事呢
第二个错误是device的错误,to(device)的时候报空类型,我麻了
微调调用的是封装好的peft包,主要跟下面这行代码有关,get_peft_model是peft包中的方法,接受两个参数,一个是我们要微调的模型。一个是微调参数,返回值是设置完微调参数之后的模型
model = get_peft_model(model, peft_config)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。