阿里云人工智能平台PAI部署开源大模型chatglm3之失败记录--update:最后成功了!

MilkLeong 2024-08-29 17:31:01 阅读 78

想学习怎么部署大模型,跟着网上的帖子部署了一个星期,然而没有成功。失败的经历也是经历,记在这里。

在这里插入图片描述

我一共创建了3个实例来部署chatglm3,每个实例都是基于V100创建的(当时没有A10可选了),其显存只有16G。每个实例分配的系统存储盘有100G。

在这里插入图片描述

这三个实例,每个实例都有不一样的失败原因。

更新:

由于在上面花了一周时间,啥都没做出来,实在不甘心,于是我又部署了第四个实例。它用的显卡是A10。

在这里插入图片描述

实例一

实例一挂在了下载模型权重文件这一步

<code>git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

到这一步的时候系统盘莫名其妙的满了,导致下载模型权重文件报错。

实例二

由于第一次系统盘早早地满了,第二次部署的时候我就跳过了前期的一些操作,其中包括配置环境变量这一步。

# 印象中不创建账号好像就没有bashrc的文件

vim ~/.bashrc

# 末尾添加anaconda3所在路径,和第六步路径一致

export PATH=/root/anaconda3/bin:$PATH

# 修改终端的默认 python 为 anaconda,否则会报错找不到命令activate

source /root/anaconda3/bin/activate

# 使环境变量的修改立即生效

source ~/.bashrc

这导致后面在运行模型的时候一直报错。

运行cli_demo.py文件报AttributeError

(base) root@dsw-403691-6867f64799-5t2cz:/opt/chatglm3/ChatGLM3/basic_demo# sudo python cli_demo.py

报错:

File "/root/.cache/huggingface/modules/transformers_modules/ChatGLM-6B/tokenization_chatglm.py", line 244, in vocab_size

return self.sp_tokenizer.num_tokens

AttributeError: 'ChatGLMTokenizer' object has no attribute 'sp_tokenizer'. Did you mean: '_tokenize'?

运行web_demo_gradio.py报ImportError。我尝试对这些错误进行修改,发现每修改好一个,就报下一个类似的错误。后来意识到应该是前期环境变量没有配置好,导致了了路径错误。

from gradio.exceptions import ComponentDefinitionError

ImportError: cannot import name 'ComponentDefinitionError' from 'gradio.exceptions' (/root/anaconda3/lib/python3.11/site-packages/gradio/exceptions.py)

from gradio.utils import no_raise_exception

ImportError: cannot import name 'no_raise_exception' from 'gradio.utils' (/root/anaconda3/lib/python3.11/site-packages/gradio/utils.py)

from gradio.events import Events

ImportError: cannot import name 'Events' from 'gradio.events' (/root/anaconda3/lib/python3.11/site-packages/gradio/events.py)

实例三

第三次部署我老老实实跟着教程设置了环境变量,最后模型看似能运行,但是还是出了问题。

cli_demo.py运行

最开始是我输入对话语句,模型报UnicodeDecodeError,并反馈Could not find TensorRT。

2024-07-04 21:08:47.391139: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

我尝试安装bazel及tensorflow,但是都没有成功。

今天在写这个失败记录的时候,再试着运行了一次,报内存溢出的错误。

在这里插入图片描述

web_demo_gradio.py运行

在最开始提醒我安装gradio和peft,安装好之后要注意更新gradio的环境变量,不然会导致无法成功import。

后面运行时生成的local url一直打不开,我跟在chat-gpt将web_demo_gradio.py中的.laucn()函数的share属性由false改成了true.

<code>iface.launch(share=True)

运行代码时有提醒我要安装frpc_linux_amd64_v0.2。

Could not create share link. Missing file: /root/anaconda3/envs/chatglm3_test/lib/python3.11/site-packages/gradio/frpc_linux_amd64_v0.2.

于是我将该文件下载到本地,又跟着教程上传到服务器,成功安装了frpc_linux_amd64_v0.2。

在此运行模型,使用public url,可以打开网页了。

在这里插入图片描述

输入对话,但是模型并不能生成回答。

在这里插入图片描述

我猜原因可能是显卡内存不足。

实例四

实例四的部署过程和本文前贴的教程的过程一样。最后在运行的时候报了bug,但是,我改好了!!!

cli_demo.py运行

和第三次部署一样,还是报的UnicodeDecodeError。

File "/usr/local/lib/python3.10/subprocess.py", line 1031, in _translate_newlines

data = data.decode(encoding, errors)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

这一次我仔细看了看traceback,报错的地方应该是/usr/local/lib/python3.10路径下的subprocess.py文件的第1031行。问了问Chat-GPT,它建议我直接对Python 3.10中的特定函数进行修改。

#退出原目录

cd

# 进入Python 3.10所在路径

cd /usr/local/lib/python3.10

# 使用修改subprocess.py文件

vi subprocess.py

将其第1031行修改为如下。然后保存。

在这里插入图片描述

退出Python 3.10所在路径,重新进入模型权重文件所在路径,运行cli_demo.py文件。

在这里插入图片描述

这次终于可以顺利地和模型聊天了。

web_demo_gradio.py运行

报ModuleNotFoundError,可能跟Transformers的版本有关。

在这里插入图片描述

在Hugging Face上找到了对gemma的介绍,先记在这里,后面再看看如何对这个Bug进行修改。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。