以下是根据您的要求翻译的中文版本,保留了原文结构、技术术语和代码块,并忽略了导航、页脚等无关内容。
一条命令在 HF Jobs 上运行 vLLM 服务器
发布日期:2026年6月26日 在 GitHub 上更新 点赞 5 Quentin Gallouédec @qgallouedec
先决条件
- 一种支付方式或正值的预付费信用余额(Jobs 按硬件使用分钟计费)。
huggingface_hub >= 1.20.0:运行pip install -U "huggingface_hub>=1.20.0"。- 本地已登录:运行
hf auth login。
启动服务器
hf jobs run 相当于 HF 基础设施上的 docker run。我们使用官方的 vllm/vllm-openai 镜像,通过 --flavor 请求一个 GPU,并通过 --expose 暴露 vLLM 的端口:
hf jobs run --flavor a10g-large --expose 8000 --timeout 2h \
vllm/vllm-openai:latest \
vllm serve Qwen/Qwen3-4B --host 0.0.0.0 --port 8000
--expose 8000 将容器的端口通过 HF 的公共 jobs 代理路由出去(完整参考请参见 [Serve Models 指南](https://huggingface.co/docs/hub/en/spaces-serve-models))。该命令会打印你的服务器可访问的 URL:
✓ Job started
id: 6a381ca1953ed90bfb947332
url: https://huggingface.co/jobs/qgallouedec/6a381ca1953ed90bfb947332
Hint: Exposed ports are reachable at (requires an HF token with read access to the job):
https://6a381ca1953ed90bfb947332--8000.hf.jobs
6a381ca1953ed90bfb947332 是你的 job ID。请记住它,我们稍后会用到。在本文后续部分,我们将用 作为它的占位符。
给它几分钟时间下载权重并启动。当日志显示 Application startup complete 时,你的服务器就运行起来了。
从任何地方查询它
vLLM 使用 OpenAI API,每个请求只需要你的 HF token 作为 bearer token。最快的方式是使用 curl:
curl https://--8000.hf.jobs/v1/chat/completions \
-H "Authorization: Bearer $(hf auth token)" \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-4B",
"messages": [{"role": "user", "content": "Hello!"}],
"chat_template_kwargs": {"enable_thinking": false}
}'
这会返回标准的 OpenAI 风格 JSON,其中 choices[0].message.content 包含 "Hello! How can I assist you today? 😊"。
或者,从 Python 中,将 OpenAI 客户端指向暴露的 URL,并将 token 作为 API key 传入:
from huggingface_hub import get_token
from openai import OpenAI
client = OpenAI(
base_url="https://--8000.hf.jobs/v1",
api_key=get_token(),
)
resp = client.chat.completions.create(
model="Qwen/Qwen3-4B",
messages=[{"role": "user", "content": "Hello!"}],
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(resp.choices[0].message.content)
# Hello! How can I assist you today? 😊
在开始之前快速检查健康状况:
curl https://--8000.hf.jobs/v1/models -H "Authorization: Bearer $(hf auth token)"
应该会列出模型。
🔐 该端点是有访问控制的,不是公开的。每个请求必须携带一个具有 job 命名空间读取权限的 HF token。普通的浏览器访问会被拒绝。实际上,jobs 代理就是你的 API 网关:访问权限仅限于你(以及你的组织)。这对于私人使用来说没问题,但请妥善处理 URL:不要期望它是开放的而随意分享,也不要把你的 token 粘贴到不可信的地方。如果你需要更细粒度或公共访问权限,请在前面放置一个合适的网关。或者参见下面的“HF Jobs 还是 Inference Endpoints?”。
清理
Jobs 按秒计费,所以用完后请停止服务器:
hf jobs cancel
你设置的 --timeout 是一个安全网(它会自动停止),但显式取消会更便宜。一个 a10g-large 的运行费用为 $1.50/小时——查看 hf jobs hardware 获取完整价格列表,并选择适合你模型的最小 flavor。
更进一步:更大的模型
同样的命令可以扩展到更大的模型——选择一个更强大的 --flavor,并通过 --tensor-parallel-size 告诉 vLLM 将模型分片到多个 GPU 上。例如,在 2× H200 上运行 122B 的 Qwen3.5 混合专家模型:
hf jobs run --flavor h200x2 --expose 8000 --timeout 2h \
vllm/vllm-openai:latest \
vllm serve Qwen/Qwen3.5-122B-A10B \
--host 0.0.0.0 --port 8000 --tensor-parallel-size 2 \
--max-model-len 32768 --max-num-seqs 256
--tensor-parallel-size 应与 flavor 中的 GPU 数量匹配(h200x2 → 2,h200x8 → 8)。运行 hf jobs hardware 查看可用的 flavor,并为更大的模型设置更长的 --timeout,因为它们需要更长时间下载和加载。对于大模型,H200 flavor 通常性价比最高。
--max-model-len 32768 --max-num-seqs 256 这些标志特定于该模型:Qwen3.5-122B 是一种混合 Mamba/注意力架构,默认上下文长度为 256K token,这会导致 vLLM 的默认批处理设置内存不足。限制上下文长度和并发序列数量可以使其保持在 GPU 内存范围内。如果模型因内存不足或缓存块错误而无法启动,首先尝试调低这两个参数。
其他所有内容(暴露的 URL、OpenAI 客户端、token 认证)都保持不变。
更进一步:在 UI 中聊天
更喜欢聊天窗口而不是 curl?几行 Gradio 代码就可以指向同一个端点。在 vllm serve 命令中添加 --reasoning-parser deepseek_r1,这样 Qwen3 的思考过程会作为单独字段返回(不是必须的,但很有帮助),然后在本地运行以下代码(你只需要 job ID):
import gradio as gr
from gradio import ChatMessage
from huggingface_hub import get_token
from openai import OpenAI
client = OpenAI(base_url="h
(由于原文在此处截断,翻译也相应结束。)
如果需要继续翻译后续内容,请提供完整的原文。