logo
WeChat Login
vllm
vllm
VLLM
🔥 CNB x VLLM 企业级AI模型部署平台

🚀 CNB x VLLM 企业级AI模型部署平台

License Python VLLM

📘 VLLM简介

VLLM (Virtual Large Language Model) 是由加州大学伯克利分校和斯坦福大学联合开发的高性能大语言模型推理引擎。它通过创新的PagedAttention技术和连续批处理机制,显著提升了大模型推理的效率和吞吐量。

🌟 核心优势

  • PagedAttention: 高效管理注意力键值缓存,减少内存碎片
  • 连续批处理: 动态批处理请求,最大化GPU利用率
  • 快速模型加载: 支持快速模型权重加载和分布式推理
  • 高吞吐量: 相比传统推理引擎性能提升数倍

⚙️ 技术特性

  • 支持多种主流大语言模型(LLaMA、ChatGLM、Qwen等)
  • 提供RESTful API和Python接口
  • 支持张量并行和流水线并行
  • 内置量化支持(AWQ、GPTQ等)

⚖️ VLLM与Ollama对比

特性VLLMOllama
性能⭐⭐⭐⭐⭐ 高性能推理,支持连续批处理⭐⭐⭐ 中等性能,适合本地测试
部署复杂度⭐⭐⭐ 需要一定技术背景⭐⭐⭐⭐⭐ 一键部署,极简使用
扩展性⭐⭐⭐⭐⭐ 支持分布式部署⭐⭐ 单机部署为主
模型支持⭐⭐⭐⭐ 主流大模型⭐⭐⭐⭐ 多种模型格式
企业级特性⭐⭐⭐⭐⭐ 完善的监控和管理⭐⭐⭐ 基础功能
资源利用率⭐⭐⭐⭐⭐ 高效利用GPU资源⭐⭐⭐ 中等资源利用率

🎯 选择建议

  • 选择VLLM: 生产环境、高并发需求、企业级应用
  • 选择Ollama: 本地测试、快速原型、个人学习

⚡ 快速上手

vllm启动模型

vllm serve /workspace \
    --host 0.0.0.0 \
    --port 8080 \
    --dtype auto \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.5 \
    --tensor-parallel-size 1 \
    --max-num-seqs 256 \
    --enforce-eager \
    --served-model-name DeepSeek-R1-0528-Qwen3-8B

参数注释说明:

  • vllm serve /workspace : 启动vLLM服务,加载位于/workspace路径的模型
  • --host 0.0.0.0 : 监听的主机地址,0.0.0.0表示监听所有网络接口
  • --port 8080 : 服务端口号,客户端通过此端口访问模型
  • --dtype auto : 数据类型自动选择(float16/bfloat16等),根据硬件自动优化
  • --max-model-len 8192 : 模型支持的最大序列长度(token数量),包括输入+输出
  • --gpu-memory-utilization 0.5 : GPU内存利用率,0.5表示使用50%的GPU显存
  • --tensor-parallel-size 1 : 张量并行大小,1表示不使用张量并行(单GPU)
  • --max-num-seqs 256 : 最大并发序列数,控制同时处理的请求数量
  • --enforce-eager : 强制使用eager模式而非编译模式,避免编译开销
  • --served-model-name DeepSeek-R1-0528-Qwen3-8B : 指定服务模型的名称,用于API调用时识别

🛠️ 环境要求

  • Python 3.12+
  • CUDA 11.8+ (GPU部署)
  • NVIDIA GPU (推荐)
  • Docker (可选)

📡 API调用示例

查看模型信息

curl http://localhost:8080/v1/models

参数注释说明:

  • 返回json中的data.id代表模型名称

测试聊天

curl -X POST "http://localhost:8080/v1/chat/completions" -H "Content-Type: application/json" \
-d @- <<EOF
{
  "model": "$CNB_REPO_NAME",
  "messages": [{"role": "user", "content": "你好"}]
}
EOF

多模态测试

建议采用以下python脚本进行测试

import base64
import requests
import json

def test_multimodal():
    # 读取并编码图片
    with open('test.jpg', 'rb') as f:
        image_data = f.read()
        base64_image = base64.b64encode(image_data).decode('utf-8')
    
    # 构建请求数据
    payload = {
        "model": "GLM-4.1V-9B-Thinking",
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": "图片里有什么?"
                    },
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/jpeg;base64,{base64_image}"
                        }
                    }
                ]
            }
        ]
    }
    
    # 发送请求
    try:
        response = requests.post(
            "http://localhost:8080/v1/chat/completions",
            headers={"Content-Type": "application/json"},
            json=payload,
            timeout=300  # 5分钟超时
        )
        print("Status Code:", response.status_code)
        print("Response:", json.dumps(response.json(), indent=2, ensure_ascii=False))
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    test_multimodal()

🙏 致谢


Recent updates