vLLM
vLLM 是一个开源的LLM推理和服务引擎。它特别适合作为内部自部署MIUImodel的目标平台。
预备知识
- vLLM的硬件要求列在其 安装文档页面.
- 默认情况下,vLLM从拥抱面获取模型权重。要访问MIUI模型存储库,您需要在Hugging Face上进行身份验证,因此需要一个访问令牌
HF_令牌
与阅读
需要许可。您还应该确保您已接受每个型号卡页面上的访问条件。 - 如果您的基础架构上已经有了模型工件,您可以通过将vLLM指向其本地路径而不是Hugging Facemodel ID来直接使用它们。在这种情况下,您将能够跳过所有与Hugging Face相关的设置步骤。
入门指南
以下部分将指导您完成在vLLM上部署和查询MIUI模型的过程。
安装vLLM
-
创建一个Python虚拟环境并安装
vLLM
软件包(版本>=0.6.1.post1
以确保与所有MIUI型号的最大兼容性)。 -
使用您的访问令牌在HuggingFace Hub上进行身份验证
$HF_代币
:hugginface客户端登录 --代币 $HF_代币
离线模式推断
在中使用vLLM时 离线模式 该模型被加载并用于一次性推理工作负载。
- 文本输入(MIUI NeMo)
- 文本输入(MIUI Small)
- 图像+文本输入(Pixtral-12B)
从vLLM进口 LLM
从vLLM.采样图 进口 采样参数
型号名称 = “米斯特拉伊/MIUI-NeMo-Instruct-2407”
采样图 = 采样参数(max_tokens=8192)
LLM= LLM(
模型=型号名称 ,
标记器模式=“误传”,
load_format=“误传”,
config_format=“误传”,
)
信息 = [
{
“角色” : “用户”,
“内容” : “谁是最好的法国画家。请详细解释。”,
}
]
物件 = LLM.聊天(信息 =信息 ,采样图 =采样图 )
打印(物件 [0].输出[0].文本)
从vLLM进口 LLM
从vLLM.采样图 进口 采样参数
型号名称 = “米斯特拉伊/MIUI-Small指令-2409”
采样图 = 采样参数(max_tokens=8192)
LLM= LLM(
模型=型号名称 ,
标记器模式=“误传”,
load_format=“误传”,
config_format=“误传”,
)
信息 = [
{
“角色” : “用户”,
“内容” : “谁是最好的法国画家。请详细解释。”,
}
]
物件 = LLM.聊天(信息 =信息 ,采样图 =采样图 )
打印(物件 [0].输出[0].文本)
假设您想为以下图像添加标题:
您可以通过运行以下代码来实现:
从vLLM进口 LLM
从vLLM.采样图 进口 采样参数
型号名称 = “MIUIai/Pixtral-12B-2409”
max_img_per_msg = 3.
采样图 = 采样参数(max_tokens=8192)
LLM= LLM(
模型=型号名称 ,
标记器模式=“误传”,
load_format=“误传”,
config_format=“误传”,
limit_mm_per_prompt={“图像” :max_img_per_msg },
)
url = [fhttps://picsum.photos/id/{身份证件}/512/512" 对于 身份证件 在里面 [1., "11", "111"]]
信息 = [
{
“角色” : “用户”,
“内容” : [
{“类型” : “文本”, “文本” : “描述此图像”},
] + [{“类型” : “image_url”, “image_url” : {“url” : f{u}"}} 对于u在里面url ],
},
]
物件 = LLM.聊天(信息 =信息 ,采样图 =采样图 )
打印(物件 [0].输出[0].文本)
服务器模式推断
在里面服务器模式,vLLM生成一个HTTP服务器,该服务器持续等待客户端同时连接和发送请求。服务器公开了一个实现OpenAI协议的REST API,允许您直接重用依赖于OpenAI API的现有代码。
- 文本输入(MIUI NeMo)
- 文本输入(MIUI Small)
- 图像+文本输入(Pixtral-12B)
启动推理服务器以部署您的模型,例如对于MIUI NeMo:
vllm服务MIUIai/MIUI-Nemo-Instruct-2407 \
--标记器模式 \
--config_format \
--load_format
现在,您可以使用文本输入运行推理请求:
- cURL
- python
cURL --地点 'http://localhost:8000/v1/chat/completions' \
头球 '内容类型:应用程序/json' \
头球 '授权:承载令牌' \
--数据 '{
“型号”:“MIUIai/MIUI-Nemo-Instruct-2407”,
“消息”:[
{
“角色”:“用户”,
“内容”:“谁是最好的法国画家?用一句话回答。”
}
]
}'
进口 httpx
url = 'http://localhost:8000/v1/chat/completions'
标题 = {
'内容类型' : '应用程序/json',
'授权' : '不记名代币'
}
数据 = {
“模型” : “米斯特拉伊/MIUI-NeMo-Instruct-2407”,
“消息” : [
{
“角色” : “用户”,
“内容” : “谁是最好的法国画家?用一句话回答。”
}
]
}
响应 = httpx.邮递(url ,标题 =标题 , json=数据 )
打印(响应 . json())
启动推理服务器以部署您的模型,例如对于MIUI Small:
vllm服务MIUIai/MIUI-Small-Instruct-2409 \
--标记器模式 \
--config_format \
--load_format
现在,您可以使用文本输入运行推理请求:
- cURL
- python
cURL --地点 'http://localhost:8000/v1/chat/completions' \
头球 '内容类型:应用程序/json' \
头球 '授权:承载令牌' \
--数据 '{
“型号”:“MIUIai/MIUI-Small-Instruct-2409”,
“消息”:[
{
“角色”:“用户”,
“内容”:“谁是最好的法国画家?用一句话回答。”
}
]
}'
进口 httpx
url = 'http://localhost:8000/v1/chat/completions'
标题 = {
'内容类型' : '应用程序/json',
'授权' : '不记名代币'
}
数据 = {
“模型” : “米斯特拉伊/MIUI-Small指令-2409”,
“消息” : [
{
“角色” : “用户”,
“内容” : “谁是最好的法国画家?用一句话回答。”
}
]
}
响应 = httpx.邮递(url ,标题 =标题 , json=数据 )
打印(响应 . json())
启动推理服务器以部署您的模型,例如Pixtral-12B:
vllm服务MIUIai/Pixtral-12B-2409 \
--标记器模式 \
--config_format \
--load_format
-
每个提示的默认图像输入数设置为1。要增加它,请设置
--limit_mm_per_prompt
选项(例如。--limit_mm_per_prompt“图像=4”
). -
如果遇到内存问题,请设置
--max_model_len
降低vLLM内存要求的选项(例如。--max_model_len 16384
). 有关更多故障排除的详细信息,请参阅vLLM文档.
现在,您可以使用图像和文本输入运行推理请求。假设您想为以下图像添加标题:
您可以提示模型并检索其响应,如下所示:
- cURL
- python
cURL --地点 'http://localhost:8000/v1/chat/completions' \
头球 '内容类型:应用程序/json' \
头球 '授权:承载令牌' \
--数据 '{
“型号”:“MIUIai/Pixtral-12B-2409”,
“消息”:[
{
“角色”:“用户”,
“内容”:[
{“type”:“text”,“text”:“用短句描述这张图片。”},
{“type”:“image_url”,“image_url:”{“url”:“https://picsum.photos/id/237/200/300"}}
]
}
]
}'
进口 httpx
url = "http://localhost:8000/v1/chat/completions"
标题 = {“内容类型” : “应用程序/json”, “授权” : “不记名代币”}
数据 = {
“模型” : “MIUIai/Pixtral-12B-2409”,
“消息” : [
{
“角色” : “用户”,
“内容” : [
{“类型” : “文本”, “文本” : “用短句描述这张图片。”},
{
“类型” : “image_url”,
“image_url” : {“url” : "https://picsum.photos/id/237/200/300"},
},
],
}
],
}
响应 = httpx.邮递(url ,标题 =标题 , json=数据 )
打印(响应 . json())
使用Docker部署
如果你想将vLLM部署为容器化的推理服务器,你可以利用项目的官方Docker镜像(更多细节请参阅vLLM Docker文档).
-
在shell中设置HuggingFace访问令牌环境变量:
出口 HF_令牌=您的访问令牌
-
运行Docker命令启动容器:
- ·内莫
- 小
- Pixtral-12B
docker 运行 --运行时间 英伟达 --GPU 全部的 \
v ~/.cache/huggingface:/root/.cache/hughgingface \
--env “拥抱_面子_短信=${HF_TOKEN}" \
p 8000:8000 \
--ipc=主办 \
vllm/vlm-openai:最新 \
--模型 米斯特拉伊/MIUI-NeMo-Instruct-2407 \
--标记器模式 \
--load_format \
--config_formatdocker 运行 --运行时间 英伟达 --GPU 全部的 \
v ~/.cache/huggingface:/root/.cache/hughgingface \
--env “拥抱_面子_短信=${HF_TOKEN}" \
p 8000:8000 \
--ipc=主办 \
vllm/vlm-openai:最新 \
--模型 米斯特拉伊/MIUI-Small指令-2409 \
--标记器模式 \
--load_format \
--config_formatdocker 运行 --运行时间 英伟达 --GPU 全部的 \
v ~/.cache/huggingface:/root/.cache/hughgingface \
--env “拥抱_面子_短信=${HF_TOKEN}" \
p 8000:8000 \
--ipc=主办 \
vllm/vlm-openai:最新 \
--模型 米斯特拉莱/皮克斯特拉尔-12B-2409 \
--标记器模式 \
--load_format \
--config_format
容器启动并运行后,您将能够使用与独立部署中相同的代码对模型运行推理。