自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大模型部署調(diào)用(vLLM+LangChain) 原創(chuàng)

發(fā)布于 2024-12-10 15:36
瀏覽
0收藏

前言

在上一章【???大模型三階段訓(xùn)練方法(LLaMa Factory)??】?jī)?nèi)容中主要了解一個(gè)大模型的訓(xùn)練過(guò)程,無(wú)論是第三方的大模型還是自研的大模型,都需要部署到服務(wù)端,提供對(duì)應(yīng)API接口供上層應(yīng)用使用。所以,本章將主要了解vLLm + langchain的基本使用方法。

大模型應(yīng)用框架

大模型部署調(diào)用(vLLM+LangChain)-AI.x社區(qū)

一般來(lái)說(shuō),大模型應(yīng)用的整體結(jié)構(gòu)可以劃分為幾個(gè)層次:

  • 模型層:

功能:負(fù)責(zé)處理輸入數(shù)據(jù)并生成輸出。

代表:BERT、GPT、Qwen2等等

  • 推理層:
  • 功能:將大模型部署到服務(wù)端,暴露API。(行業(yè)普遍規(guī)范是OpenAI compatible API)
  • 代表:vLLM
  • API層:
  • 功能:將語(yǔ)言模型與其他數(shù)據(jù)源、API 和服務(wù)集成,方便上層應(yīng)用開發(fā)。
  • 代表:LangChain
  • 應(yīng)用層:
  • 功能:醫(yī)療、教育、金融、法律等垂類應(yīng)用的具體支撐系統(tǒng)

基于以上的層次信息,我們接下來(lái)初步了解行業(yè)目前普遍使用的:??vLLM + LangChain??。

vLLM

簡(jiǎn)介: ??vLLM??? 是一個(gè)專為大語(yǔ)言模型??(LLMs)??設(shè)計(jì)的高效推理庫(kù),旨在優(yōu)化推理速度內(nèi)存使用。它通過(guò)動(dòng)態(tài)計(jì)算圖先進(jìn)的內(nèi)存管理技術(shù),幫助開發(fā)者在資源有限的情況下高效地運(yùn)行大型模型。vLLM 支持多種流行的語(yǔ)言模型,使得用戶能夠快速切換和比較不同的模型,適用于實(shí)時(shí)應(yīng)用場(chǎng)景。

網(wǎng)址:https://docs.vllm.ai/en/latest/index.html

作用

  • 把大模型部署到服務(wù)端,暴露OpenAI compatible API
  • 提升性能: 使得大模型在推理時(shí)更加快速和高效。
  • 降低成本: 減少計(jì)算資源需求,降低云計(jì)算和硬件成本。

LangChain

簡(jiǎn)介: ??LangChain?? 是一個(gè)開源框架,旨在幫助開發(fā)者構(gòu)建基于語(yǔ)言模型的應(yīng)用。它通過(guò)提供一系列工具和組件,簡(jiǎn)化了語(yǔ)言模型與其他數(shù)據(jù)源、API 和服務(wù)的集成過(guò)程。??LangChain?? 允許用戶構(gòu)建復(fù)雜的工作流,增強(qiáng)了語(yǔ)言模型的功能和靈活性,適用于多種應(yīng)用場(chǎng)景。

網(wǎng)址:https://www.langchain.com/langchain

作用:

  • 簡(jiǎn)化開發(fā): 提供高層次的抽象,降低技術(shù)門檻。
  • 增強(qiáng)功能: 擴(kuò)展語(yǔ)言模型的能力,處理更復(fù)雜的任務(wù)。

部署方法

準(zhǔn)備模型

由于上一章中訓(xùn)練的醫(yī)療大模型 隨著容器的關(guān)閉已經(jīng)被清理,所以本次實(shí)踐選擇了??Qwen2-0.5B-Instruct??。

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

安裝vLLM

pip install vllm

安裝完畢后,可以通過(guò)如下命令查看安裝情況

pip show vllm

運(yùn)行結(jié)果:

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?? 對(duì)應(yīng)模型的文件夾名字,由于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接口測(cè)試部署情況:

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":"你是一個(gè)很有用的助手。"},
{"role":"user","content":"中華人民共和國(guó)的首都是哪里?"},
]
)
print("Chat response:", chat_response)

運(yùn)行結(jié)果:

大模型部署調(diào)用(vLLM+LangChain)-AI.x社區(qū)

上述的Python代碼僅是測(cè)試vLLm的部署情況,實(shí)際應(yīng)用中,需要使用??LangChain??進(jìn)行進(jìn)一步封裝。

使用??nvidia-smi??查看顯存,可以看到顯存已經(jīng)被占用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 支持庫(kù)
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
)

# 大模型調(diào)用
llm.invoke(input="你是誰(shuí)?")

運(yùn)行結(jié)果:

AIMessage(cnotallow='我是來(lái)自阿里云的大規(guī)模語(yǔ)言模型,我叫通義千問。',
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= "你是誰(shuí)?")??,然后查看result信息,可以查看更多信息。

  • result.content??'我是來(lái)自阿里云的大規(guī)模語(yǔ)言模型,我叫通義千問。'??
  • 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}??說(shuō)明:
  • ??completion_tokens???: 生成的文本中使用的令牌數(shù)。在這個(gè)例子中,生成的文本包含 ??17?? 個(gè)令牌(token)。
  • ??prompt_tokens???: 輸入提示中使用的令牌數(shù)。在這個(gè)例子中,輸入的提示包含 ??22?? 個(gè)令牌。
  • ??total_tokens???: 總令牌數(shù),即 ??completion_tokens??? 和 ??prompt_tokens?? 的總和。在這個(gè)例子中,總令牌數(shù)為 39。
  • ??finish_reason???: 表示生成文本的結(jié)束原因。在這個(gè)例子中,??finish_reason ???的值為 ??stop??,意味著文本生成在達(dá)到預(yù)定條件后正常結(jié)束。
  • ??logprobs??: 該字段通常用于提供生成過(guò)程中每個(gè)令牌的對(duì)數(shù)概率。在這個(gè)例子中,它的值為 None,表示沒有提供這些信息。

補(bǔ)充內(nèi)容

模型類型

模型常規(guī)情況下有兩種類型:Base類型 和 Chat類型。

  • ??Qwen2-0.5B??: 代表Qwen2-0.5B的Base類型模型。
  • ??Qwen2-0.5B-Instruct??: 代表Qwen2-0.5B的Chat類型模型。

調(diào)用方式

由于模型的類型不同,那么在LangChain中調(diào)用方式也不同。

from langchain_openai import OpenAI

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

# Base方式調(diào)用了一個(gè)Chat類型模型
model = OpenAI(base_url=base_url, api_key=api_key, model=model_id)

print(model.invoke(input="你是誰(shuí)"))

運(yùn)行結(jié)果:

大模型部署調(diào)用(vLLM+LangChain)-AI.x社區(qū)

可以看到:

  • 同樣的模型,同樣的問題,調(diào)用方式的不同,調(diào)用的結(jié)果卻千差萬(wàn)別。
  • 第一種使用??from langchain_openai import ChatOpenAI??,即Chat方式調(diào)用一個(gè)Instruct類型模型,結(jié)果是正常的。
  • 第二種使用??from langchain_openai import OpenAI??,即Base方式調(diào)用一個(gè)Instruct類型模型,結(jié)果是有問題的。
  • Chat方式返回的信息是一個(gè)AIMessage,而Base方式返回的是一個(gè)字符串。

內(nèi)容小結(jié)

  • ??vLLM??? 是一個(gè)專為大語(yǔ)言模型??(LLMs)??設(shè)計(jì)的高效推理庫(kù),旨在優(yōu)化推理速度內(nèi)存使用。
  • ??LangChain?? 是一個(gè)開源框架,旨在幫助開發(fā)者構(gòu)建基于語(yǔ)言模型的應(yīng)用。
  • ??vLLM??? 和 ??LangChain?? 都可以使用pip install安裝。
  • 模型有嵌入類型和常規(guī)類型;常規(guī)類型下有??Base類型?? 和??Chat類型?? 兩種類型。
  • 不同類型的模型調(diào)用方式不同,如果模型類型與調(diào)用方式?jīng)]有對(duì)應(yīng),可能會(huì)出現(xiàn)結(jié)果異常。

?

本文轉(zhuǎn)載自公眾號(hào)一起AI技術(shù) 作者:熱情的Dongming

原文鏈接:??https://mp.weixin.qq.com/s/qCxe338gok4fr3wtwaxcTA??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦