
大模型部署调用(vLLM+LangChain)
在上一章【[大模型三阶段训练方法(LLaMa Factory)]】内容中主要了解一个大模型的训练过程,无论是第三方的大模型还是自研的大模型,都需要部署到服务端,提供对应API接口供上层应用使用。所以,本章将主要了解vLLm + langchain的基本使用方法。
前言
在上一章【[大模型三阶段训练方法(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_tokens
和prompt_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
是一个开源框架,旨在帮助开发者构建基于语言模型的应用。 -
•
vLLM
和LangChain
都可以使用pip install安装。 -
• 模型有嵌入类型和常规类型;常规类型下有
Base类型
和Chat类型
两种类型。 -
• 不同类型的模型调用方式不同,如果模型类型与调用方式没有对应,可能会出现结果异常。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)