【万字真言】如何提升大模型抽取结构化信息的速度

目录

一、问题和需求

二、部署量化模型

2.1 使用ollama部署

2.1.1 ollama部署的代码

2.1.2 测试ollama部署的gguf模型的推理速度

2.2 使用vllm部署量化模型

2.2.1 获取量化版本模型

2.2.2 安装VLLM

2.2.3 部署模型

2.3 测试三个模型

三、为什么4位量化模型速度还比FP16更慢

3.1 查看上面两个模型的量化设置

3.2 查询设备和对应支持模型

四、尝试不同的框架

4.1 llama.cpp源码构建项目

4.2 下载gguf模型

4.3 启动模型

4.4 GPU未识别如何解决

4.5 测试模型服务

五、结论

5.1 模型抽取json信息慢的核心原因

5.2 无关因素

六、参考文章


一、问题和需求

我们在利用qwen3-4B正常的bfloat16模型做信息抽取的过程中,速度很慢,需要40s。经过测试发现,要让模型进行较好的,稳定的json输出信息,pydantic模型是不能缺少的。

我得出暂时的结论,整个抽取信息的速度主要取决两个因素:

1. pydantic模型总体的量。

2. 模型的"聪明程度",越聪明的模型,想的越多,输出越慢。

具体的测试可以看我之前的博客:

Langchain如何让大模型结构化输出指定的字段信息-CSDN博客

如何把整个信息流程提速?先做到可以用,再做到好用。

提升模型抽取信息的速度的思路主要有三个:

1.参数量不变,部署量化版本的模型。如:qwen3-4B-bfloat4。

2.把pydantic模型简化成两个部分,做到并发调用模型,然后拼接json信息。

3.使用程序化的代码做预处理:先用正则表达式或规则程序抽取能抽取的信息,再把不能抽取的信息给大模型处理,减轻模型的任务量。

4. 部署参数量更小,但是量化精度不要太低的模型,尝试写不同的提示词,抛弃pydantic模型校验输出,得到速度更快的输出。

二、部署量化模型

2.1 使用ollama部署

2.1.1 ollama部署的代码

本身使用ollama部署的模型都是GGUF的模型,比较简单。模型的详细信息在下面网站中。

qwen3:4b/model

ollama run qwen3:4b

使用代码调用ollama模型服务:

from langchain_ollama import ChatOllama
from langchain_openai import ChatOpenAI
def get_ollama_llm(MODEL_PATH:str,MODEL_URL:str, temperature:Optional[float] = 0.1):
    '''通过ollama调用llm,返回langchain的llm对象'''
    # 方法一:MODEL_URL="http://localhost:11434"
    # ollama_llm = ChatOllama(
    #     model=MODEL_PATH,
    #     base_url=MODEL_URL,  # Ollama服务地址
    #     temperature=temperature,
    #     extra_body={
    #     "top_k": 20, 
    #     "chat_template_kwargs": {"enable_thinking": False},
    #     },    
    # )
    # 方法二:MODEL_URL="http://localhost:11434/v1"
    ollama_llm = ChatOpenAI(
        streaming=True,
        openai_api_base=MODEL_URL,  # VLLM 服务地址
        model_name=MODEL_PATH,
        temperature=temperature,
        # max_tokens=max_tokens,
        openai_api_key="EMPTY",  # 本地部署不需要 API key,但需要设置一个非空值
        extra_body={
        "top_k": 20, 
        "chat_template_kwargs": {"enable_thinking": False},
        }, 
    )

    return ollama_llm
if __name__ == "__main__":
    text = "讲个笑话"

    llm = get_ollama_llm(MODEL_PATH="qwen3:4b",MODEL_URL="http://localhost:11434/v1")
    # llm = get_api_llm()

    # 非思考模式 prompt后面加上一个/no_think
    # logger.info(llm.invoke(f"{text} /no_think")) # 直接调用
    # print(llm.invoke(text).content)

    # 简单的控制台流式输出调试
    for chunk in llm.stream(f"{text}"):  # 同步流式方法
        print(chunk.content, end="", flush=True)  # 无需异步环境

但是非常可惜,我使用了很多方法来让模型不思考,直接输出,模型都还是会思考输出。

尝试了下面的方法:

1.运行模型的时候,ollama run qwen3:4b /no_think 

2. 调用模型的时候提供如代码所示的参数和,提示词中写 /no_think 

3. 重新构建qwen3-4B.modelfile,里面的模版中给定no_think

4. 使用之前的通过VLLM部署模型的qwen3_nonthinking.jinja文件夹的内容。

如果读者有解决方法,可以评论区留意讨论。

2.1.2 测试ollama部署的gguf模型的推理速度

# 启用100%GPU来跑模型

export OLLAMA_USE_GPU=1

# 显示模型推理速度详情

ollama run qwen3:4b --verbose

2.2 使用vllm部署量化模型

我之前是有用过vllm部署qwen3-4B-bfloat16非量化版本的模型。教程如下,可以参考一下环境安装。

超详细VLLM框架部署qwen3-4B加混合推理探索!!!_vllm qwen3-CSDN博客

2.2.1 获取量化版本模型

模型选择一:动态量化模型,支持思考和非思考模式

Qwen3-4B-unsloth-bnb-4bit · 模型库

模型选择二:普通量化模型,支持思考和非思考模式

Qwen3-4B-bnb-4bit · 模型库

模型选择三:普通量化模型,仅支持非思考模式

Qwen3-4B-Instruct-2507-bnb-4bit · 模型库

模型选择四:普通量化模型,仅支持思考模式

Qwen3-4B-Thinking-2507-unsloth-bnb-4bit · 模型库

上述模型,可以按照自己的需求选择下载。

动态量化模型和普通的量化模型的区别如下:

场景

推荐配置

理由

移动端/低显存设备

模型二

显存占用更小,满足基础问答、摘要等需求

数学/代码/长文本推理

模型一

保留关键层精度,减少量化误差

工具调用(MCP)

模型一

保障函数解析准确性,避免工具调用失败

注:两者均使用 ​​NF4量化+双量化(Double Quant)​​,核心量化技术一致

可以理解成动态量化模型,并不是把全部的层都量化了,还保留了部分bfloat16精度的层。

以模型一下载为例子:

 # 下载modelscope

pip install modelscope

modelscope download --model unsloth/Qwen3-4B-unsloth-bnb-4bit --local_dir /root/model/Qwen3-4B-unsloth-bnb-4bit

2.2.2 安装VLLM

conda create -n vllmtest python=3.12 -y

conda activate vllmtest

# 下载vllm

pip install --upgrade vllm 

pip install "vllm>=0.8.5" -i https://mirrors.aliyun.com/pypi/simple/

PS: 如果之前有成功安装过VLLM包的虚拟环境,可以用克隆到新的虚拟环境,这样后续操作就不会把原来可以用的环境搞的不能用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGC_北苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值