一开始直接在本地环境部署,发现cuda版本冲突,所以改用docker,docke部署既不影响显卡性能,又可以避免环境冲突
1.创建docker容器
1.1. 拉取带有cuda11.7+cudnn8的镜像
docker pull andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0
1.2.运行容器
docker run --gpus all --net=host -d -it --name VisualGLMsat andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0:latest
参数解释:
–gpus all 使得docker容器可以使用宿主机的所有gpu
–net=host配置docker容器使用宿主机的网络,这样宿主机如果开启了代理,docker容器也可以走代理
2.容器中的操作
2.1. 终端激活代理
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
2.2. 下载/复制VisualGLM文件夹到容器中
两种方式
1)直接在容器中使用git
apt update
apt install git
git clone https://github.com/THUDM/VisualGLM-6B.git
2)从宿主机复制
docker cp 宿主机文件路径 容器ID:容器路径
2.3. 安装依赖
pip install -r requirements.txt
2.4. 执行cli_demo.py
想要微调的也一定要先执行这个脚本,他会从sat下载模型相关文件,我一开始没执行这个就直接执行微调命令,结果老是报错,具体原因还是不太清楚,不知道是不是执行微调指令之后会从hf下载模而不是sat导致无法微调
python cli_demo.py
2.5. 报错处理
执行以上脚本的过程中可能会遇到以下报错
错误1 :
TypeError: init() got an unexpected keyword argument ‘mode‘
解决方法:
apt updata
apt intsall vim
vim /usr/local/lib/python3.10/dist-packages/sat/resources/download.py
删除download.py文件的50行的mode = 0o777
修改之前:lock = FileLock(model_path + ‘.lock’, mode=0o777)
修改之后:lock = FileLock(model_path + ‘.lock’)
错误2
AttributeError: ‘ChatGLMTokenizer’ object has no attribute ‘sp_tokenizer’. Did you mean: ‘_tokenize’?
解决方法
降低transformers版本
pip uninstall transformers
pip install transformers==4.33.0
2.6. 微调
cli_demo.py成功运行之后就可以开始微调了
2.6.1.解压数据
apt update
apt install zip
unzip fewshot-data.zip
2.6.2. 执行微调命令
bash finetune/finetune_visualglm_qlora.sh
2.6.3. 报错处理
错误1:
NameError: name ‘HackLinearNF4’ is not defined. Did you mean: ‘HackLinear’?
解决方法
pip install bitsandbytes
总结
按以上步骤进行应该都可以成功运行,配环境真的好折磨哦!
希望对大家有帮助吧~