Ubuntu中部署Vllm大语言模型的生产环境


1、创建虚拟环境

conda create -n vllm python=3.12 -y && conda activate vllm

2、安装vllm和modelscope

pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

3、测试是否安装成功

python -c "import vllm; print(f'VLLM 版本: {vllm.__version__}')"
展示版本号

python -c "import torch; print(f'可用 GPU 数量: {torch.cuda.device_count()}')"
展示可用GPU数量

4、下载Phi4-mini版的模型文件

modelscope download --model microsoft/Phi-4-mini-instruct --local_dir ./models/Phi-4-mini-instruct

( 模型下载到当前路径的models文件夹下,并且模型文件夹命名为 Phi-4-mini-instruct )

5、启动vllm服务

python -m vllm.entrypoints.openai.api_server \
  --model /home/zhangfanxp/env/vllm/models/Phi-4-mini-instruct/ \
  --served-model-name "Phi-4-mini-instruct" \
  --gpu-memory-utilization 0.85 \
  --max-num-seqs 8 \
  --tensor-parallel-size 1 \
  --max-model-len 4096 \
  --dtype float16 \
  --host 127.0.0.1 \
  --port 5000

特别注意:
启动vllm服务器时,最长token是4096,但是,下面运行python代码时,max_tokens要小于4096

6、测试vllm服务的api接口:

curl 127.0.0.1:5000/v1/models

如果返回
{"object":"list","data":[{"id":"/home/zhangfanxp/aiproject/Phi-4-mini-instruct","object":"model","created":1744469862,"owned_by":"vllm","root":"/home/zhangfanxp/aiproject/Phi-4-mini-instruct","parent":null,"max_model_len":2048,"permission":[{"id":"modelperm-cfc25c5ca6344f06a0d11027ed4329a4","object":"model_permission","created":1744469862,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}(vllm) zhangfanxp@
则表示接口是畅通的。

-----------------------------------------------------------------------------------------------------

编写python代码list_llm.py运行,来查看当前Vllm服务中可用的大模型名称:

from openai import OpenAI client = OpenAI( base_url="http://localhost:5000/v1", api_key="no-key-required" ) # 查看模型列表 models = client.models.list() print("Available models:", [model.id for model in models.data])


7、编写调用Vllm Api的python代码(run_llm.py):

import openai

client = openai.OpenAI(
    base_url="http://localhost:5000/v1",
    api_key="no-key-required"
)

def test_generation(prompt):
    response = client.chat.completions.create(
        model="Phi-4-mini-instruct",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3,
        max_tokens=2048
    )
    return response.choices[0].message.content

# 测试不同类别的问题
questions = [
    "孩子不喜欢学习怎么办?",
]

for idx, q in enumerate(questions):
    print(f"问题 {idx+1}: {q}")
    print("回答:", test_generation(q))
    print("\n" + "="*50 + "\n")

8、运行python代码

python run_llm.py

出现结果,则表示LLM推理调用正常!

----------------------------------------------------------------------------

也可以通过编写调用Gradio库的python代码来实现网页对话:

import openai
import gradio as gr

# 设置本地 vllm 的 openai 接口地址和 dummy key(vllm 无需认证)
client = openai.OpenAI(
    base_url="http://localhost:5000/v1",
    api_key="no-key-required"
)

def chat_bot(user_input, history):
    """
    调用 vllm 本地部署模型进行对话,并维护历史。
    """
    if history is None:
        history = []

    # 构造 message 历史(OpenAI 新接口使用 messages 格式)
    messages = []
    for user_msg, bot_msg in history:
        messages.append({"role": "user", "content": user_msg})
        messages.append({"role": "assistant", "content": bot_msg})
    messages.append({"role": "user", "content": user_input})

    try:
        response = client.chat.completions.create(
            model="Phi-4-mini-instruct",  # 确保该名称与 vllm 中配置一致
            messages=messages,
            temperature=0.7,
            max_tokens=1024
        )
        answer = response.choices[0].message.content.strip()
    except Exception as e:
        answer = f"调用模型时出错:{str(e)}"

    history.append((user_input, answer))
    return history, history

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("## 🧠 与本地部署的 Phi-4-mini-instruct 对话")
    chatbot = gr.Chatbot()
    state = gr.State([])  # 保存对话历史
    with gr.Row():
        txt = gr.Textbox(
            show_label=False,
            placeholder="请输入你的问题...",
            lines=2,
            container=True
        )
        submit_btn = gr.Button("提交")

    # 当点击按钮时调用对话函数
    submit_btn.click(chat_bot, inputs=[txt, state], outputs=[chatbot, state])
    # 清空输入框
    submit_btn.click(lambda: "", None, txt)

demo.launch()


----  ----  ----  ----  ----  ----  ----  ----  ----  ----  ----  
在conda虚拟环境中安装gradio库和openai库后,运行上述python代码即可!


评论

此博客中的热门博文

通过命令行在Github上发布项目的新版本

利用GitHub免费的静态页面托管空间发布网页

本地部署OpenAvatarChat实时交互数字人系统