重写万行代码+重构项目结构,KTransformers最新V0.24版部署与调用实战!

本期内容出自九天老师的公开课内容,V0.24版颠覆式更新,不仅首次实现了CPU混合推理下DeepSeek R1&V3模型并发,而且还首次支持了OpenAI风格API调用,并大幅提升模型推理速度,真正达到了企业级应用门槛!话不多说,我们直接开始~


一、 DeepSeek-R1&V3高性能部署思路

1.主流高性能部署方案

截至目前,毫无疑问, DeepSeek模型最高性价比的部署方案有两个,其一是清华大学团队提出的 Ktransformers部署方案,

  • ktransformers:https://github.com/kvcache-ai/ktransformers

图片

其二则是Unsloth动态量化方案,

  • Unsloth:https://github.com/unslothai/unsloth

图片

尽管两套方案都是采用CPU+GPU混合推理,但有所不同的是, Ktransformers技术方案是在llama.cpp 上进行的大幅修改,从而加快了CPU推理速度,而Unsloth则主要是在模型量化层面下功夫,推出了1.58bit等一众量化程度较深、但同时推理性能较好的量化模型,而实际运行过程,底层仍然是使用 llama.cpp进行推理。

在此前的公开课中,我们曾分别介绍过独家KTransformers技术实战 :https://www.bilibili.com/video/BV1kyAke9EBA/

图片

以及独家Unsloth动态量化部署满血DeepSeek:https://www.bilibili.com/video/BV1oePLezEZD/

图片

甚至详细讲解过KTransformers+Unsloth结合部署方案,既使用KTransformers来运行Unsloth的1.58bit动态量化模型《60G内存+14G显存运行满血DeepSeek R1!》https://www.bilibili.com/video/BV1AL9mY2E5a/

图片

2.Ktransformers v0.24重大更新

虽然Ktransformers能够高效完成推理加速,但受限于此前的技术架构,导致其无法进行并发,这也 是阻碍Ktransformers框架迈向工业化应用的核心因素。而就在4月2号的项目更新中, Ktransformers正 式推出了v0.24版,该版本在0.23基础上进行了1万多行的代码更新,不仅进一步提高了推理速度,而且 还增加了并发功能。

新版Ktransformers v0.24更新公告如下: https://github.com/kvcache-ai/ktransformers/blob/main/doc/en/balance-serve.md

KTransformers v0.2.4 发布说明:

我们非常高兴地宣布,期待已久的 KTransformers v0.2.4 现已正式发布!在这个版本中,我们对整 体架构进行了重大重构,更新了超过 1 万行代码,为社区带来了备受期待的多并发支持。

本次重构借鉴了 sglang 的优秀架构,在 C++ 中实现了高性能的异步并发调度机制,支持如连续批  处理、分块预填充(chunked prefill)等特性。由于支持并发场景下的 GPU 资源共享,整体吞吐量也 在一定程度上得到了提升。

1. 多并发支持

  •  新增对多个并发推理请求的处理能力,支持同时接收和执行多个任务。

  • 我们基于高性能且灵活的算子库 flashinfer 实现了自定义的  custom_flashinfer ,并实现了可变  批大小(variable batch size)的 CUDA Graph,这在提升灵活性的同时,减少了内存和 padding 的开销。

  • 在我们的基准测试中, 4 路并发下的整体吞吐量提升了约 130%。

  • 在英特尔的支持下,我们在最新的 Xeon6 + MRDIMM-8800 平台上测试了 KTransformers v0.2.4。通过提高并发度,模型的总输出吞吐量从 17 tokens/s 提升到了 40 tokens/s。我们观察 到当前瓶颈已转移至 GPU,使用高于 4090D 的显卡预计还可以进一步提升性能。

2. 引擎架构优化

借鉴 sglang 的调度框架,我们通过更新约 11,000 行代码,将 KTransformers 重构为一个更清晰的 三层架构,并全面支持多并发:

  • Server(服务层) :处理用户请求,并提供兼容 OpenAI 的 API。

  • Inference Engine(推理引擎) :负责模型推理,支持分块预填充。

  • Scheduler(调度器) :管理任务调度与请求编排。通过 FCFS (先来先服务)方式组织排队请求, 打包为批次并发送至推理引擎,从而支持连续批处理。

图片

3. 项目结构重组

所有 C/C++ 代码现已统一归类至  /csrc 目录下。

4. 参数调整

我们移除了一些遗留和已弃用的启动参数,简化了配置流程。未来版本中,我们计划提供完整的参 数列表和详细文档,以便用户更灵活地进行配置与调试。


接下来我们就尝试借助Ktransformers v0.24进行DeepSeek-R1和V3模型的本地安装部署。

3.Ktransformers运行所需硬件要求

由于Ktransformers是采用CPU+GPU混合推理,因此对内存有较大要求,以下是不同量化模型在使 用Ktransformers运行时的基本硬件要求:

图片

而如果是运行DeepSeek-R1 1.58bit模型(IQ1_S),则需要14G显存+120G以上内存,而如果运行 1.73bit模型(IQ1_M),则需要14G显存+140G以上内存,而如果是2.22-bit(IQ2_XXS),则需要14G 显存+170G内存, 2.51-bit(Q2_K_XL)则需要14G显存+200G内存。

模型名称

精度(比特)

显存需求

内存需求

IQ1_S

1.58-bit

14GB

≥120GB

IQ1_M

1.73-bit

14GB

≥140GB

IQ2_XXS

2.22-bit

14GB

≥170GB

Q2_K_XL

2.51-bit

14GB

≥200GB

Q4_K_M

4-bit

14GB

≥382GB

FP16

FP16

14GB

1TB

DeepSeek模型组本地部署本地显存占用表:

图片

  •   更多低成本部署方案+硬件采购避坑指南!: https://www.bilibili.com/video/BV1K7ACewEfM/

图片

图片

  • 公开课部署模型:本节公开课以部署1.58bit模型为例进行演示,对应的部署流程可以拓展到任意精 度的DeepSeek-R1模型(只需要下载对应的模型权重和配置即可)。

本节公开课配置:

。 PyTorch 2.5.1 , Python 3.12(ubuntu22.04) ,Cuda 12.4

。 操作系统: Ubuntu 22.04

。 GPU: H800 * 2 (实际只使用单卡14G显存)

。 CPU:40 vCPU Intel(R) Xeon(R) Platinum 8458P

。 内存 :200GB DDR4

  • Ktransformers部署方案核心性能瓶颈:但凡涉及到CPU+GPU混合推理,核心的性能瓶颈都是CPU 和内存性能, Ktransformers也不例外。

  • 课件代码领取:

图片

二、 KTransformers v0.24部署与调用流程                         

1.KTransformers项目入门介绍                                                      

1.1 项目定位                                                                                                    

KTransformers(发音为“Quick Transformers”)旨在通过先进的内核优化和计算分布/并行化策略 来增强你使用Transformers的体验。

KTransformers 是一个灵活、以 Python 为中心的框架,其核心设计理念是可扩展性。用户仅需一 行代码,即可实现优化模块的集成,并享受到以下特性:

  •   与 Transformers 兼容的接口
  •   符合 OpenAI 和 Ollama 规范的 RESTful API
  •   一个简化版的 ChatGPT 风格 Web UI(最新版已弃用)

项目定位将 KTransformers 打造成一个灵活的平台,供用户探索和实验创新的大模型推理优化技 术。因此,项目支持编写自定义脚本来实现模型权重的灵活卸载。

1.2 项目参考资料                                                                                            

  • GitHub主页:https://github.com/kvcache-ai/ktransformers
  • 项目使用指南: https://kvcache-ai.github.io/ktransformers/index.html

2. KTransformers v0.24部署流程                                                   

KTransformers支持在Windows、 Linux等操作系统下,使用源码部署或者docker工具进行部署。

考虑到更为一般的企业级应用场景,本次实验采用Linux系统作为基础环境进行演示,并采用源码部署的 方法进行部署。

  • 创建虚拟环境

conda create --name kt python=3.11 

conda init

source ~/.bashrc

conda activate kt

  • 安装基础依赖并验证

# 安装依赖库

conda install -c conda-forge libstdcxx-ng

图片

# 验证 GLIBCXX 版本(应包含 3.4.32)

strings /root/miniconda3/envs/kt/lib/libstdc++.so.6 | grep GLIBCXX

注意,这里要选择自己的anaconda或者miniconda 的安装路径

图片

  • 安装系统依赖

sudo apt update

sudo apt install libtbb-dev libssl-dev libcurl4-openssl-dev libaio1 libaio- dev libfmt-dev libgflags-dev zlib1g-dev patchelf

注意,以上是一行命令

图片

  • 构建 ktransformers

# 若实用AutoDL,则需先开启学术加速 

# source /etc/network_turbo

# 然后选择数据盘

# cd /root/autodl-tmp

# 克隆仓库

git clone https://github.com/kvcache-ai/ktransformers.git

cd ktransformers

git submodule update --init --recursive

图片

其中submodule update命令是用于进行子模块的安装, kt的子模块包括llama.cpp、 prometheus- cpp等项目。等待安装完成后可在主目录下的 third_party文件夹中看到:

完整库

  • 设置NUMA

为了确保Ktransformers能顺利运行,我们还需要设置单NUMA模式运行。

这里我们需要先确认下服务器上有几个NUMA节点(可以简单理解为有几块CPU),我们可以通过 如下命令进行查看

lscpu | grep "NUMA"

图片

此时服务器上有两个NUMA节点。此外,不同的服务器也可能出现其他个数节点情况。 

  • 若是NUMA = 1 ,运行以下命令:

sudo env USE_BALANCE_SERVE=1 PYTHONPATH="$(which python)" 

PATH="$(dirname $(which python)):$PATH" bash ./install.sh

  • 若是NUMA >1 ,则运行以下命令:

# 先安装libnuma-dev

sudo apt install libnuma-dev

# 然后设置USE_NUMA=1

export USE_NUMA=1

# 最后运行脚本

sudo env USE_BALANCE_SERVE=1 PYTHONPATH="$(which python)" PATH="$(dirname $(which python)):$PATH" bash ./install.sh

# 或直接运行

# sudo env USE_BALANCE_SERVE=1 USE_NUMA=1 PYTHONPATH="$(which python)" PATH="$(dirname $(which python)):$PATH" bash ./install.sh

其中运行的install.sh脚本如下:

图片

顺利运行后看到如下信息:

图片

需要注意的是,新版Ktransformers整个编译过程等待时间相对较长,需要几十分钟甚至是一 个小时左右,请耐心等待编译完成。完成后看到如下图所示:

图片

注意,如果出现类似Target "cmTC_abfec" requires the language dialect  "CUDA20", but CMake does not know the compile flags to use to enable it. 报错,或者在编译的第三个阶段报错,则说明cmake版本太低,此时需要进行升级:

pip install cmake --upgrade

source ~/.bashrc

然后再次进行编译即可。

  • 查看ktransformers版本号

一切安装完成后,即可输入如下命令查看当前安装情况

pip show ktransformers

图片

3.DeepSeek R1模型权重与配置文件下载

本次实验使用官方推荐的DeepSeek R1 UD-IQ1_S,直接使用Unsloth压制的模型即可,模型下载地 址:

  • 魔搭社区下载地址: https://www.modelscope.cn/models/unsloth/DeepSeek-R1-GGUF

图片

图片

  • HuggingFace下载地址: https://huggingface.co/unsloth/DeepSeek-R1-GGUF

图片

图片

模型权重较大,总共约130G左右。若使用HuggingFace进行下载,则需要一些网络工具。 

  AutoDL学术加速方法介绍: https://www.autodl.com/docs/network_turbo/

这里推荐使用魔搭社区进行下载,流程如下:

  • 【可选】借助 screen持久化会话

由于实际下载时间可能持续2个小时,因此最好使用screen开启持久化会话,避免因为关闭会话导 致下载中断。

screen -S kt

创建一个名为kt的会话。之后哪怕关闭了当前会话,也可以使用如下命令

screen -r kt

若未安装screen,可以使用 sudo apt install screen命令进行安装。 

  •  使用魔搭社区进行下载

使用modelscope进行权重下载,需要先安装魔搭社区

pip install modelscope

然后输入如下命令进行下载

mkdir ./DeepSeek-R1-GGUF

modelscope download --model unsloth/DeepSeek-R1-GGUF  --include '**Q4_K_M**' --local_dir /root/autodl-tmp/DeepSeek-R1-GGUF

图片

相关文件可以在课件网盘中领取:

图片

  • 下载DeepSeek R1原版模型的配置文件

此外,根据KTransformer的项目要求,还需要下载DeepSeek R1原版模型的除了模型权重文件外  的其他配置文件,方便进行灵活的专家加载。因此我们还需要使用modelscope下载DeepSeek R1 模型除了模型权重( .safetensor)外的其他全部文件,可以按照如下方式进行下载

mkdir ./DeepSeek-R1

modelscope download --model deepseek-ai/DeepSeek-R1  --exclude '*.safetensors'  --local_dir /root/autodl-tmp/DeepSeek-R1

图片

下载后完整文件如下所示:

图片

相关文件也可以在课程课件中领取:

图片

图片

  • 成果汇总

这里最终我们是下载了DeepSeek UD-IQ1_S模型权重和DeepSeek R1的模型配置文件,并分别保存 在两个文件夹中:

  • DeepSeek R1 UD-IQ1_S模型权重地址: /root/autodl-tmp/DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S

图片

  • DeepSeek R1的模型配置文件地址: /root/autodl-tmp/DeepSeek-R1

图片

4.DeepSeek V3-0324 模型权重与配置文件下载

接下来我们继续下载DeepSeek-V3-0324模型权重与配置文件。不同于R1模型是推理模型, V3-0324 模型是对话模型,但由于其出色的Agent能力(Function calling能力), V3-0324模型在很多场景下也有 很多实际应用需求。由于R1和V3模型架构完全相同,因此Ktransformers也是可以调用V3模型来进行响   应的。

本次实验使用官方推荐的DeepSeek-V3-0324 Q2_K_XL(1.58bit模型目前不太稳定)模型,该模型 也是目前最稳定的动态量化模型,需要14G显存+170G内存即可调用。

  • 魔搭社区下载地址: https://www.modelscope.cn/models/unsloth/DeepSeek-V3-0324-GGUF/summary

图片

图片

  • HuggingFace下载地址: https://huggingface.co/unsloth/DeepSeek-V3-0324-GGUF

图片

图片

  • 使用魔搭社区进行下载 输入如下命令进行下载

mkdir ./DeepSeek-V3-0324-GGUF

modelscope download --model unsloth/DeepSeek-V3-0324-GGUF  --include '**Q4_K_M**' --local_dir /root/autodl-tmp/DeepSeek-V3-0324-GGUF

图片

图片

  • 下载DeepSeek V3原版模型的配置文件

mkdir ./DeepSeek-V3-0324

modelscope download --model deepseek-ai/DeepSeek-V3-0324  --exclude '*.safetensors'  --local_dir /root/autodl-tmp/DeepSeek-V3-0324

图片

下载后完整文件如下所示:

图片

相关文件也可以在课程课件中领取:

图片

  • 成果汇总

这里最终我们是下载了DeepSeek V3 Q2_K_XL模型权重和DeepSeek V3的模型配置文件,并分别保 存在两个文件夹中:

  • DeepSeek V3 Q2模型权重地址: /root/autodl-tmp/DeepSeek-V3/UD-Q2_K_XL

图片

  • DeepSeek V3 IQ2的模型配置文件地址: /root/autodl-tmp/DeepSeek-V3-0324

图片

三、 KTransformer v0.24版调用DeepSeek运行流程         

在安装完成了KTransformer v0.24,并下载好了模型权重和相应的模型配置之后,接下来即可尝试

进行调用了。 KTransformer v0.24支持两种调用方法,分别借助 local_chat.py进行命令行本地对话, 以及实用 server/main.py开启服务,然后在默认10002端口进行OpenAI风格的API调用。这里我们重   点尝试使用后端服务模式调用DeepSeek模型。

1.DeepSeek-R1调用流程

部署完成后,即可使用如下命令开启后端服务,并在10002端口实现OpenAI风格API调用。这里需 要输入如下命令:

python ktransformers/server/main.py \

--port 10002 \

--model_path /root/autodl-tmp/DeepSeek-R1 \

--gguf_path /root/autodl-tmp/DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S \

--optimize_config_path ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-

serve.yaml \

--max_new_tokens 1024 \

--cache_lens 32768 \

--chunk_size 256 \

--max_batch_size 4 \

--backend_type balance_serve

等待响应如下:

图片

然后即可在命令行输入如下命令进行调用:

curl -X POST http://localhost:10002/v1/chat/completions \

-H "accept: application/json" \

-H "Content-Type: application/json" \

-d '{

"messages": [

{"role": "user", "content": "你好,好久不见"} ],

"model": "DeepSeek-R1",

"temperature": 0.3,

"top_p": 1.0,

"stream": true }'

即可获得如下响应:

图片

当然,我们也可以直接在Jupyter中尝试对其进行调用:

from openai import OpenAI

# 实例化客户端

client = OpenAI(api_key="None",

base_url="http://localhost:10002/v1")

# 调用 deepseek-R1 模型

response = client.chat.completions.create( 

model="DeepSeek-R1",

messages=[

{"role": "user", "content": "你好,好久不见 !"}

]

)

# 输出生成的响应内容

print(response.choices[0].message.content)

响应结果如下所示:

图片

2.DeepSeek-V3-0324 调用流程

可使用如下命令开启后端服务,并在10002端口实现OpenAI风格API调用。这里需要输入如下命令:

python ktransformers/server/main.py \

--port 10002 \

--model_path /root/autodl-tmp/DeepSeek-V3-0324 \

--gguf_path /root/autodl-tmp/DeepSeek-V3-0324-GGUF/UD-Q2_K_XL \ --max_new_tokens 1024 \

--cache_lens 32768 \

--chunk_size 256 \

--max_batch_size 4 \

--backend_type balance_serve

等待响应如下:

图片

然后即可在命令行输入如下命令进行调用:

curl -X POST http://localhost:10002/v1/chat/completions \

-H "accept: application/json" \

-H "Content-Type: application/json" \

-d '{

"messages": [

{"role": "user", "content": "你好,好久不见"} ],

"model": "DeepSeek-V3-0324",

"temperature": 0.3,

"top_p": 1.0,

"stream": true }'

即可获得如下响应:

图片

当然,我们也可以直接在Jupyter中尝试对其进行调用:

from openai import OpenAI 

# 实例化客户端 

client = OpenAI(api_key="None", 

base_url="http://localhost:10002/v1") 

# 调用 deepseekv3 模型 

response = client.chat.completions.create( 

model="DeepSeek-V3-0324", 

messages=[ 

{"role": "user", "content": "你好,好久不见!"} 

# 输出生成的响应内容

响应结果如下所示:

图片


为每个人提供最有价值的技术赋能!【公益】大模型技术社区已经上线!

内容完全免费,涵盖20多套工业级方案 + 10多个企业实战项目 + 400万开发者筛选的实战精华~不定期开展大模型硬核技术直播公开课,对标市面千元价值品质,社区成员限时免费听喔!

📍完整视频讲解+学习课件+项目源码包获取⬇️请点击原文进入赋范大模型技术社区即可领取~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值