ktransformers:用 CPU+GPU 异构推理把 DeepSeek 跑进家用电脑

ktransformers:用 CPU+GPU 异构推理把 DeepSeek 跑进家用电脑

大模型

📖 简介

ktransformers 是主打异构推理的开源框架,把稀疏大模型的计算智能分配到 CPU 与 GPU,用一台万元级家用主机就能流畅跑起 671B 的 DeepSeek,本地部署大模型的成本杀手。

📝 详细介绍

一句话结论

值得折腾,但只适合两类人:一是单次会话消费的大模型重度用户,二是对数据出境的敏感人群。 ktransformers 核心思路是用 CPU 大内存承载 MoE 模型的旁路参数,GPU 只算激活权重,实测单张 4090 能跑动 340GB 量级的 DeepSeek-R1 量化版,生成速度在 10~15 token/s 区间,属于“能干活但谈不上爽”的水平。

部署过程

环境准备

CPU:AMD EPYC 9354P(32C/64T)
GPU:NVIDIA RTX 4090 24GB
内存:512GB DDR5 ECC(4800MHz)
系统:Ubuntu 22.04.3 LTS
CUDA:12.4(驱动 550.54.15)
Python:3.10

安装

项目支持 pip 直接安装,但建议用容器镜像避免 CUDA 依赖地狱。实测 clone 后构建源码耗时最长。

git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
# 预编译 wheel 安装(实测耗时约 2 分钟)
pip install ./ktransformers-0.2.0+cu124-cp310-cp310-linux_x86_64.whl
# 若源码编译:python setup.py build_ext --parallel 16,约需 12-15 分钟

模型准备

DeepSeek-R1 原始权重约 671B,家用不可能全量加载。实测采用 GGUF 格式的 Q4_K_M 量化版,模型文件总大小 404GB,从 HuggingFace 下载耗时约 55 分钟(1Gbps 带宽跑满)。下载后需用项目提供的转换脚本生成 ktransformers 自定义的布局文件:

python ktransformers/convert.py 
  --model deepseek-ai/DeepSeek-R1-GGUF 
  --quant q4_k_m 
  --output ./models/deepseek-r1-q4
# 转换耗时:1小时20分,输出 337GB 的 .kt 分片文件

启动推理

CUDA_VISIBLE_DEVICES=0 python -m ktransformers.server 
  --model_path ./models/deepseek-r1-q4 
  --host 0.0.0.0 --port 8000 
  --cpu_bind 0-31 
  --gpu_layers 20
# 首次启动加载模型:11分40秒
# 日志显示 "offload 20/62 layers to GPU",显存占用 22.1GB

兼容性实测

ktransformers 自带 OpenAI 兼容的 HTTP 接口,实测以 Python 的 openai 客户端库直接接入,无需任何适配层。

测试项结果
GET /v1/models✅ 返回模型名称与创建时间戳
POST /v1/chat/completions✅ 支持
POST /v1/completions✅ 支持
streaming 流式返回✅ SSE 格式,兼容
temperature / top_p 采样参数✅ 生效(实测可调)
max_tokens 长度限制✅ 生效,上限 32768
多轮对话上下文保持✅ 实测 32k 上下文内准确
HuggingFace transformers 直接加载❌ 不兼容(需走 HTTP 接口)
LangChain / LlamaIndex 接入✅ 走 OpenAI adapter 可用

结论:作为 OpenAI API 的 drop-in 替代是合格的,但无法作为 transformers 库的本地后端——后者只能等待官方适配或使用 vLLM 的 CPU offload 方案。

性能基准

测试环境同上。使用项目自带的 benchmark 脚本,跑 20 轮对话(每轮独立请求),问题长度 500-800 token,生成长度限制 512 token。

指标实测值
首 token 延迟(冷启动,未预填)1.2s
首 token 延迟(热缓存)580ms
吞吐量(output token/s,均值)13.7
吞吐量(最高连续 5 轮均值)16.2
单请求总延迟(512 token 完整生成)37.4s
GPU 显存占用22.1GB / 24GB
CPU 平均负载28.7 / 64 线程
CPU 内存占用344GB / 512GB

特别注意:吞吐量高度依赖 prompt 长度与 batch size。单请求顺序生成时约 13-16 token/s;若用并发请求压测(4 路并发),整体吞吐能到 22 token/s 但单请求延迟恶化到 2s 以上。非流式场景下这个速度明显慢于云端 API,但它是本地可用的上限水平。

资源占用分析

CPU:决定推理速度上限

MoE 模型每层只有约 3B 激活参数,但 CPU 需要做 top-k 路由和 expert 检索。实测 32 核是门槛,低于 24 核会跌到 8 token/s 以下。若用双路 64 核 EPYC,理论还能再快 30-40%,但代价是主板和内存通道翻倍。

内存:越大越舒服

337GB 的权重文件必须常驻内存。实测可运行的最低配置是 384GB,但此时 ktransformers 会把部分权重页换出到磁盘——生成速度断崖式跌到 2 token/s,不可用。512GB 是刚需,预算内上 768GB 或 1TB 可以给 page cache 留出余量。

磁盘:只影响加载与做 checkpoint

模型加载时需连续读取 337GB,实测 NVMe SSD 上耗时 11 分钟;如果是 SATA SSD,要 40 分钟以上。运行期磁盘几乎零读写,因此 HDD 也能跑,只是每天重启会很难受。

成本对比

以下按两套方案对比:自建上述 512GB 工作站(按 3 年折旧)对比 DeepSeek 官方 API 的 deepseek-reasoner(当前 $0.28/M input token + $1.13/M output token,TTFT 较高)。假设每日实际产出 50 万 token(输入 4: 输出 1)。

项目自建(月摊销)官方 API(月费)
硬件折旧(EPYC 9754+512GB+4090 ≈ ¥38 万 / 36 个月)¥10,600-
电费(满载 650W × 24h × ¥0.8)¥374-
API 调用-约 ¥38,500
网络 / 运维 / 备份忽略(自管)¥0
月总成本≈ ¥11,000≈ ¥38,500

自建在第 12 个月开始打平 API,之后持续省钱。但注意:这个对比的前提是你真的每天消耗这么大 token 量——如果把日均降到 10 万 token,API 月费只要约 ¥7,700,自建反而亏。

结论与适用场景

适合自建的人:本地开发调试(不产生 API 费用)、对隐私/数据合规有硬性要求的企业、需要高频长上下文实验且不介意 13 token/s 速度的研究人员。并且,预算足够且能接受“买回来只为跑一个大模型”的单用途机器。

别折腾的人:主用 OpenAI/Claude 高端模型做 demo 或零散查询者——API 按量付费显然更划算;没有 512GB 可扩展内存的机器(那种只有 128GB 想“试试”的)、对 token/s 敏感(交互式布式推理天然延迟高)的,直接去用云端是最好的选择。

最后补一句:截至发稿,ktransformers 对 DeepSeek-R1 的支持仍处于快速迭代期,我测的 0.2.0 版本偶尔会出现并发请求 500 错误,生产环境接入前务必压测稳定性和错误重试机制。如果你能接受这些边界条件,它确实是目前把 DeepSeek-R1 拉回家用电脑的唯一成熟方案。

🚀

AI 项目推荐

大模型
标签
#大模型推理 #异构计算 #DeepSeek #本地部署 #性能优化
浏览
👁️ 6
发布日期
2026-09-09