使用 Xinference 部署 MiniCPM-2B-sft-bf16:中文轻量级对话模型的启动与调用实战
【免费下载链接】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
MiniCPM 是由 ModelBest 与清华 NLP 团队推出的端侧(End-Size)大语言模型,其 SFT 微调版本minicpm-2b-sft-bf16参数量仅约 2.4B(不含 Embedding),却拥有 4096 token 上下文与原生中文对话能力,非常适合在个人电脑、边缘设备或低显存环境上快速落地。本文以 Xinference 内置模型定义与 CLI 源码为主线,完整讲解该模型的规格、启动命令、多引擎选择(vLLM / Transformers)、Python SDK 调用与排障要点,帮助你在一条命令内完成从模型下载到推理服务的全流程。
模型规格速览
minicpm-2b-sft-bf16是 Xinference 内置的 LLM 模型族之一,其官方文档卡片(minicpm-2b-sft-bf16.rst)与内置模型清单 xinference/model/llm/llm_family.json 中登记的元数据完全一致:
| 属性 | 值 |
|---|---|
| Context Length | 4096 |
| Model Name | minicpm-2b-sft-bf16 |
| Languages | zh(中文) |
| Abilities | chat(对话) |
| 模型来源 | ModelBest Inc. 与 TsinghuaNLP 联合开发 |
| 参数量 | 约 2.4B(不含 Embedding 层) |
| Model Format | pytorch |
| Model Size (in billions) | 2 |
| Quantizations | none(bf16 原始精度,不提供量化档位) |
| Engines | vLLM、Transformers |
从源码看,该条目还携带了更多启动阶段会用到的底层信息:
- chat_template:
{% for message in messages %}{% if message['role'] == 'user' %}{{'<用户>' + message['content'].strip() + '<AI>'}}{% else %}{{message['content'].strip()}}{% endif %}{% endfor %},即使用<用户>/<AI>特殊标记拼接对话的 MiniCPM 风格模板(见 llm_family.json); - stop_token_ids:
[1, 2],配合stop序列["<s>", "</s>"]控制生成终止; - architectures:
["MiniCPMForCausalLM"],用于 vLLM / Transformers 识别模型类; - virtualenv 依赖:
#transformers_dependencies#(Transformers 引擎)与#vllm_dependencies#、#system_numpy#(vLLM 引擎),Xinference 会在启用虚拟环境时按所选引擎自动安装对应依赖。
模型权重来源与版本锁定
模型规格中登记了三个模型源(model_src,见 llm_family.json):
- Hugging Face:
openbmb/MiniCPM-2B-sft-bf16,锁定 revisionfe1d74027ebdd81cef5f815fa3a2d432a6b5de2a; - ModelScope:
OpenBMB/miniCPM-bf16,revision 为master; - OpenMind Hub:
AI-Research/MiniCPM-2B-sft-bf16。
这意味着 Xinference 会根据你的网络环境自动从最可达的模型中心拉取权重,并优先使用内置的精确 revision 以保证可复现性。你可以通过环境变量等方式切换模型源(具体参见 models/sources 相关说明),无需手动下载或指定本地路径。
启动命令:一行完成部署
文档卡片给出了标准的启动命令(xinference launch),只需按所选引擎填入参数即可:
xinference launch --model-engine ${engine} --model-name minicpm-2b-sft-bf16 --size-in-billions 2 --model-format pytorch --quantization ${quantization}由于该模型只有none一种量化档位,实际命令应为:
# 使用 vLLM 引擎 xinference launch --model-engine vllm --model-name minicpm-2b-sft-bf16 --size-in-billions 2 --model-format pytorch --quantization none # 使用 Transformers 引擎 xinference launch --model-engine transformers --model-name minicpm-2b-sft-bf16 --size-in-billions 2 --model-format pytorch --quantization none启动时 XInference 会先检查内置模型注册表(BUILTIN_LLM_FAMILIES,见 xinference/model/llm/llm_family.py),匹配到该模型后自动下载权重并拉起推理服务。命令执行期间会以进度条形式展示加载进度,完成后打印该实例的model uid(源码见 xinference/deploy/cmdline.py)。
各参数含义与可选值
xinference launch的参数定义在 xinference/deploy/cmdline.py,与本模型最相关的参数如下:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--model-name/-n | 必填 | 无 | 要启动的模型名,这里固定为minicpm-2b-sft-bf16 |
--model-type/-t | LLM | 模型类型,LLM 为默认值 | |
--model-engine/-en | 无 | 推理引擎,本模型支持vllm与transformers;LLM 必填,缺失时启动会直接报错(见 cmdline.py) | |
--size-in-billions/-s | 无 | 模型参数量级,本模型为2 | |
--model-format/-f | 无 | 模型格式,本模型为pytorch | |
--quantization/-q | 无 | 量化档位,本模型仅none | |
--model-uid/-u | 无 | 自定义实例唯一标识,不指定则由服务端生成 | |
--replica/-r | 1 | 实例副本数 | |
--n-gpu | auto | 使用的 GPU 数量,auto自动探测,none表示纯 CPU | |
--worker-ip | 无 | 分布式场景下指定模型运行的目标 worker | |
--gpu-idx | 无 | 指定 worker 上可用 GPU 编号(逗号分隔) | |
--trust-remote-code | True | 是否允许 Hub 上自定义建模代码,默认开启 | |
--enable-virtual-env | 关 | 为模型创建独立虚拟环境并安装引擎依赖 | |
--env/-ev | 无 | 以KEY VALUE形式传入环境变量,可多次使用 |
补充说明:
- 对于
size_in_billions,源码会将其转换为整数(含_或.时保留为字符串,见 cmdline.py),因此2与2B类写法均可按规则解析; - 若显存紧张,可追加
--n-gpu none用 CPU 推理(Transformers 引擎更适合低资源环境),或通过--gpu-idx 0指定具体卡; - 模型权重首次下载体积较大,可预先配置模型中心的访问凭据与下载加速通道(见 getting_started)。
引擎选型:vLLM 与 Transformers 的取舍
minicpm-2b-sft-bf16的规格中同时列出vLLM与Transformers两个引擎,分别面向不同场景:
- vLLM:主打高吞吐与 PagedAttention 显存优化,适合并发请求较多、需要最大化服务吞吐的生产场景。它依赖
#vllm_dependencies#与#system_numpy#(见 llm_family.json),建议在配备 CUDA GPU 的环境中使用。 - Transformers:基于 Hugging Face Transformers 生态,部署门槛低、兼容性好,同样适合 CPU 推理与快速验证,依赖
#transformers_dependencies#。
两个引擎共享同一个MiniCPMForCausalLM架构标记与同一套对话模板,因此切换引擎不会改变对话行为,只需更换--model-engine参数即可无缝切换。
通过 Python SDK 调用对话能力
模型启动并进入READY状态后,即可通过 Xinference 的 RESTful 客户端发起对话。RESTfulClient.chat()的实现位于 xinference/client/restful/restful_client.py,它向/v1/chat/completions发送请求,兼容 OpenAI 风格的 messages 结构:
from xinference.client import RESTfulClient client = RESTfulClient("http://127.0.0.1:9997") # 默认服务端点 model_uid = "minicpm-2b-sft-bf16" # 或启动时自定义的 --model-uid completion = client.chat( model_uid, [ {"role": "user", "content": "用一句话介绍 MiniCPM 模型"}, ], generate_config={ "temperature": 0.7, "max_tokens": 256, "stream": False, }, ) print(completion["choices"][0]["message"]["content"])关键点:
chat的messages参数遵循 OpenAI Chat Completions 协议;generate_config支持temperature、max_tokens、stream等生成参数,stream=True时返回逐块(chunk)迭代器;- 服务端在组装请求时会套用上面提到的
<用户>/<AI>chat_template,因此客户端无需关心 MiniCPM 的特殊对话标记; - 同一模型服务还可通过标准的 OpenAI 兼容接口(
/v1/chat/completions)直接访问,便于接入 LangChain、OpenAI SDK 等既有工具链。
常见问题与排障
- 报错
--model-engine is required for LLM models:启动 LLM 时必须显式传入--model-engine vllm或--model-engine transformers(见 cmdline.py)。 --quantization该填什么:本模型仅提供none一档(bf16 原始精度),不要尝试填写 gguf 等其他量化档位,否则无法匹配内置模型规格。- 首次启动很慢:首次会从模型中心下载约数 GB 的权重,进度条显示的是模型加载进度;网络受限时可优先使用 ModelScope / OpenMind Hub 源。
- 显存不足:改用 Transformers 引擎并配合
--n-gpu none走 CPU 推理,或参考 model_memory 估算 2B 级模型所需内存。 - 自定义模型源或本地权重:如需指向本地权重或自定义模型族,可参照 custom.rst 注册自定义 LLM,而不是直接使用内置名称。
总结
minicpm-2b-sft-bf16是 Xinference 中开箱即用的中文端侧对话模型:4096 上下文、2.4B 参数、<用户>/<AI>原生模板,一条xinference launch命令即可拉起 vLLM 或 Transformers 推理服务,并通过 OpenAI 兼容接口或 Python SDK 直接调用。对于想在笔记本、单卡乃至 CPU 环境上快速体验中文对话能力的开发者,这是成本最低的上手路径之一。
【免费下载链接】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),仅供参考