首页 > 其他分享 >【课程总结】day24(下):大模型部署调用(vLLM+LangChain)

【课程总结】day24(下):大模型部署调用(vLLM+LangChain)

时间:2024-08-16 17:27:51浏览次数:20  
标签:Qwen2 day24 模型 0.5 LangChain tokens Instruct vLLM

前言

在上一章【课程总结】day24(上):大模型三阶段训练方法(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 for LLMs
Home-page: https://github.com/vllm-project/vllm
Author: vLLM Team
Author-email: 
License: Apache 2.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 import OpenAI
# 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
Thu Aug 15 17:29:21 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 12.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A10          On   | 00000000:00:07.0 Off |                    0 |
|  0%   53C    P0    61W / 150W |  19874MiB / 22731MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

安装LangChain

pip install langchain-openai

使用LangChain

# 引入 OpenAI 支持库
from langchain_openai import ChatOpenAI

# 连接信息
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类型 两种类型。
  • 不同类型的模型调用方式不同,如果模型类型与调用方式没有对应,可能会出现结果异常。

参考资料

vLLm官网指南文档
LangChain官网指南文档

标签:Qwen2,day24,模型,0.5,LangChain,tokens,Instruct,vLLM
From: https://blog.csdn.net/Deadwalk/article/details/141229981

相关文章

  • 使用 langchain 框架,构建一个简单的 LLM 应用程序
    介绍使用langchain框架,构建一个简单的LLM应用程序本文中出现的每段代码都是可以完整执行的注意大语言模型和各类框架迭代飞快,再看本文时,部分代码可能已经过时了本文所用到的python包版本dashscope1.20.3langchain0.2.12langchain-community0.2.11......
  • LangChain 安全特性全解析与实践指南
    LangChain安全特性全解析与实践指南引言在人工智能的浪潮中,LangChain以其卓越的能力,成为开发大型语言模型(LLM)应用程序的佼佼者。然而,随着技术的发展,安全问题逐渐浮出水面。本文将深入探讨LangChain的安全特性,并提供详细的代码示例和最佳实践,以确保开发者能够在保障安全......
  • 【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网
    文章目录前言一、示例选择器1.介绍及应用2.自定义示例选择器案例:AI点评姓名3.基于长度的示例选择器案例:对输入内容取反4.基于最大边际相关性(MMR)的示例选择器案例:得到输入的反义词5.基于n-gram重叠的示例选择器6.综合案例二、输出解析器1.介绍2.列表解析器3.日期......
  • Day24 第七章 回溯算法part03
    目录任务78.子集思路90.子集II思路93.复原IP地址思路心得体会任务78.子集给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。思路和组合问题类似,思路是从序列中每次选一个,选的深度......
  • 代码随想录day24 || 93 复原IP地址,78 子集, 90 子集2
    93复原ip地址funcrestoreIpAddresses(sstring)[]string{ //字符串分割问题,考虑回溯算法 varpath,res[]string iflen(s)<4{ returnres } backtracking(s,&path,&res) returnres}funcbacktracking(sstring,path*[]string,res*[]string){ ifle......
  • 初识LangChain的快速入门指南
    LangChain概述LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。LangChain简化了LLM应用程序生命周期的各个阶段:开发阶段:使用Lan......
  • 全网最全:一文入门最热的LLM应用开发框架LangChain_langchain框架
    f####1.LangChain简介1.1.LangChain发展史LangChain的作者是HarrisonChase,最初是于2022年10月开源的一个项目,在GitHub上获得大量关注之后迅速转变为一家初创公司。2017年HarrisonChase还在哈佛上大学,如今已是硅谷的一家热门初创公司的CEO,这对他来说是......
  • 创造智能对话:在LangChain中巧妙使用变量与模板
    创造智能对话:在LangChain中巧妙使用变量与模板在人工智能的世界里,对话管理是一项艺术,也是一项技术挑战。LangChain作为一个前沿的对话管理框架,提供了一套强大的工具,让开发者能够创建动态、个性化的对话体验。本文将深入探讨如何在LangChain中创建和管理变量,通过详细的步骤......
  • LangChain与泛型编程:探索代码生成的新维度
    LangChain与泛型编程:探索代码生成的新维度在软件开发领域,泛型编程是一种允许创建可重用组件的技术,这些组件可以在多种数据类型上工作的编程范式。LangChain作为一个假设的编程辅助工具,如果存在,它可能会支持泛型编程,以增强其代码生成的能力。本文将探讨LangChain对泛型编程......
  • LangChain代码风格指南:最佳实践与规范
    LangChain代码风格指南:最佳实践与规范引言LangChain作为一个强大的语言模型应用程序开发框架,提供了丰富的组件和工具来简化开发流程。然而,为了确保代码的可读性、可维护性和扩展性,遵循一定的代码风格指南至关重要。本文将详细解释LangChain的代码风格指南,并提供代码示例。......