成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大模型部署調用(vLLM+LangChain) 原創

發布于 2024-12-10 15:36
瀏覽
0收藏

前言

在上一章【???大模型三階段訓練方法(LLaMa Factory)??】內容中主要了解一個大模型的訓練過程,無論是第三方的大模型還是自研的大模型,都需要部署到服務端,提供對應API接口供上層應用使用。所以,本章將主要了解vLLm + langchain的基本使用方法。

大模型應用框架

大模型部署調用(vLLM+LangChain)-AI.x社區

一般來說,大模型應用的整體結構可以劃分為幾個層次:

  • 模型層:

功能:負責處理輸入數據并生成輸出。

代表: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)

運行結果:

大模型部署調用(vLLM+LangChain)-AI.x社區

上述的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(cnotallow='我是來自阿里云的大規模語言模型,我叫通義千問。',
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="你是誰"))

運行結果:

大模型部署調用(vLLM+LangChain)-AI.x社區

可以看到:

  • 同樣的模型,同樣的問題,調用方式的不同,調用的結果卻千差萬別。
  • 第一種使用??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技術 作者:熱情的Dongming

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

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
標簽
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 一区视频在线播放 | 999精品视频 | 五月天激情综合网 | 国产精品久久久久久久久久久久 | 亚洲欧美日韩一区二区 | 亚洲精品视频免费 | 手机看片169 | 欧美日韩国产在线观看 | 日韩精品一区二区三区中文在线 | 毛片一区 | 亚洲高清在线免费观看 | 玖玖爱365 | 日操操| 四虎影视一区二区 | 国产亚洲精品久久情网 | 久久久久久九九九九 | 在线播放精品视频 | 天天夜干 | 亚洲免费一区 | 激情毛片| 在线色网| 精品成人免费视频 | 久久久久成人精品亚洲国产 | 97精品超碰一区二区三区 | 国产精品99久久久久久动医院 | 91免费版在线观看 | 美女福利网站 | 亚洲a视频 | 国产精品三级久久久久久电影 | 91久久精品一区二区三区 | 97国产精品视频人人做人人爱 | 日韩一区二区三区精品 | 亚洲二区视频 | 91久久精品一区二区二区 | 国产精品亚洲精品久久 | 中文字幕av亚洲精品一部二部 | 精品真实国产乱文在线 | www.亚洲精品 | 草草网| 欧美激情视频一区二区三区免费 | 精品国产乱码一区二区三区 |