文章摘要
文章介绍了使用HF Jobs+ vLLM快速部署OpenAI兼容LLM端点的全流程,包括前置准备、启动服务、发起请求等步骤。还提及及时关停服务以节省成本,支持部署大参数模型,可搭建本地聊天界面、通过SSH调试、作为编码代理后端,最后对比了托管任务服务与推理端点。

你可以通过一条简单的命令在托管基础设施上启动一个兼容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生成内容提示:本文由人工智能辅助创作,内容仅供参考,不代表平台观点。请注意核实信息的准确性,并理性判断。

以上内容不代表本平台立场,仅供读者参考