跳到内容

RunPod

vLLM 可以部署在 RunPod 上,这是一个提供按需和无服务器 GPU 实例的云 GPU 平台,适用于 AI 推理工作负载。

先决条件

  • 拥有 GPU Pod 访问权限的 RunPod 账户
  • 运行 CUDA 兼容模板(例如 runpod/pytorch)的 GPU Pod

启动服务器

通过 SSH 进入你的 RunPod Pod 并启动与 OpenAI 兼容的 vLLM 服务器

python -m vllm.entrypoints.openai.api_server \
    --model <model-name> \
    --host 0.0.0.0 \
    --port 8000

注意

使用 --host 0.0.0.0 绑定到所有接口,以便从容器外部访问服务器。

开放 8000 端口

RunPod 通过其代理暴露 HTTP 服务。要使 8000 端口可访问

  1. 在 RunPod 控制面板中,导航到你的 Pod 设置。
  2. 8000 添加到开放的 HTTP 端口列表中。
  3. Pod 重启后,RunPod 将提供一个格式如下的公共 URL

    https://<pod-id>-8000.proxy.runpod.net
    

排查 502 Bad Gateway 错误

来自 RunPod 代理的 502 Bad Gateway 错误通常意味着服务器尚未开始监听。常见原因包括

  • 模型仍在加载 — 大型模型需要时间下载并加载到 GPU 内存中。请查看 Pod 日志以了解进度。
  • 错误的宿主绑定 — 确保你传入了 --host 0.0.0.0。绑定到 127.0.0.1(默认值)会导致服务器无法从代理访问。
  • 端口不匹配 — 确认 --port 的值与在 RunPod 控制面板中开放的端口相匹配。
  • GPU 内存不足 — 模型可能对于分配的 GPU 来说过大。请检查日志中是否有 CUDA OOM(内存溢出)错误,并考虑使用更大的实例,或针对多 GPU Pod 添加 --tensor-parallel-size 参数。

验证部署

服务器运行后,使用 curl 请求进行测试

命令

curl https://<pod-id>-8000.proxy.runpod.net/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "<model-name>",
        "messages": [
            {"role": "user", "content": "Hello, how are you?"}
        ],
        "max_tokens": 50
    }'

响应

{
    "id": "chat-abc123",
    "object": "chat.completion",
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "I'm doing well, thank you for asking! How can I help you today?"
            },
            "index": 0,
            "finish_reason": "stop"
        }
    ]
}

你也可以检查服务器的健康检查端点

curl https://<pod-id>-8000.proxy.runpod.net/health