在 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 Name | qwenLong-l1 |
| Context Length | 32768 |
| Languages | en,zh |
| Abilities | chat |
| Description | QwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning |
| Architectures | Qwen2ForCausalLM(model_type 为qwen2) |
| 注册版本 | version: 2 |
从architectures与model_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}可选vllm、transformers、sglang之一;由于该规格仅支持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),仅供参考