2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

大模型部署调用(vLLM+LangChain)

发布日期:2024-12-16 07:35:57 浏览次数: 4762
作者:一起AI技术

微信搜一搜,关注“一起AI技术”

前言

在上一章【大模型三阶段训练方法(LLaMa Factory)】内容中主要了解一个大模型的训练过程,无论是第三方的大模型还是自研的大模型,都需要部署到服务端,提供对应API接口供上层应用使用。所以,本章将主要了解vLLm + langchain的基本使用方法。

大模型应用框架

一般来说,大模型应用的整体结构可以划分为几个层次:

  • • 模型层:

    • • 功能:负责处理输入数据并生成输出。

    • • 代表:BERT、GPT、Qwen2等等

  • • 推理层:

    • • 功能:将大模型部署到服务端,暴露API。(行业普遍规范是OpenAI compatible API)

    • • 代表:vLLM

  • • API层:

    • • 功能:将语言模型与其他数据源、API 和服务集成,方便上层应用开发。

    • • 代表:LangChain

  • • 应用层:

    • • 功能:医疗、教育、金融、法律等垂类应用的具体支撑系统

基于以上的层次信息,我们接下来初步了解行业目前普遍使用的:vLLM + LangChain

vLLM

简介vLLM 是一个专为大语言模型(LLMs)设计的高效推理库,旨在优化推理速度内存使用。它通过动态计算图先进的内存管理技术,帮助开发者在资源有限的情况下高效地运行大型模型。vLLM 支持多种流行的语言模型,使得用户能够快速切换和比较不同的模型,适用于实时应用场景。

网址:https://docs.vllm.ai/en/latest/index.html

作用

  • • 把大模型部署到服务端,暴露OpenAI compatible API

  • • 提升性能: 使得大模型在推理时更加快速和高效。

  • • 降低成本: 减少计算资源需求,降低云计算和硬件成本。

LangChain

简介LangChain 是一个开源框架,旨在帮助开发者构建基于语言模型的应用。它通过提供一系列工具和组件简化了语言模型与其他数据源、API 和服务的集成过程LangChain 允许用户构建复杂的工作流,增强了语言模型的功能和灵活性,适用于多种应用场景。

网址:https://www.langchain.com/langchain

作用:

  • • 简化开发: 提供高层次的抽象,降低技术门槛。

  • • 增强功能: 扩展语言模型的能力,处理更复杂的任务。

部署方法

准备模型

由于上一章中训练的医疗大模型 随着容器的关闭已经被清理,所以本次实践选择了Qwen2-0.5B-Instruct

git clone https://www.modelscope.cn/qwen/Qwen2-0.5B-Instruct.git

安装vLLM

pip install vllm

安装完毕后,可以通过如下命令查看安装情况

pip show vllm

运行结果:

Name: vllm
Version:0.5.1
Summary: A high-throughput and memory-efficient inference and serving engine forLLMs
Home-page: https://github.com/vllm-project/vllm
Author: vLLM Team
Author-email:
License:Apache2.0
Location:/usr/local/lib/python3.10/site-packages
Requires: aiohttp, cmake, fastapi, filelock, lm-format-enforcer, ninja, numpy, nvidia-ml-py, openai, outlines, pillow, prometheus-client, prometheus-fastapi-instrumentator, psutil, py-cpuinfo, pydantic, ray, requests, sentencepiece, tiktoken, tokenizers, torch, torchvision, tqdm, transformers, typing-extensions, uvicorn, vllm-flash-attn, xformers
Required-by:

部署vLLM

python -m vllm.entrypoints.openai.api_server --model Qwen2-0.5B-Instruct --host 0.0.0.0 --port 8000

Qwen2-0.5B-Instruct 对应模型的文件夹名字,由于Linux下文件路径大小写敏感,所以此处需要保持大小写一致。

成功部署后显示:

INFO:     Started server process [1657]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

我们使用OpenAI compatible API接口测试部署情况:

from openai importOpenAI
# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key ="EMPTY"
openai_api_base ="http://localhost:8000/v1"

client =OpenAI(
   api_key=openai_api_key,
   base_url=openai_api_base,
)

chat_response = client.chat.completions.create(
   model="Qwen2-0.5B-Instruct",
   messages=[
{"role":"system","content":"你是一个很有用的助手。"},
{"role":"user","content":"中华人民共和国的首都是哪里?"},
]
)
print("Chat response:", chat_response)

运行结果:

上述的Python代码仅是测试vLLm的部署情况,实际应用中,需要使用LangChain进行进一步封装。

使用nvidia-smi查看显存,可以看到显存已经被占用19G。

root@dsw-624205-75f5bf5ffb-cm59j:/mnt/workspace# nvidia-smi
ThuAug1517:29:212024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01DriverVersion:470.103.01   CUDA Version:12.1|
|-------------------------------+----------------------+----------------------+
| GPU  NamePersistence-M|Bus-IdDisp.A |VolatileUncorr. ECC |
|FanTempPerfPwr:Usage/Cap|Memory-Usage| GPU-UtilCompute M.|
|||               MIG M.|
|===============================+======================+======================|
|0  NVIDIA A10          On|00000000:00:07.0Off|0|
|0%53C    P0    61W/150W|19874MiB/22731MiB|0%Default|
|||                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
|Processes:|
|  GPU   GI   CI        PID   TypeProcess name                  GPU Memory|
|        ID   ID                                                   Usage|
|=============================================================================|
+-----------------------------------------------------------------------------+

安装LangChain

pip install langchain-openai

使用LangChain

# 引入 OpenAI 支持库
from langchain_openai importChatOpenAI

# 连接信息
base_url ="http://localhost:8000/v1"
api_key ="EMPTY"
model_id ="Qwen2-0.5B-Instruct"

# 连接大模型
llm =ChatOpenAI(
       base_url=base_url,
       api_key=api_key,
       model=model_id
)

# 大模型调用
llm.invoke(input="你是谁?")

运行结果:

AIMessage(content='我是来自阿里云的大规模语言模型,我叫通义千问。',
additional_kwargs={
'refusal':None}, response_metadata={'token_usage':
{'completion_tokens':17,'prompt_tokens':22,'total_tokens':39},
'model_name':'Qwen2-0.5B-Instruct',
'system_fingerprint':None,
'finish_reason':'stop',
'logprobs':None},
id='run-ca1584a6-0ff5-4d49-bfb2-ad932231e762-0',
usage_metadata={'input_tokens':22,'output_tokens':17,'total_tokens':39})

返回信息

如果使用result = llm.invoke(input= "你是谁?"),然后查看result信息,可以查看更多信息。

  • • result.content'我是来自阿里云的大规模语言模型,我叫通义千问。'

  • • result.response_metadata{'token_usage':{'completion_tokens':17,
    'prompt_tokens':22,
    'total_tokens':39},
    'model_name':'Qwen2-0.5B-Instruct',
    'system_fingerprint':None,
    'finish_reason':'stop',
    'logprobs':None}
    说明:

  • completion_tokens: 生成的文本中使用的令牌数。在这个例子中,生成的文本包含 17 个令牌(token)。

  • prompt_tokens: 输入提示中使用的令牌数。在这个例子中,输入的提示包含 22 个令牌。

  • total_tokens: 总令牌数,即 completion_tokensprompt_tokens 的总和。在这个例子中,总令牌数为 39。

  • finish_reason: 表示生成文本的结束原因。在这个例子中,finish_reason 的值为 stop,意味着文本生成在达到预定条件后正常结束。

  • logprobs: 该字段通常用于提供生成过程中每个令牌的对数概率。在这个例子中,它的值为 None,表示没有提供这些信息。

补充内容

模型类型

模型常规情况下有两种类型:Base类型 和 Chat类型。

  • Qwen2-0.5B: 代表Qwen2-0.5B的Base类型模型。

  • Qwen2-0.5B-Instruct: 代表Qwen2-0.5B的Chat类型模型。

调用方式

由于模型的类型不同,那么在LangChain中调用方式也不同。

from langchain_openai import OpenAI

base_url = "http://localhost:8000/v1"
api_key = "EMPTY"
model_id = "Qwen2-0.5B-Instruct"

# Base方式调用了一个Chat类型模型
model = OpenAI(base_url=base_url, api_key=api_key, model=model_id)

print(model.invoke(input="你是谁"))

运行结果:

可以看到:

  • • 同样的模型,同样的问题,调用方式的不同,调用的结果却千差万别。

  • • 第一种使用from langchain_openai import ChatOpenAI,即Chat方式调用一个Instruct类型模型,结果是正常的。

  • • 第二种使用from langchain_openai import OpenAI,即Base方式调用一个Instruct类型模型,结果是有问题的。

  • • Chat方式返回的信息是一个AIMessage,而Base方式返回的是一个字符串。

内容小结

  • vLLM 是一个专为大语言模型(LLMs)设计的高效推理库,旨在优化推理速度内存使用

  • LangChain 是一个开源框架,旨在帮助开发者构建基于语言模型的应用

  • vLLMLangChain 都可以使用pip install安装。

  • • 模型有嵌入类型和常规类型;常规类型下有Base类型Chat类型 两种类型。

  • • 不同类型的模型调用方式不同,如果模型类型与调用方式没有对应,可能会出现结果异常。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅