本篇文章主要记录本人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企服之家,中国第一个企服评测及商务社交产业平台。 |