想学习怎么部署大模型,跟着网上的帖子部署了一个星期,然而没有成功。失败的经历也是经历,记在这里。
我一共创建了3个实例来部署chatglm3,每个实例都是基于V100创建的(当时没有A10可选了),其显存只有16G。每个实例分配的系统存储盘有100G。
这三个实例,每个实例都有不一样的失败原因。
更新:
由于在上面花了一周时间,啥都没做出来,实在不甘心,于是我又部署了第四个实例。它用的显卡是A10。
实例一
实例一挂在了下载模型权重文件这一步
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.
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进行修改。