这篇适合谁
适合有 8 卡工作站或服务器、想在自己机器上跑 Kimi K2.5 的开发者。读完你能启动一个兼容 OpenAI 协议的服务,并跑通普通对话、流式输出和一次需要两轮模型请求的工具调用。
为什么要本地部署
本文列出三个理由。第一是数据隐私:对话和处理都在内网完成,更容易满足合规要求。第二是延迟:不经过公网,网络波动的影响小,适合高频交互和自动化 Agent 任务。第三是成本:吞吐量很大的业务,本地部署可能比长期调用 API 省钱[1]。
环境和依赖
实测环境是 8 张 NVIDIA RTX PRO 6000,每张 96GB,系统为 Ubuntu 22.04,CUDA 版本 12.8,Python 3.12,PyTorch 2.8.0[1]。先建一个 Python 3.12 的 conda 环境,并升级 pip[1]。
conda create -n sglang python=3.12 pip -y
conda activate sglang
python -m pip install --upgrade pip在 AutoDL 上下载慢时,可以执行 source /etc/network_turbo 开启网络加速,用 unset http_proxy; unset https_proxy 关闭加速[1]。
直接执行 pip install sglang 处理 Kimi 2.5 时可能遇到兼容性问题。官方的部署指南建议从源码安装 SGLang,并指定特定版本的 cuDNN,这一步建议照做[1][2]。
pip install "sglang @ git+https://github.com/sgl-project/sglang.git#subdirectory=python"
pip install nvidia-cudnn-cu12==9.16.0.29下载模型
用 ModelScope 的 snapshot_download 下载 moonshotai/Kimi-K2.5,cache_dir 要选一个空间足够的目录[1]。
from modelscope import snapshot_download
# 下载 Kimi-K2.5 模型
model_dir = snapshot_download(
'moonshotai/Kimi-K2.5',
cache_dir='./kimi_models',
revision='master'
)
print(f"模型下载完成,存储路径为: {model_dir}")启动服务
--model-path 要指向包含 config.json 和权重文件的文件夹,权重可以是 .bin 或 .safetensors 格式[1]。--tp 8 表示用 8 张卡做张量并行[1]。--trust-remote-code 允许执行模型里的自定义代码。两个解析器参数 --tool-call-parser kimi_k2 和 --reasoning-parser kimi_k2 分别处理 Kimi 的工具调用和推理输出[1]。
sglang serve --model-path /your/path/to/Kimi-K2.5 --tp 8 --trust-remote-code --tool-call-parser kimi_k2 --reasoning-parser kimi_k2启动服务的终端要保持开着,客户端脚本另开一个终端运行[1]。
启动为什么这么慢
启动耗时很长,需要有心理准备。按实测数据,单从磁盘读取权重就要约 1 小时 45 分钟。读完权重后,还有一段较长的初始化,期间会进行多卡之间的 P2P 通信、张量切分和 MoE 专家排列,几十分钟内终端可能没有任何日志[1]。整个启动过程实测为 8714 秒,约 2 小时 25 分钟[1]。
显存的读数有两个。SGLang 报告每张卡约 72.33G,这是权重和必要缓冲区的实际占用。nvidia-smi 显示每张卡约 81.4G,差额来自 SGLang 预先分配的静态图和较大的 KV 缓存池[1]。日志中出现 HTTP 200 响应和 API 调用成功的记录,就说明部署成功[1]。
普通对话和流式输出
先确认服务已经就绪,再发请求。启动完成前发出的请求会失败,而且启动本身可能很久,所以看启动日志比反复重试更可靠[1]。
客户端的基础地址是 http://127.0.0.1:30000/v1,API Key 填 empty,模型名填 default。短指令会一次性返回完整结果[1]。
import openai
client = openai.Client(
base_url="http://127.0.0.1:30000/v1",
api_key="empty"
)
response = client.chat.completions.create(
model="default",
messages=[
{"role": "user", "content": "你好 Kimi,请介绍一下你自己,并确认一下你现在的版本。"}
],
temperature=0.7
)
print(f"Kimi 的回答:\n{response.choices[0].message.content}")长文本生成或交互式对话更适合流式输出。把 stream=True 打开后,逐块打印 delta.content,用户能更早看到内容。这样用户能更早看到内容,感觉上更快[1]。
for chunk in response:
content = chunk.choices[0].delta.content
if content is not None:
print(content, end="", flush=True)工具调用
工具调用的分工是:模型负责判断该调用哪个函数、传什么参数,真正的请求由你的程序完成。示例里的天气函数只是演示,换成自己的业务接口时,参数定义和返回格式都要重新设计[1]。
工具调用需要两次模型请求。第一次返回结构化的工具调用,第二次把工具结果整理成自然语言回答[1]。
示例工具是 get_weather,参数有 location 和 unit,其中 unit 只能取 celsius 或 fahrenheit[1]。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取一个给定地点的当前实时天气情况,如查询不到则返回错误信息。",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名,例如:北京, Tokyo, London"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location", "unit"]
}
}
}]第一次请求里设置 tools 和 tool_choice="auto"[1]。
response = client.chat.completions.create(
model="default",
messages=[{"role": "user", "content": user_query}],
tools=tools,
tool_choice="auto"
)示例工具调用的是 OpenWeatherMap 的天气接口,API Key 不要公开分享[1]。在一次测试中,模型规划的是查询宝鸡、单位摄氏度的天气,最终回答为约 -0.7°C、阴天[1]。
本文改编自 Datawhale 开源项目 self-llm 中的 Kimi K2.5 SGLang 部署教程[1],原文以 Apache-2.0 许可证发布。
来源
- 103-Kimi-2.5-SGLang部署应用Datawhale self-llm (Apache-2.0)
- 2deploy_guidance.mdHugging Face (Moonshot AI)
引用本页: Kimi K2.5 用 SGLang 部署. TellWorld, https://www.tellworld.net/zh/practice/practice-kimi-k2-5-sglang. 更新于 2026-11-14