GLM-130B 部署 - 8*3090-24G

官方文档

镜像要求A100-40G-8卡

硬件配置:

image

软件配置:

image

1.准备

由于恒源云暂时缺少硬件资源,此次部署使用8*3090-24G配置(需要量化int8):
image

注意镜像选择,pytorch版本选择1.13,不要选择2.0,2.0会产生不兼容的情况。

同时需要注意扩容,否则模型存放不够空间

创建实例后,打开终端,下载模型到临时目录:

oss login 
oss cp oss://xxx/ -r /hy-tmp/ .

一共60个文件,约240G

cat glm-130b-sat.tar.part_* > glm-130b-sat.tar //合并文件
tar xvf glm-130b-sat.tar  //解压

得到文件夹 glm-130b-sat

然后,在代码文件中的 config文件夹下找到 model_glm_130b_int8.sh,修改 checkpoint_path路径为上一步解压得到的文件夹路径。

image

scripts/generate.sh 中修改source路径:

image

2.环境配置

由于要求python3.9以上,而恒源云的系统镜像只有3.8可选,因此先创建一个虚拟环境,指定python版本

conda create --name test python=3.10
conda activate test //激活虚拟环境

进入主代码目录下,安装依所需的依赖:

cd /GLM-130B/GLM-130B/
pip install -r requirements.txt

此时即可尝试运行脚本:

bash scripts/generate.sh --input-source interactive

不出意外,报错:

ImportError: cannot import name 'builder' from 'google.protobuf.internal' (/usr/local/miniconda3/envs/GLM-130B/lib/python3.9/site-packages/google/protobuf/internal/init.py)

这可能是因为protobuf版本问题导致的不兼容问题。

3.解决报错

1.protobuf版本兼容问题

首先尝试升级protobuf版本:

pip install --upgrade protobuf

又开始报错:

image

icetk依赖要求protobuf版本低于3.19,那么按照要求安装回3.18的版本:

pip install  protobuf==3.18.*

报错:
image

tensorboard 依赖要求protobuf版本高于3.19,和icetk产生冲突:

解决:先安装低版本的tensorboard,然后安装低版本的protobuf,使得依赖兼容:

pip install  tensorboard==2.0

pip install  protobuf==3.18.*

再次运行,在pip安装时不再出现版本不兼容报错,但是又出现了新的报错:

ImportError: cannot import name 'builder' from 'google.protobuf.internal'

在对应的site-packages/google/protobuf/internal中查看发现,3.18版本的protobuf中不存在builder.py的文件!

很矛盾,必须用到builder.py,然而低版本的protobuf不存在这个文件,高版本的protobuf又不兼容。

解决方案(奇技淫巧):

  1. 先把protobuf升级到最新版本
pip install --upgrade protobuf
  1. 在目录中[usr/local/miniconda3/envs/test/lib/python3.10/site-packages/google/protobuf/internal/builder.py]找到 builder.py文件,将它复制到其他目录下保存。

  2. 安装旧版本的protobuf

pip install protobuf==3.18.3
  1. 将刚刚复制到其他目录的builder.py文件重新保存到原来的目录下[usr/local/miniconda3/envs/test/lib/python3.10/site-packages/google/protobuf/internal/]。

运行,没有再报这个错。

2.apex兼容问题

protobuf版本兼容问题解决后,还是存在报错:

File "/usr/local/miniconda3/envs/GLM-130B/lib/python3.9/site-packages/apex/init.py", line 13, in
from pyramid.session import UnencryptedCookieSessionFactoryConfig
ImportError: cannot import name 'UnencryptedCookieSessionFactoryConfig' from 'pyramid.session' (unknown location)

无法导入包,先尝试安装pyramid.session:pip install pyramid.session,安装后依然报错。

经过查阅资料,找到原因:不能直接pip安装apex,必须将项目代码克隆到本地后安装:

python setup.py install --cpp_ext --cuda_ext

git clone https://github.com/NVIDIA/apex.git
cd apex
pip install -v --no-cache-dir --global-option=“–cpp_ext” --global-option=“–cuda_ext” ./

报错:

ModuleNotFoundError: No module named 'packaging'

尝试强制重装packaging包:pip install packaging -U --force-reinstall

还是同样的报错。。

快绝望了,在网上看到一个“偏方”,抱着试一试的态度输入:

git checkout f3a960f80244cf9e80558ab30f7f7e8cbf03c0a0
python setup.py install --cpp_ext --cuda_ex

居然可以安装了!也不知道这个git checkpoint到底check了个啥,反正就是可以安装了orz

3.numpy兼容问题

安装好新的apex,运行了1分钟又报错:
image

原因:
在numpy的1.24版本已经弃用了np.bool这个名称,取而代之的是np.bool_

可以看到当前版本为1.25.2:

image

可以选择安装旧版本,或者在文件中更改 boolbool_
这里选择安装回旧版本的numpy1.23:

pip install numpy==1.23

再次测试,可以正常运行!

4.运行效果

GLM-130B 使用两种不同的掩码标记:[MASK] 用于简短的填空任务,[gMASK] 用于从左到右的长文本生成。当输入不包含任何 MASK 标记时,[gMASK] 将被自动附加到文本的末尾。

运行脚本进行推理:

bash scripts/generate.sh --input-source interactive

以下是短文本填空与长文本生成的效果:

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章