论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Mysql
›
DB-GPT使用vLLM报错 ValueError: mutable default <cla ...
DB-GPT使用vLLM报错 ValueError: mutable default <class ‘list‘> for ...
小秦哥
金牌会员
|
2024-9-23 09:52:32
|
显示全部楼层
|
阅读模式
楼主
主题
982
|
帖子
982
|
积分
2946
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
本篇文章主要记录本人debug的过程,该问题已经办理,可以直接看最下方的办理方式。
在使用DB-GPT项目过程中由于默认使用的推理框架推理速度较慢,选择更换成vLLM框架,在DB-GPT项目文档中有使用vLLM推理的部门,但是写的极为简短,在使用过程中会发上上图的报错,为了debug于是先尝试在当地用pycharm进行调试。
在当地重新摆设进行调试
重新构建虚拟环境dbgpt_env
conda create -n dbgpt_env python=3.10
复制代码
然后安装依靠,分别是默认依靠,openai依靠和vllm依靠,由于是在当地调试,以是必要使用openai的api来调用chatgpt.
pip install -e ".[default]" -i https://pypi.tuna.tsinghua.edu.cn/simple requests
pip install -e ".[openai]" -i https://pypi.tuna.tsinghua.edu.cn/simple requests
pip install -e ".[vllm]" -i https://pypi.tuna.tsinghua.edu.cn/simple requests
复制代码
其中vllm依靠中由于torch安装的是最新版本,现在截止2024.8.25日,torch最新版本是2.4.0,但是某些torch相干的组件用的并不是搭配的版本,安装之后可能会出现如下报错。
必要修改setup.py第322行代码重新下载,或者使用pip直接卸载原来的torchaudio然后指定2.4.0重新安装。
运行webserver出现报错
应该是impot torch过程中堕落,可以尝试在命令行中import torch
根据博客https://blog.csdn.net/Lahzylj/article/details/140934691
安装libomp140.x86_64.dll并放入图中所指示的文件夹内,重新import torch可以看到正常运行。
此时如果不在.env文件中设定MODEL_TYPE直接启动webserver是可以正常使用,如果设定为vllm的推理框架的话会产生报错。
这里有个提示是说Trition没有安装,一些GPU相干的功能会无法使用,不过由于本机用的是署理模型不必要用到GPU以是可以不管,而且trition现在只支持Linux体系,Win10体系摆设起来比较麻烦。
然后最后的报错和我在A6000的长途主机中报的错一样,开始debug。
当地debug过程
可以看到,最后在dataclass创建一个新的数据类型时堕落,代码如下。
这里是在传入VLLM的参数
这里出现了type函数的另一种使用方式,一般type函数输入一个参数时是用来查看该参数的数据类型的,如果输入三个参数,就是便利地构建一个新的数据类型,其中第一个参数表示该数据类型的名字,第二个参数表示该数据类型继承的父类,第三个参数表示该数据类型的属性,然后去查看第三个数据类型,这里表示的输入VLLM的一些参数,共85个,加上最后一个annotations的数据类型字典(85个),以是一共是输入了86个参数。
其中新的疑问是Field数据类型是什么意思,在调试过程中,是出现在该函数的一开始
颠末查询,field是python3.7之后参加的dataclass中的一个函数,该函数答应为数据类的字段指定默认值和元数据。field()可以替换默认的字段值,支持默认值和默认工厂函数,同时在初始化、表示、比较和哈希方法中发挥作用。元数据功能为第三方扩展提供了空间,确保了数据类的灵活性和定制性。
其中涉及到isinstance()函数
isinstance() 函数是 Python 中的 内置函数,该函数用于检查一个对象是否是 指定类 或 其子类 的 实例。如果对象是给定类型的实例,则返回 True;如果不是,则始终返回 False。
isinstance(object, classinfo)
其中:
object 为必要进行类型检查的对象,isinstance() 函数将判断 object 是否是指定类型或指定类型的子类的实例。
classinfo 的值答应为一个类型对象、多个类型对象组成的 元组 或 Union 类型。
在field_dict中的第74个参数,ignore_pattern的default值为[]导致报错
同时,可能也影响了后面的参数无法精确获取,以是猜测更改ignore_pattern的默认值可能会乐成,由于自己ignore_pattern的类型也是str
而field_dict是从desc中转过来的,以是必要追溯desc,可以看到在序号为73的参数中(由于List是从00开始计数的),default_value就是[],别的参数的默认值都是None
追溯desc必要回到上一层调用也就是vllm_adapter.model_param_class
最终发现是在AsyncEngineArgs的add_cli_args函数中获得的参数,由于这部门代码无法修改,以是没有在深入研究。
办理方式
其实想要办理上面的错误,焦点问题就是把ignore_patterns的默认值修改,以是可以在构建fields_dict的过程中完成修改,只必要将原来的构建过程中通过if语句获取ignore_patterns键值对的获取过程然后复制默认值为None即可。
进入DB-GPT\dbgpt\util\parameter_utils.py文件中,在约637行处注释掉原来的fields_dict的赋值语句,改为下图中的if语句保存即可。
后记
现在看来,使用vllm推理框架对于显存的使用水平提升的很大,本来使用默认推理框架(应该是fastchat)跑10b以内的大模型一般都只必要20G左右的显存,但是用vllm会提到40G,而使用glm4-9b-chat在运行过程中会报错,现在用Qwen2-7B-Instruct效果最佳。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
小秦哥
金牌会员
这个人很懒什么都没写!
楼主热帖
Python教程(5)——Python的第一个程序 ...
Kubernetes(k8s)安装以及搭建k8s-Das ...
〖Python接口自动化测试实战篇⑤〗- 接 ...
java递归简介说明
网易云信实时视频直播在TCP数据传输层 ...
liunx速记
海量监控数据处理如何做,看华为云SRE ...
从 Stream 到 Kotlin 再到 SPL
【问题】为什么 System.Timers.Timer ...
那些年用过的机械键盘
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
鸿蒙
快速回复
返回顶部
返回列表