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

一、前言

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

二、大模型应用框架

在这里插入图片描述

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

模型层:

  • 功能:负责处理输入数据并生成输出。
  • 代表:BERT、GPT、Qwen2等等

推理层:

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

API层:

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

应用层:

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

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

1、vLLM

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

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

作用

  • 把大模型部署到服务端,暴露OpenAI compatible API
  • 提升性能: 使得大模型在推理时更加快速和高效。
  • 降低成本: 减少计算资源需求,降低云计算和硬件成本。

2、LangChain

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

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

作用:

  • 简化开发: 提供高层次的抽象,降低技术门槛。
  • 增强功能: 扩展语言模型的能力,处理更复杂的任务。

三、部署方法

1、准备模型

本次实践选择了Qwen2-0.5B-Instruct

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

2、安装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: 

3、部署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|  
|=============================================================================|  
+-----------------------------------------------------------------------------+

4、安装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})

1、返回信息

如果使用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,表示没有提供这些信息。

2、补充内容

模型类型

模型常规情况下有两种类型: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类型 两种类型。
  • 不同类型的模型调用方式不同,如果模型类型与调用方式没有对应,可能会出现结果异常。

六、最后分享

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方优快云官方认证二维码,免费领取【保证100%免费

<think>好的,我现在要处理用户关于如何将LangChain、Chatchat、VLLM和Ollama集成配置的问题。首先,我需要理解每个组件的功能以及它们之间的关系。 用户提到的LangChain是一个用于开发语言模型应用的框架,支持任务链和工具集成。Chatchat可能是一个聊天应用框架或界面,需要与LangChain结合。VLLM是专注于高效推理和部署的开源库,而Ollama可能是一个模型服务管理工具,但我不太确定它的具体作用,可能需要进一步确认。 接下来,我需要考虑这些组件如何协同工作。通常,集成这类技术涉及将模型推理服务(如VLLM和Ollama)作为后端,LangChain处理业务逻辑和任务链,Chatchat作为前端交互界面。可能的步骤包括安装依赖、配置模型服务、编写LangChain的适配代码,以及设置Chatchat的连接。 我需要验证各个组件之间的兼容性。例如,VLLM支持哪些模型格式?Ollama是否用于本地模型部署?用户可能需要将模型文件转换为特定格式,并通过API或本地端口提供服务。此外,LangChain需要调用这些服务的接口,可能需要使用相应的库或自定义工具。 然后,配置细节方面,用户需要设置环境变量,如API密钥、服务地址和端口。例如,VLLM可能运行在localhost:8000,而Ollama在另一个端口。在LangChain中,可能需要初始化LLM对象,指定vllm或ollama作为后端,并传递参数。 代码示例部分,可能需要展示如何用LangChain连接VLLM,比如使用LLM类初始化时的参数。同时,集成到Chatchat可能需要路由设置,将用户输入传递给LangChain的处理链,再获取响应返回前端。 另外,用户可能需要处理依赖冲突,比如不同库的版本要求。需要建议使用虚拟环境,并列出各组件的最低版本要求。此外,性能优化方面,比如调整VLLM的批处理大小或启用量化,可能提升推理速度。 最后,生成相关问题时要考虑用户可能的后续疑问,比如性能调优、部署方式、扩展功能等。需要确保回答覆盖常见问题,并引导用户进一步探索。 总结下来,我需要分步骤说明集成方法,确保技术细节准确,并提供可操作的配置示例和代码片段。同时,验证每个步骤的必要性和正确性,避免遗漏关键配置点。</think>以下是LangChain与Chatchat结合VLLM/Ollama的技术实现指南: ### 一、核心组件说明 1. **LangChain**:构建大语言模型应用的核心框架,支持组件化流程编排 2. **Chatchat**:基于LangChain开发的对话系统框架(GitHub星标8.4k+) 3. **vLLM**:由加州大学伯克利分校开发的高性能推理引擎,吞吐量提升30倍[^2] 4. **Ollama**:本地化运行大模型的容器化部署工具(支持Llama3/Mistral等) ### 二、集成配置步骤 #### 1. 环境部署 ```bash # 创建虚拟环境 conda create -n llm-integration python=3.10 conda activate llm-integration # 安装核心组件 pip install langchain-chatchat>=0.3.0 vllm>=0.3.2 ollama>=0.1.26 ``` #### 2. vLLM服务配置 ```python from vllm import LLM, SamplingParams # 启动vLLM服务 llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct", tensor_parallel_size=2, gpu_memory_utilization=0.9) sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=512) ``` #### 3. Ollama集成 ```yaml # configs/model_config.yaml MODEL_ROOT_PATH = "~/ollama/models" llm_model_dict = { "ollama": { "host": "http://localhost:11434", "model_name": "llama3:8b" }, "vllm": { "api_base": "http://localhost:8000/v1", "api_key": "EMPTY" } } ``` #### 4. LangChain接入 ```python from langchain.chains import LLMChain from langchain_community.llms import VLLMOpenAI # 创建vLLM连接实例 vllm = VLLMOpenAI( openai_api_key="EMPTY", openai_api_base="http://localhost:8000/v1", model_name="meta-llama/Meta-Llama-3-8B-Instruct", max_tokens=1024 ) # 构建对话链 prompt_template = """基于以下上下文: {context} 问题:{question}""" chain = LLMChain(llm=vllm, prompt=prompt_template) ``` ### 三、性能优化技巧 1. **动态批处理**:启用vLLM的`continuous_batching`参数 2. **量化部署**:使用Ollama的`--quantize q4_0`参数压缩模型体积 3. **缓存策略**:配置LangChain的`SQLiteCache`实现对话历史缓存 4. **硬件加速**:通过NVIDIA Triton部署vLLM实现多GPU并行推理 ### 四、验证部署 ```bash # 启动Chatchat服务 python startup.py --model-name meta-llama/Meta-Llama-3-8B-Instruct --llm-type vllm # 测试API接口 curl -X POST http://localhost:7861/chat \ -H "Content-Type: application/json" \ -d '{"query": "解释量子计算原理"}' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值