在 Xinference 中部署 qwenLong-l1:长上下文推理模型的内置注册、启动命令与源码级解读
2026/9/17 22:57:39 网站建设 项目流程

在 Xinference 中部署 qwenLong-l1:长上下文推理模型的内置注册、启动命令与源码级解读

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

qwenLong-l1 是 Xinference 内置注册表(llm_family.json)中收录的长上下文推理大模型,对应 QwenLong-L1 系列 32B 权重,支持 32768 token 上下文窗口与中英文对话。本文以 qwenlong-l1.rst 为主线,完整继承该文档中的两种模型规格与启动命令,并结合仓库源码深入解析其聊天模板、停止符、推理标签与引擎支持等底层实现,帮助读者在本地或集群中快速、准确地拉起这一推理模型。

模型概览:规格、语言与能力

根据内置模型注册条目,qwenLong-l1 在 Xinference 中的核心元信息如下(与 qwenlong-l1.rst 及 llm_family.json 一一对应):

属性
Model NameqwenLong-l1
Context Length32768
Languagesen,zh
Abilitieschat
DescriptionQwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning
ArchitecturesQwen2ForCausalLM(model_type 为qwen2
注册版本version: 2

architecturesmodel_type字段(llm_family.json)可以看出,该模型在底层基于 Qwen2 系列因果语言模型架构实现,Xinference 会据此为它选择相应的权重复核、tokenizer 加载与生成参数默认值。

两种模型规格与量化选择

原文档给出了 qwenLong-l1 的两种官方模型规格,分别面向“全精度部署”与“AWQ 量化部署”两类场景:

Spec 1:pytorch 格式(32B,无量化)

  • Model Format:pytorch
  • Model Size (in billions):32
  • Quantizations:none
  • Engines:vLLM、Transformers、SGLang
  • Model ID:Tongyi-Zhiwen/QwenLong-L1-32B
  • Model Hubs:Hugging Face(Tongyi-Zhiwen/QwenLong-L1-32B)、ModelScope(iic/QwenLong-L1-32B

Spec 2:awq 格式(32B,Int4 量化)

  • Model Format:awq
  • Model Size (in billions):32
  • Quantizations:Int4
  • Engines:vLLM、Transformers、SGLang
  • Model ID:Tongyi-Zhiwen/QwenLong-L1-32B-AWQ
  • Model Hubs:Hugging Face(Tongyi-Zhiwen/QwenLong-L1-32B-AWQ)、ModelScope(iic/QwenLong-L1-32B-AWQ

在源码层面,这两种规格分别被记录为model_specs数组中的两个条目(llm_family.json):pytorch 规格在 Hugging Face 与 ModelScope 两处来源均仅声明none一种量化;awq 规格则声明Int4量化,并对应独立的 AWQ 权重仓库Tongyi-Zhiwen/QwenLong-L1-32B-AWQ。这意味着:需要满精度效果时选 Spec 1,需要降低显存占用、加快推理吞吐时选 Spec 2,两条路径均可由 Xinference 自动完成权重下载与启动。

启动命令:一行拉起 qwenLong-l1

原文档为两种规格分别提供了可直接执行的xinference launch命令。启动时需要同时指定--model-engine--model-name--size-in-billions--model-format--quantization参数,并将${engine}${quantization}替换为实际取值:

Spec 1(pytorch,无量化):

xinference launch --model-engine ${engine} --model-name qwenLong-l1 --size-in-billions 32 --model-format pytorch --quantization ${quantization}

其中${engine}可选vllmtransformerssglang之一;由于该规格仅支持none量化,${quantization}应替换为none

Spec 2(awq,Int4 量化):

xinference launch --model-engine ${engine} --model-name qwenLong-l1 --size-in-billions 32 --model-format awq --quantization ${quantization}

此处${quantization}应替换为Int4(量化选项以注册表声明为准,llm_family.json 中该规格只注册了Int4)。

几点实操建议(基于注册条目推导):

  • --model-engine缺省时,Xinference 会按照引擎发现策略选择可用引擎;显式指定可在多引擎环境下避免歧义。
  • 32B 模型在pytorch/none规格下显存占用较大,建议在显存充足的 GPU 上运行;若显存受限,优先选用awq/Int4规格。
  • 首次启动时 Xinference 会自动从 Hugging Face 或 ModelScope 拉取对应 Model ID 的权重并缓存,之后再次启动直接复用本地缓存。

源码级解读:聊天模板、停止符与推理标签

原文档只给出命令与规格,而 llm_family.json 中隐藏着决定模型“怎么对话、怎么停止、怎么展示思考过程”的关键实现细节,值得逐一展开:

1. 内置聊天模板(chat_template)

该条目携带一段完整的 Jinja2chat_template,其核心结构是 Qwen 系列的<|User|>/<|Assistant|>对话标记,并支持三类扩展:

  • system prompt 注入:遍历 messages 收集 system 角色的内容并置于bos_token之后;
  • 工具调用(tool calls):当 assistant 消息携带tool_calls时,拼接<|tool▁calls▁begin|><|tool▁call▁begin|><|tool▁sep|><|tool▁call▁end|>等标记,并以\``json` 包裹函数参数,天然支持 OpenAI 风格的工具调用消息结构;
  • 推理内容剥离:当 assistant 回复中含</think>时,模板会把</think>之前的思考部分剔除,仅输出正式回答;在add_generation_prompt时追加<|Assistant|><think>\n作为思考起始提示。

这意味着 qwenLong-l1 不仅是一个“能回答”的模型,其对话模板本身就为链式思考(chain-of-thought)与工具调用做好了格式约定。

2. 停止标记(stop / stop_token_ids)

  • stop:["<|end▁of▁sentence|>"]
  • stop_token_ids:[151643]

在 vLLM 引擎中,Xinference 会在生成配置未显式给出停止符时,将model_family.stop_token_ids注入generate_config(见 vllm/core.py),从而保证长上下文推理输出能够在正确的句子结束标记处截断,避免生成失控。

3. 推理标签(reasoning_start_tag / reasoning_end_tag)

该条目声明了:

  • reasoning_start_tag:<think>
  • reasoning_end_tag:</think>

这两个标签在模型运行时被上层推理解析器使用:LLM类构造ReasoningParser时会从model_family读取这两个标签(见 core.py),而解析器的职责(定义于 reasoning_parser.py)就是从流式输出中识别并分离思考内容与正式回答。这样,通过 Xinference 的 OpenAI 兼容接口消费 qwenLong-l1 时,客户端可以拿到带reasoning_content字段的流式增量,实现“先展示思考、再输出结论”的推理型交互体验。

引擎支持与选择依据

原文档声明 qwenLong-l1 支持vLLM、Transformers、SGLang三种引擎。在 backends.rst 的引擎选型说明中,qwenLong-l1被明确列入 vLLM 支持的模型清单;从 llm_family.json 的virtualenv字段也可以看到,三种引擎分别对应#transformers_dependencies##sglang_dependencies##vllm_dependencies#依赖宏,Xinference 会按所选引擎在对应虚拟环境中安装依赖。

引擎选型的一般参考:

  • vLLM:追求高吞吐与生产级并发,支持pytorch/awq两种格式与none/Int4量化(前提是 Linux + CUDA 设备),并借助reasoning_content支持推理内容流式返回,是生产部署的首选;
  • Transformers:最通用、环境约束最少,适合验证模型行为或在无 vLLM/SGLang 依赖的环境中运行;
  • SGLang:面向低延迟与结构化生成优化的引擎,同样覆盖该模型的两种格式。

部署后的统一 API 消费

模型启动成功后,Xinference 会为其暴露与 OpenAI Chat Completions 兼容的/v1/chat/completions接口,也可以通过 client/restful 下的 Python 客户端(RestfulClient/AsyncRestfulClient)以编程方式调用:

from xinference.client import Client client = Client("http://127.0.0.1:9997") model_uid = client.launch_model( model_name="qwenLong-l1", model_size_in_billions=32, model_format="pytorch", quantization="none", model_engine="vllm", ) chat = client.get_model(model_uid).chat( messages=[{"role": "user", "content": "用不超过 2000 字解释长上下文推理模型的关键技术"}] ) print(chat["choices"][0]["message"]["content"])

需要说明:launch_model的参数与命令行--model-name/--size-in-billions/--model-format/--quantization/--model-engine一一对应;若选择 awq 规格,将model_format="awq"quantization="Int4"即可。

小结

围绕 qwenlong-l1.rst 这篇内置模型文档,本文完整覆盖了 qwenLong-l1 的上下文窗口、中英双语能力、两种 32B 规格(pytorch/none 与awq/Int4)以及对应的两条xinference launch启动命令;同时结合 llm_family.json 的注册条目,补充解释了聊天模板的思考/工具调用标记、停止符[151643]、推理标签<think>/</think>的运行时解析链路,以及 vLLM、Transformers、SGLang 三种引擎的选择依据。无论你是要在单机快速体验长上下文推理,还是要为生产环境搭建高吞吐的推理服务,都可以直接以本文给出的命令为起点,把 qwenLong-l1 接入 Xinference 的统一推理 API。

【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询