HF Jobs+ vLLM:快速部署OpenAI兼容LLM端点全指南

你可以通过一条简单的命令在托管基础设施上启动一个兼容OpenAI格式的私有大模型服务,全程无需手动配置服务器或Kubernetes集群,仅需按使用时长付费。服务启动后,你可以从本地笔记本、远程服务器或任意其他环境发起请求,这是快速搭建模型用于测试、评估或批量生成的最优方案。如果你需要更成熟的生产级托管服务,可以参考后续的产品对比说明。
接下来我们将完整介绍从准备到使用的全流程操作。
前置准备
首先你需要满足几个基础条件:
- 拥有有效的支付方式或预付费余额,服务将按硬件使用时长计费
- 安装了版本不低于1.20.0的huggingface_hub库,可以通过
pip install -U "huggingface_hub>=1.20.0"完成更新 - 在本地完成账号登录,执行
hf auth login命令即可
启动模型服务
核心启动命令为hf jobs run,它相当于托管环境下的docker run。我们将使用官方的vllm/vllm-openai镜像,通过--flavor参数指定需要的GPU规格,用--expose参数暴露vLLM的服务端口。举个基础示例,启动Qwen/Qwen3-4B模型:
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会将容器内的端口通过服务代理映射为公共可访问地址,完整的参数说明可以参考官方模型部署指南。命令执行后会返回任务ID和访问地址,比如返回的任务ID为6a381ca1953ed90bfb947332,后续我们将用<job_id>作为这个ID的占位符。
你需要等待几分钟让模型权重下载完成并启动服务,当日志中出现Application startup complete时,服务就正式就绪了。
发起模型请求
服务启动后,你可以从任意环境发起请求,vLLM兼容OpenAI API格式,所有请求都需要携带你的托管账号令牌作为Bearer验证。
最简单的测试方式是使用curl命令:
curl https://<job_id>--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指向暴露的服务地址,并使用托管账号令牌作为API密钥:
from huggingface_hub import get_token
from openai import OpenAI
client = OpenAI(
base_url=“https://<job_id>–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)
执行这段代码后,同样会得到对应的模型回复。在正式使用前,你可以先发起健康检查请求:curl https://<job_id>--8000.hf.jobs/v1/models -H "Authorization: Bearer $(hf auth token)",该请求会返回当前部署的模型列表。
🔐 服务端点受访问限制,并非公开可访问。 所有请求都必须携带拥有任务命名空间读取权限的托管账号令牌,直接在浏览器中访问地址会被拒绝。服务代理本身就充当了API网关,访问权限仅限定于你和你的组织成员。因此请妥善保管访问地址和令牌,不要随意分享给他人,也不要在不可信的环境中粘贴令牌。如果你需要更细粒度的访问控制或公开访问,可以在服务前添加专业的API网关,或者参考后续的产品对比说明。
及时关停服务
由于服务按使用时长计费,当你完成使用后请及时停止任务以避免额外费用。你可以通过以下命令取消任务:
hf jobs cancel <job_id>
你之前设置的--timeout参数是一个安全兜底机制,任务会在超时后自动停止,但主动取消任务会更节省成本。以a10g-large规格为例,每小时费用为1.5美元,你可以通过hf jobs hardware命令查看所有可用硬件的价格列表,选择最适合你模型的最小规格硬件。
部署更大参数的模型
这个部署方案同样可以支持更大参数的模型,你只需要更换更强的GPU规格,并通过--tensor-parallel-size参数指定模型需要拆分的GPU数量。比如部署122B参数的Qwen3.5混合专家模型,使用2台H200 GPU:
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参数需要和你选择的GPU数量保持一致,比如h200x2对应2块GPU,h200x8对应8块GPU。你可以通过hf jobs hardware命令查看所有可用的硬件规格,对于大模型来说,H200规格通常拥有更高的性价比。
需要注意的是,--max-model-len 32768 --max-num-seqs 256这两个参数是针对Qwen3.5-122B模型的特定配置:该模型采用混合Mamba/注意力架构,默认上下文长度为256K令牌,这会导致vLLM的默认批量设置超出GPU内存容量。通过限制上下文长度和并发序列数量,可以让模型顺利运行在GPU内存中。如果你的模型启动时出现内存不足或缓存块错误,首先尝试调整这两个参数的值。其他配置比如暴露地址、OpenAI客户端调用、令牌验证等都保持不变。
搭建本地聊天交互界面
如果你更倾向于使用聊天界面而非命令行调用,你可以通过短短几行Gradio代码搭建一个本地聊天界面,复用刚才部署的服务。我们可以在vllm serve命令中添加--reasoning-parser deepseek_r1参数,让Qwen3的思考过程以单独的字段返回(这并非必须,但可以提升交互体验),然后在本地运行以下代码(你只需要知道任务ID即可):
import gradio as gr
from gradio import ChatMessage
from huggingface_hub import get_token
from openai import OpenAI
client = OpenAI(base_url=“https://<job_id>–8000.hf.jobs/v1”, api_key=get_token())
def chat(message, history):
messages = [{“role”: m[“role”], “content”: m[“content”]} for m in history if not m.get(“metadata”)]
messages.append({“role”: “user”, “content”: message})
stream = client.chat.completions.create(model=“Qwen/Qwen3-4B”, messages=messages, stream=True)
thinking, answer = "", ""
for chunk in stream:
delta = chunk.choices[0].delta
thinking += delta.model_extra.get("reasoning", "")
answer += delta.content or ""
out = []
if thinking.strip():
status = "done" if answer.strip() else "pending"
out.append(ChatMessage(role="assistant", content=thinking, metadata={"title": "💭 Thinking", "status": status}))
if answer.strip():
out.append(ChatMessage(role="assistant", content=answer))
yield out
gr.ChatInterface(chat).launch()
执行代码后,打开http://127.0.0.1:7860即可进入聊天界面,模型的思考过程会显示在可折叠的面板中,最终回复会展示在下方。
通过SSH调试服务
如果你需要调试启动失败的问题、查看GPU内存使用情况或交互式查看日志,你可以直接通过SSH连接到运行中的任务容器。首先在启动任务时添加--ssh参数,并确保你的公钥已经上传到账号设置页面:
hf jobs run --flavor a10g-large --expose 8000 --timeout 2h --ssh \
vllm/vllm-openai:latest \
vllm serve Qwen/Qwen3-4B --host 0.0.0.0 --port 8000
之后通过以下命令连接到任务容器:
hf jobs ssh <job_id>
连接成功后,你就可以在容器内部执行nvidia-smi查看GPU状态、检查进程运行情况或直接调试模型,这比通过外部日志调试要方便得多。需要注意的是,SSH功能要求huggingface_hub版本不低于1.20.0。
作为编码代理后端使用
你还可以将这个服务端点作为终端编码代理的后端。Pi是一个提供商无关的代理工具,可以让你在本地托管的模型上运行读写、编辑和bash命令的智能代理。
首先需要进行一些前置配置:代理工具通过工具调用驱动模型,而vLLM只有在启用工具调用的情况下才能接受这类请求。因此你需要重新启动任务,添加--enable-auto-tool-choice和匹配模型家族的--tool-call-parser参数(对于Qwen3模型,使用hermes解析器)。同时为了获得更好的代理性能,我们可以使用更大参数的模型:
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 \
--reasoning-parser deepseek_r1 \
--enable-auto-tool-choice --tool-call-parser hermes
接下来,你需要在~/.pi/agent/models.json文件中添加这个自定义提供商:
{
"providers": {
"hf-jobs": {
"baseUrl": "https://<job_id>--8000.hf.jobs/v1",
"api": "openai-completions",
"apiKey": "!hf auth token",
"models": [
{ "id": "Qwen/Qwen3.5-122B-A10B" }
]
}
}
}
完成配置后,执行pi命令即可启动代理,此时你刚才部署的大模型就可以驱动终端中的交互式编码代理了。
产品对比:托管任务服务 vs 托管推理端点
托管模型服务并非只有这一种方案,托管推理端点是另一个官方托管产品,两者的选择取决于你的具体需求:
- 选择托管任务服务:当你需要最大程度的灵活性和控制权时,它相当于托管环境下的docker run,你可以自由选择镜像、vLLM启动参数和硬件规格,按使用时长付费。这种方案非常适合临时测试、一次性评估、批量生成或在正式投入使用前体验模型。
- 选择托管推理端点:当你需要更成熟的生产级服务时,它提供了长期运行服务所需的运维优化:包括更细粒度的访问控制(端点可以设置为公开、受保护或私有),以及空闲时自动缩容至零,避免闲置时段产生费用。如果你需要搭建持久化的服务端点,这是更合适的选择。
延伸阅读
本文主要介绍了使用vLLM部署模型的流程,但这种暴露端口的模式同样适用于其他兼容OpenAI格式的服务端。如果你需要使用其他工具部署模型,比如llama.cpp部署GGUF模型,或者使用SGLang作为服务后端,可以参考官方的模型部署指南,其中包含了这些后端的详细配置步骤。
塔猴是一个专注于为用户提供系统学习、内容创作与商业连接的AIGC综合服务平台,致力于为每一位AI探索者打造理想的创作、成长家园。在塔猴,你不仅可以学习众多AIGC类实战课程,获得与时俱进的AIGC技能和视野,还有机会获得长期商业合作和接单机会!点击进入:https://www.tahou.com/
AI生成内容提示:本文由人工智能辅助创作,内容仅供参考,不代表平台观点。请注意核实信息的准确性,并理性判断。




