发布日期:2026-07 | 关键词:Kimi K3 本地部署、vLLM、SGLang、MXFP4、多机部署
数据来源:Hugging Face 仓库实测数据、vLLM 官方 recipe YAML、SGLang cookbook、官方 config.json
Kimi K3 本地部署的第一个现实是权重体积:Hugging Face 仓库的 96 个 safetensors 分片实测合计1,560,936,091,448 字节,即约 1560.9 GB(1453.7 GiB),vLLM 官方 recipe 标注最小显存需求为1680 GB。这意味着单卡、单机 8×80GB 配置均无法承载完整权重——vLLM 官方前置条件明确写的是"至少 8× GB300,生产流量需多机"。官方已验证的硬件为 H200、B300、GB300、MI355X 四种,并行策略上 TP 与 TEP 最低 8 卡、DEP 最低 16 卡。技术上值得注意的是这个 MXFP4 检查点并非全量 4bit:config.json 的 quantization_config 设有 ignore 列表,注意力层、共享专家、mlp 投影、lm_head 与视觉塔均保持高精度,group_size 为 32。对绝大多数团队而言,务实路径是官方 API 或社区 GGUF 量化版本(已有 unsloth、GrEarl 等多个版本,含 IQ1_S 极限量化),而非自建集群。本文给出四条部署路线的完整命令、参数与适用判断。
一、先看清硬件门槛,避免无效投入
1. 权重体积的实测数据
这是所有部署决策的起点。我直接从 Hugging Face API 统计了全部 safetensors 分片:
| 项目 | 实测值 |
|---|---|
| safetensors 分片数 | 96 个 |
| 权重总体积 | 1,560,936,091,448 字节 |
| 换算 | 约 1560.9 GB / 1453.7 GiB |
| vLLM 官方标注最小显存 | 1680 GB(含 1.2 倍余量) |
注意 1680 GB 这个数字的来源——vLLM recipe YAML 的注释写明这是预发布估算:2.8T params × 0.5 byte/param × 1.2 headroom,并注明"权重发布后应替换为真实 safetensors 体积"。实测 1560.9 GB 与该估算基本吻合。
2. 官方验证过的硬件
据 vLLM recipe YAML 的hardware字段,已标记为verified的有四种:
| 硬件 | 状态 | 备注 |
|---|---|---|
| GB300 | verified | 官方前置条件推荐,default_hardware为 b300 |
| B300 | verified | Blackwell 架构,有专属优化参数 |
| H200 | verified | Hopper 架构,需特殊 MoE backend |
| MI355X | verified | AMD ROCm,CDNA4 gfx950 |
官方前置条件原文:“At least 8x GB300. Multi-node for real production traffic.”(至少 8× GB300,真实生产流量需多机)
ROCm 路线原文:“Use vllm/vllm-openai_rocm:kimi-k3 docker and at least 8x MI355X/MI350X hardware.”
3. 并行策略的最低卡数
据 YAML 的strategy_min_gpus字段:
| 策略 | 最低 GPU 数 | 说明 |
|---|---|---|
single_node_tp | 8 | 默认策略 |
multi_node_tp | 8 | 跨机张量并行 |
multi_node_tep | 8 | 张量+专家并行 |
multi_node_dep | 16 | 数据+专家并行,卡数要求翻倍 |
KV Cache 分布式存储全部不支持——YAML 的kv_cache_strategy_hardware字段显示 Mooncake 的分布式与集中式方案在 H100、H200、B200、GB200、B300、GB300、MI300X、MI325X、MI355X 上均标记为unsupported。
二、MXFP4 不是全量 4bit:一个容易误判的细节
很多人看到"MXFP4 量化"就按 0.5 byte/param 估算显存,但实际检查点保留了大量高精度模块。
据官方config.json的quantization_config:
{"format":"mxfp4-pack-quantized","quant_method":"compressed-tensors","quantization_status":"compressed","config_groups":{"group_0":{"targets":["Linear"],"weights":{"num_bits":4,"group_size":32,"strategy":"group","symmetric":true,"type":"float","observer":"minmax"}}},"ignore":["re:.*self_attn.*","re:.*shared_experts.*","re:.*mlp\\.(gate|up|gate_up|down)_proj.*","re:.*lm_head.*","re:.*vision_tower.*","re:.*mm_projector.*"]}保持高精度的模块(不参与 4bit 量化):
self_attn— 全部注意力层shared_experts— 2 个共享专家mlp.gate/up/gate_up/down_proj— 稠密 MLP 投影lm_head— 输出头vision_tower/mm_projector— 视觉编码器与投影层
这解释了为什么实测 1560.9 GB 高于纯 4bit 理论值(2.8T × 0.5 byte = 1400 GB)。
三、架构参数:部署前需要知道的关键配置
据官方config.json实测提取:
| 参数 | 值 |
|---|---|
num_hidden_layers | 93 |
hidden_size | 7168 |
intermediate_size | 33792 |
moe_intermediate_size | 3072 |
vocab_size | 163840 |
max_position_embeddings | 1048576 |
num_attention_heads | 96 |
kv_lora_rank | 512 |
q_lora_rank | 1536 |
first_k_dense_replace | 1 |
attn_res_block_size | 12 |
hidden_act | situ(SiTU-GLU) |
dtype | bfloat16 |
KDA 与全注意力层的精确分布
config.json 的linear_attn_config给出了确切的层号分布,这比"69 KDA + 24 Gated MLA"的概括更有用:
full_attn_layers: [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 93] kda_layers: [1,2,3, 5,6,7, 9,10,11, 13,14,15, ...] 共 69 层规律是每 4 层里有 3 层 KDA、1 层全注意力(第 4、8、12… 为全注意力),末尾第 92、93 层连续为全注意力。KDA 配置:num_heads: 96、head_dim: 128、short_conv_kernel_size: 4、use_full_rank_gate: true、gate_lower_bound: -5.0。
四、路线一:vLLM 部署(官方推荐,文档最全)
1. 前置要求
| 项目 | 要求 |
|---|---|
| vLLM 版本 | ≥ 0.27.0(min_vllm_version) |
| 镜像(NVIDIA) | vllm/vllm-openai:kimi-k3 |
| 镜像(AMD) | vllm/vllm-openai-rocm:kimi-k3 |
| nightly | 必需(nightly_required: true) |
| 难度标注 | hard |
2. 基础参数(所有硬件通用)
据 YAML 的base_args:
--trust-remote-code\--load-format fastsafetensors\--moe-backend auto\--gpu-memory-utilization0.95fastsafetensors是官方推荐的加载格式,YAML 注释说明它能显著加快权重加载(考虑到 1560 GB 的体积,这个优化很关键)。
3. Blackwell(B300 / GB300)优化参数
--max-model-len1000000\--kv-cache-dtype fp8\--attention-config'{"mla_prefill_backend":"TRTLLM_RAGGED","use_prefill_query_quantization":true}'\--max-num-batched-tokens32768\--enable-prefix-caching配套环境变量:
exportVLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION=1exportVLLM_ALLREDUCE_USE_FLASHINFER=1exportVLLM_ENGINE_READY_TIMEOUT_S=3600exportVLLM_USE_V2_MODEL_RUNNER=1exportVLLM_USE_RUST_FRONTEND=1VLLM_ENGINE_READY_TIMEOUT_S=3600不是可选项——1560 GB 权重的加载时间远超默认超时。
4. Hopper(H200)专属参数
H200 需要不同的 MoE backend:
--no-enable-flashinfer-autotune\--moe-backend marlin\--disable-custom-all-reduceexportVLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION=15. AMD(MI355X / MI350X)参数
--load-format auto\--gpu-memory-utilization0.95\--mm-encoder-tp-mode data\--max-num-seqs128\--reasoning-parser kimi_k3\--max-num-batched-tokens4096exportVLLM_ROCM_USE_AITER=1exportSAFETENSORS_FAST_GPU=1exportAITER_SITUV2_A8W4=1# 0 = a16w4 MoE 路径,1 = a8w4exportAITER_BF16_FP8_MOE_BOUND=0exportVLLM_USE_BREAKABLE_CUDAGRAPH=0# ROCm 上必须设为 0,构建会自动置 1⚠️
VLLM_USE_BREAKABLE_CUDAGRAPH=0在 ROCm 上是强制要求——YAML 注释原文标注 “REQUIRED on ROCm: the build auto-enables =1”。
6. 功能开关
工具调用:
--enable-auto-tool-choice --tool-call-parser kimi_k3推理内容解析(把思考与最终答案分开):
--reasoning-parser kimi_k3投机解码(需额外显存,故须限制并发):
--max-num-seqs32\--speculative-config'{"model":"Inferact/Kimi-K3-DSpark","num_speculative_tokens":7,"method":"dspark","attention_backend":"FLASHINFER_MLA","draft_sample_method":"probabilistic","rejection_sample_method":"block"}'纯文本模式(跳过视觉编码器,与 encoder_parallel 互斥):
--language-model-only7. 客户端调用(官方示例)
importtimefromopenaiimportOpenAI client=OpenAI(api_key="EMPTY",base_url="http://localhost:8000/v1",timeout=3600# 注意超时设为 3600 秒)messages=[{"role":"user","content":[{"type":"image_url","image_url":{"url":"https://example.com/receipt.png"}},{"type":"text","text":"Read all the text in the image."}]}]start=time.time()response=client.chat.completions.create(model="moonshotai/Kimi-K3",messages=messages,max_tokens=2048)print(f"Response costs:{time.time()-start:.2f}s")print(f"Generated text:{response.choices[0].message.content}")五、路线二:PD 分离集群(生产级配置)
Prefill / Decode 分离是官方给出的生产方案,两侧用完全不同的并行策略。
Prefill 侧(TEP,TP=8)
--enforce-eager\--max-num-batched-tokens16384\--no-disable-hybrid-kv-cache-manager\--no-enable-flashinfer-autotuneDecode 侧(DEP,TP=1)
--data-parallel-hybrid-lb\--moe-backend deep_gemm_mega_moe\--no-enable-prefix-caching\--max-num-seqs32\--max-num-batched-tokens32\--no-disable-hybrid-kv-cache-manager\--compilation-config'{"cudagraph_mode":"FULL_DECODE_ONLY"}'\--all2all-backend flashinfer_nvlink_one_sided集群环境变量
exportNCCL_CUMEM_ENABLE=1exportNCCL_MNNVL_ENABLE=1exportNCCL_NVLS_ENABLE=0exportVLLM_SSM_CONV_STATE_LAYOUT=DS# Blackwell 且启用 RDMA 时追加exportUCX_TLS="rc,cuda_copy"exportVLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION=1通信后端选择
据官方 Notes:
| 场景 | 参数 |
|---|---|
| RDMA跨机 | --all2all-backend deepep_v2 |
| NVLink | --all2all-backend flashinfer_nvlink_one_sided |
| DEP 环境MoE | --moe-backend deep_gemm_mega_moe |
| TP > 1MoE | --moe-backend flashinfer_trtllm |
⚠️RDMA 必须显式设置
UCX_TLS="rc,cuda_copy",否则 KV Cache 传输可能不走 RDMA 通路。
六、路线三:SGLang 部署
SGLang 支持的硬件列表更宽:b300、gb300、b200、gb200、h200、h100、mi350x、mi355x。
Docker 启动骨架:
dockerrun--gpusall --shm-size 32g--ipc=host\lmsysorg/sglang:dev\sglang serve...并行参数别名:--tp-size/--tp/--tensor-parallel-size、--ep-size/--ep、--dp、--enable-dp-attention、--attn-cp-size、--dcp-size、--pp-size。多机追加--nnodes、--node-rank、--dist-init-addr。PD 分离端口固定:prefill 30000、decode 30100。
SGLang 的五个已知限制(官方 cookbook)
- MTP 开启且未设
--max-running-requests时,SGLang 会强制重置为 48 - interleave 型 prefill-CP 与 DP-Attention 不能同时用——当前版本 assert
dp_size == 1,冲突会在启动时直接失败 - prefill-CP 尺寸是推导值:
attn_cp_size = TP / DP-Attention - DSPARK 与长上下文方案冲突——后者用流水并行,而 DSPARK 要求
pp_size == 1 - DFLASH 已禁用——官方说明"No K3 DFLASH draft checkpoint published yet"
PD 模式下客户端流量应打路由器,而非直连角色服务器。
七、路线四:量化版本(消费级硬件的唯一现实选项)
社区已产出多个量化版本,这是没有 8 卡集群时的实际路径。
据 Hugging Face 搜索结果,当前可见的主要量化仓库:
| 仓库 | 类型 | likes |
|---|---|---|
unsloth/Kimi-K3-GGUF | GGUF | 44 |
GrEarl/Kimi-K3-GGUF | GGUF | 19 |
GrEarl/Kimi-K3-GGUF-IQ1_S | IQ1_S 极限量化 | 7 |
RedHatAI/Kimi-K3-FP8-BLOCK | FP8 分块 | 2 |
pipenetwork/Kimi-K3-REAP80-MLX-mxfp4-q8 | MLX(Apple Silicon) | 1 |
Inferact/Kimi-K3-DSpark | 投机解码草稿模型 | 15 |
适用工具:llama.cpp、Ollama、LM Studio、Jan。
官方 Docker Model Runner 路径:
dockermodel run hf.co/moonshotai/Kimi-K3⚠️量化档位与质量的权衡必须清楚:IQ1_S 这类 1bit 级量化能大幅降低显存,但与官方评测成绩(
reasoning_effort=max下取得)的差距会显著扩大。不要用量化版本的表现去评判 K3 的真实能力。
八、部署路线决策表
| 你的条件 | 推荐路线 | 说明 |
|---|---|---|
| 8× GB300 / B300 及以上 | vLLMsingle_node_tp | 默认策略,文档最全 |
| 8× H200 | vLLM + Hopper 覆写参数 | 需--moe-backend marlin |
| 8× MI355X / MI350X | vLLM ROCm 镜像 | 注意VLLM_USE_BREAKABLE_CUDAGRAPH=0 |
| 16 卡以上,追求吞吐 | vLLMmulti_node_dep或 PD 分离 | DEP 最低 16 卡 |
| 需要 H100 | SGLang | SGLang 硬件列表含 h100,vLLM 未标 verified |
| 单机多卡但不足 8 卡 | ❌ 无可行方案 | 走 API 或量化版本 |
| 消费级硬件 / Mac | GGUF / MLX 量化版本 | 接受明显的质量损失 |
| 只想稳定用上 K3 | 官方 API | platform.kimi.ai选kimi-k3 |
九、六个部署避坑要点
1. 超时必须调大
1560 GB 权重加载远超默认超时,vLLM 需设VLLM_ENGINE_READY_TIMEOUT_S=3600,客户端 timeout 也建议 3600 秒。
2. 用 fastsafetensors 加载
官方base_args指定--load-format fastsafetensors,注释明确说明"much faster weight load"。但AMD 路线覆写为--load-format auto,不要照搬。
3. 工具调用需要校验重试
官方 Notes 原文:“K3 occasionally emit a tool-call format its own parser doesn’t expect. Suggest to run do schema validation and retry.”必须做 schema 校验加重试,不能假定输出格式稳定。
4. 投机解码要限并发
spec_decoding配置里 YAML 注释写明"Speculative decoding needs additional VRAM, so cap concurrent sequences",故须配--max-num-seqs 32。
5. 分布式 KV 存储不可用
Mooncake 的分布式与集中式 KV 存储在所有列出硬件上均为unsupported,不要按这个方向设计架构。
6. 这仍是预发布配方
vLLM recipe 的description标注 “Pre-release”,nightly_required: true。参数和行为可能变动,生产前需自行验证。
十、FAQ
Q:我有 8×H100,能跑 Kimi K3 吗?
A:vLLM 官方 recipe 未把 h100 标为 verified(仅 h200、b300、gb300、mi355x 为 verified),但 SGLang 的supportedHardware列表包含 h100。8×80GB = 640GB 显存远低于 1560GB 权重体积,单机 8×H100 无法承载完整权重,需多机或走量化版本。
Q:1560GB 和官方说的 1680GB 哪个准?
A:1560.9 GB 是我从 HF API 统计 96 个分片得到的实际权重体积;1680 GB 是 vLLM recipe 的vram_minimum_gb,包含约 1.2 倍余量(YAML 注释注明这是权重发布前的估算)。规划显存按 1680 GB 起算更安全,因为还需 KV Cache 和激活空间。
Q:为什么 MXFP4 量化后还有 1560GB?
A:因为它不是全量 4bit。quantization_config的ignore列表把注意力层、共享专家、mlp 投影、lm_head、视觉塔全部排除在量化之外,这些模块保持高精度。纯 4bit 理论值为 1400 GB,实测高出 160 GB。
Q:Mac 能跑吗?
A:有pipenetwork/Kimi-K3-REAP80-MLX-mxfp4-q8这类 MLX 版本,但那是经过大幅裁剪和量化的版本。Apple Silicon 无法运行完整 2.8T 模型。
Q:GGUF 的 IQ1_S 版本值得用吗?
A:IQ1_S 是接近 1bit 的极限量化,能让模型在小得多的显存里跑起来,但质量损失显著。适合体验和实验,不适合据此评估 K3 能力或用于生产。
Q:PD 分离和普通 TP 该选哪个?
A:单节点 8 卡且流量不大用single_node_tp(官方默认)。真实生产流量官方建议多机,PD 分离能让 prefill(TEP,TP=8)和 decode(DEP,TP=1)各自优化,但复杂度和最低卡数要求显著更高。
Q:为什么 decode 侧的 max-num-batched-tokens 只有 32?
A:这是 PD 分离架构的特性——decode 阶段每步只生成少量 token,配合--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}'做全图捕获优化,小 batch 反而延迟更低。
十一、总结
Kimi K3 本地部署的核心结论是一句话:这不是个人或小团队能自建的模型。1560.9 GB 权重、1680 GB 最小显存、8× GB300 起步、DEP 需 16 卡——这些数字划定了明确的门槛。
三条务实路径按成本递增:官方 API(platform.kimi.ai选kimi-k3,门槛最低)→社区量化版本(GGUF / MLX,接受质量损失)→自建集群(8 卡起步,需 vLLM ≥ 0.27.0 nightly)。
若确定要自建,六个技术要点务必记住:VLLM_ENGINE_READY_TIMEOUT_S=3600、--load-format fastsafetensors(AMD 例外)、H200 需--moe-backend marlin、ROCm 需VLLM_USE_BREAKABLE_CUDAGRAPH=0、工具调用需 schema 校验重试、分布式 KV 存储不可用。
本文数据来自 2026 年 7 月 27 日的 Hugging Face 仓库实测统计、官方config.json、vLLM 官方 recipe YAML(更新于 2026-07-25,标注 Pre-release)与 SGLang cookbook。该配方仍处预发布状态且要求 nightly 版本,参数与行为可能随版本变动,生产部署前请以官方最新文档验证。
延伸资源
- Kimi K3 Hugging Face 仓库:huggingface.co/moonshotai/Kimi-K3
- vLLM 官方部署配方:recipes.vllm.ai/moonshotai/Kimi-K3
- Kimi K3 GitHub 仓库:github.com/MoonshotAI/Kimi-K3
- Kimi K3 coding Plan:qiniu.com/ai/plan