跳至主要内容

本地运行 Kimi K2:完整设置与故障排查

学习如何使用 llama.cpp 在单块 A100 GPU 与 250GB 内存上运行 Kimi K2。
· 6分钟 阅读

使用 AI 探索

Kimi K2 由 Moonshot AI 开发,是一款最前沿的专家混合(Mixture-of-Experts,MoE)语言模型。它在前沿知识、推理与编程任务上表现出色,并针对具身智能能力(包括工具使用与自主解决问题)进行了专项优化。

正如我们在Kimi K2 指南中所探讨的,这一模型在各项基准测试中取得了优异成绩,成为当前最优秀的通用开源语言模型。我们正处在Deepseek R1 时刻。为此,我将教您如何在单块 GPU 上运行这台高达 1 TB 的巨型模型。

我们将学习如何配置 Runpod 机器、安装 llama.cpp,并以更快速度下载模型。另外,我们会使用 llama.cpp 的 CLI 运行模型,将部分模型层卸载到内存(RAM)。最后,我们还将解决运行此类模型时常见的问题。您也可以查看我们关于全新 Kimi K2.5(Agent Swarm) 的指南。

设置 Runpod

前往Runpod GPU Cloud,使用 Python Container Image 2.8.0 版本,在 A100 SXM 机器上创建云实例。

之后,通过 Edit pod 选项将容器磁盘存储提升至 300 GB。

编辑 Pod 以增加容器磁盘存储。

一切就绪后,您会看到已拥有 300 GB 存储空间,这已足够,因为我们的 1-bit 量化模型需要 250 GB 存储。

Runpod 1X A100 SXM 机器仪表盘

安装 llama.cpp

1. 点击 connect 按钮,启动 Jupyter Lab 实例。新建一个 Notebook,并安装必要的 Linux 工具,如 cmake 与 curl。

!apt-get update
!apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y

安装 Linux 工具。

2. 将目录切换到根目录。我们不会使用 workspace 目录。这样做的原因是提升模型下载与加载速度。您可在末尾的故障排查部分了解更多。

%cd ..

3. 克隆最新的 llama.cpp 仓库。

!git clone https://github.com/ggml-org/llama.cpp

克隆 llama.cpp

4. 设置构建选项。我们将在 GPU 机器上进行构建。如果您想使用 CPU 推理,请将 DGGML_CUDA=ON 改为 DGGML_CUDA=OFF。

!cmake llama.cpp -B llama.cpp/build \
  -DBUILD_SHARED_LIBS=OFF \
  -DGGML_CUDA=ON \
  -DLLAMA_CURL=ON \
  -DCMAKE_CUDA_ARCHITECTURES="80;90" \
  -DCMAKE_CUDA_FLAGS="-Wno-deprecated-gpu-targets"

配置 llama.cpp 构建

5. 我们将使用 cmake 命令来构建以下工具:llama-quantize、llama-cli、llama-gguf-split 和 llama-mtmd-cli。

!cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split llama-mtmd-cli

安装 llama-cli 等工具。

6. 将所有构建产物复制到主仓库目录,便于访问。

!cp llama.cpp/build/bin/llama-* llama.cpp

使用 xnet 极速下载 Kimi K2

Unsloth 提供的 Kimi K2 量化版本支持 xnet,可实现较 Git LFS 快 4 倍的下载与上传。要在本地启用它,请安装最新版的 huggingface_hub 与 hf_transfer:

!pip install huggingface_hub hf_transfer

安装用于从 Hugging Face 下载文件的 Python 包。

使用 snapshot_download API 仅下载该仓库的 1-bit 量化 GGUF 模型文件:

import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"

from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/Kimi-K2-Instruct-GGUF",
    local_dir = "/unsloth/Kimi-K2-Instruct-GGUF",
    allow_patterns = ["*UD-TQ1_0*"],
)

下载耗时取决于您的网络与存储速度。

从 Hugging Face 下载 1bit 量化模型。

启用 xnet 并使用更快的存储后,我们的下载速度非常快。

如何在本地运行 Kimi K2

现在可以测试我们量化后的模型了。这个阶段我花了最多时间调试,因为要在单块 GPU 上运行。虽然并非不可能,但在模型加载与执行方面会遇到一些问题。

我们使用全部 CPU 线程,并尽量将更多层加载到 GPU。这涉及将上下投影的专家混合层卸载到 CPU。

下面是在终端中运行且表现稳定的命令:

./llama.cpp/llama-cli \
  --model /unsloth/Kimi-K2-Instruct-GGUF/UD-TQ1_0/Kimi-K2-Instruct-UD-TQ1_0-00001-of-00005.gguf \
  --cache-type-k q4_0 \
  --threads -1 \
  --n-gpu-layers 99 \
  --temp 0.6 \
  --min_p 0.01 \
  --ctx-size 16384 \
  --seed 3407 \
  -ot ".ffn_(up|down)_exps.=CPU" \
  --prompt "Hey"

Jupyter Lab 终端运行 llama-cli

加载完整模型耗时将近一分钟。可见模型能很好地装入这台机器。

将张量加载到 CPU 与 GPU。

在 Runpod 仪表盘中,您会看到 CPU 利用率很高,且 RAM 与 VRAM 均在使用中。

Runpod 仪表盘显示 RAM 与 VRAM 的使用情况。

大约在加载与预热四分钟后,您就可以开始向模型提问了。

llama.cpp 界面

我提了个简单问题:“What is monsoon? Write the answer in one line.”

测试 Kimi K2 模型

生成几乎花了五分钟时间。

我调查了为何生成 token 很慢,结果发现 GPU 只作为显存使用,而所有计算都由 CPU 完成。为解决此问题,您需要将更多层卸载到 GPU,这意味着需要 2 台 A100 机器。

故障排查

本节将讨论在单块 GPU 上运行大型模型时常见的问题,以及如何应对。

1. 了解 VRAM 与计算(compute)的区别

当您看到 GPU 内存使用 95%、GPU 计算 0%、CPU 负载 99% 时,通常意味着 VRAM 仅充当模型的内存存储,而实际计算发生在 CPU 上。

即便是高度量化、体积更小的 1-bit 模型,仍需加载到内存中,这会导致 VRAM 占用。只有将更多层卸载到 VRAM 后,GPU 才会开始参与计算。

2. 解决 token 生成缓慢

要提升 token 生成速度,需要将更多模型层卸载到 GPU。也可考虑多 GPU 方案,比如三块 A100。将温度设置为 0.6,有助于减少生成文本的重复与不连贯。

3. 硬件要求与性能

如果 VRAM 或 RAM 受限,您仍可在消费级 CPU 上运行 1-bit 模型。但生成速度会非常慢(例如 20 秒/个 token)。

运行 1-bit 模型的唯一硬性要求是:磁盘空间 + RAM + VRAM 的总和 ≥ 250GB。

若想获得最佳性能(每秒 5 个以上 token),至少需要 250GB 统一内存,或 RAM 与 VRAM 合计达到 250GB。

4. 处理下载缓慢

安装最新版的 huggingface_hub 与 hf_transfer,以获得 “xnet 速度”,其比普通 Git LFS 快 4 倍。

为优化 GGUF 分片文件的存储与加载,建议使用容器磁盘(container disk)而非容器卷(container volume)进行存储。因为容器卷可能导致下载与模型加载缓慢。

5. 处理模型加载缓慢

加载缓慢通常意味着您在加载超大型模型。从网络存储加载会显著拖慢速度。务必使用本地 M.2 SSD 存储模型。与传统硬盘或网络存储相比,M.2 SSD 的读写速度快得多,可大幅缩短加载时间。

若 RAM 不足以加载模型,操作系统可能会将数据换出到磁盘(使用 swap 文件),其速度远慢于 RAM,造成瓶颈。尽量采用多 GPU 且更大 RAM 的方案。

结语

运行量化版 Kimi K2 仍可能遇到挑战,因为诸如llama.cpp 等工具在持续演进以追赶模型的最新更新。未来数周内,您可期待更完善的方案,将 token 生成计算转移到 GPU,以获得更佳性能,而非仅依赖 CPU。

此外,这对我来说也是一次宝贵的学习经历。我更深入地了解了开源社区如何协作,尽可能高效地优化与部署这些模型。

Kimi K2 脱颖而出,成为顶尖的开源模型之一,在前沿知识、数学与编程方面,作为非“思维链”类模型也能达到最先进水平,能力已接近 DeepSeek R1 等模型。

它在工具选择与代理型任务方面尤为强大,是 Claude 4 Sonnet 等高端模型在编码项目或“vibe coding”中的高性价比替代方案。

您可以按照本指南,将量化版 Kimi K2 部署为内部解决方案。Llama.cpp 允许以兼容 OpenAI 的 API 形式服务语言模型。想继续学习,请务必查看我们的Kimi K2 示例指南。若您对代理型 AI 感兴趣,欢迎学习我们的新课程:使用 LangGraph 构建多智能体系统。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题