python系列&deep_study系列:使用vllm部署自己的大模型
使用vllm部署自己的大模型
前言
本文介绍了如何使用vllm
部署一个高性能的大模型后端,支持WebUI
并集成Fast-Attn库
,详细讲解了安装步骤、模型部署、以及通过OpenAI风格API
进行调用的方法,包括参数设置和性能优化选项。
1. 引言
使用vllm
能够部署一个非常方便使用的大模型的后端,供webui前端
使用,它不仅能够加速模型的推理过程,包括支持fast-attn库
,而且还具有很友好的openai风格
的api调用功能
。
2. 安装Vllm
vllm
还是有一定的安装需求,根据官方文档,使用如下进行安装。
# (Recommended) Create a new conda environment.
conda create -n myenv python=3.9 -y
conda activate myenv
# Install vLLM with CUDA 12.1.
pip install vllm
这里没有提及fast-attn
的使用,如果没有安装默认使用的是XFormers
的backend
,建议有条件的话可以通过以下命令再安装一下fast-attn
。
pip install flash-attn
3. 部署模型
首先我们需要下载需要的模型,如果不下载的话,默认的模型会从huggingface
的模型库中下载。这里我们本地模型的地址是/data/nlp/models/llama3_7b_instruct
。那么只需要执行以下代码。
CUDA_VISIBLE_DEVICES=0 nohup python -m vllm.entrypoints.openai.api_server --model /data/nlp/models/llama3_8b_instruct --served-model-name llama3_8b_instruct --dtype=half > vllm_test.out &
这里served-model-name
指的是模型加载到api接口后的模型名(当然你可以将其改为gpt-3.5 turbo
,让llama3
来代替gpt-3.5
节省成本),后面dtype=half
是半精度加载。不过vllm
已经充分考虑了显存大小进行一个合适的加载了。以llama3_8b_instruct
为例,长度默认是4096
,加载后显存占用22G
,它会预先占用好显存。这里默认的端口是8000
,也可以通过--port
更改访问端口。
当命令行显式出INFO 04-26 13:08:05 selector.py:28] Using FlashAttention backend.
或者INFO 04-26 10:05:08 selector.py:33] Using XFormers backend.
的时候,就证明启动成功了。
关于vllm
的参数详细介绍,可以参考其参数解读。
4. 调用模型
调用模型可以通过curl或者python代码调用,风格是和openai
的api
一样的。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama3_8b_instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"}
]
}'
或者
```python
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="llama3_8b_instruct",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me a joke."},
]
)
print("Chat response:", chat_response)
更多的使用,可以参见它的官方文档或者github用于二次改造,比如它的templete
的自定义等。
当然,也有很多其他的推理框架,比如,OpenLLM
,DeepSpeed
等,可以看一下推理框架对比。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)