清华开源KTransformers-让24GB显卡流畅运行满血DeepSeek-R1

图片

在AI技术飞速发展的今天,大语言模型(LLM)的应用越来越广泛。然而,本地运行这些模型,尤其是像DeepSeek-R1这样的大模型,往往需要高性能的硬件支持,这让许多开发者和研究人员望而却步。

今天,为大家推荐一款由清华大学 MADSys 和 Approaching.AI 专为优化大模型本地推理体验而设计的开源框架--KTransformers。它支持在单卡24GB VRAM的GPU上运行满血版的DeepSeek-R1,较llama.cpp而言,预填充阶段性能提升高达27.79倍!其主要的优化策略有:

  1. 混合推理:KTransformers 框架采用 CPU 和 GPU 混合推理技术。计算密集型操作被卸载到 GPU,而其他操作则由 CPU 处理。这种分工协作的方式能够充分利用硬件资源,提高效率。

  2. 专家选择策略:框架使用了一种基于离线剖析结果的专家选择策略。在推理过程中,选择较少的专家参与计算,在不影响输出质量的前提下,有效地减少了内存占用。

  3. Intel AMX 优化:框架中使用了 AMX 加速内核和缓存友好的内存布局。这些优化措施显著提升了性能,并减少了内存开销。

  4. 高效内存管理:为了避免 NUMA 节点之间的数据传输成本,框架将关键矩阵复制到两个 NUMA 节点,从而加快预填充和解码过程。虽然这种方法增加了内存消耗,但显著提升了性能。

这篇文章将带您深入了解KTransformers的强大功能,以及如何轻松上手。

KTransformers是什么?

KTransformers是一个基于Python的开源框架,专注于优化大模型的本地推理体验。它通过先进的内核优化和灵活的硬件配置策略,让开发者能够在有限的资源下实现高效的模型推理,并提供了与 Transformers 兼容的接口、符合 OpenAI 和 Ollama 标准的 RESTful API。

Server architecture

无论是单GPU、多GPU,还是CPU/GPU混合推理,KTransformers都能提供卓越的性能表现。此外,它还支持多种量化方法(如Q2K、Q3K、Q5K等),能够在不显著影响模型精度的情况下,大幅降低内存占用。

KTransformers核心功能
  1. 支持DeepSeek-R1/V3本地运行
    KTransformers支持在单卡24GB VRAM的GPU上运行DeepSeek-R1/V3的Q4_K_M版本,性能表现如下:

    • Prefill Speed(tokens/s):54.21(单节点)→ 74.362(双节点)→ 286.55(优化后)。

    • Decode Speed(tokens/s):8.73(单节点)→ 11.26(双节点)→ 13.69(优化后)。

    • 相比llama.cpp,KTransformers的Prefill速度提升高达27.79倍,Decode速度提升3.03倍!

  2. 支持长上下文推理
    KTransformers能够在单卡24GB GPU上支持128K甚至1M的长上下文推理,速度比llama.cpp快10倍以上,同时保持100%的推理精度。

  3. 多GPU和异构计算支持
    KTransformers不仅支持多GPU并行推理,还支持CPU/GPU混合推理,充分利用硬件资源,提升推理效率。

  4. 灵活的配置和优化
    用户可以通过简单的YAML配置文件,灵活地调整模型的优化策略,例如选择不同的量化方法或替换特定的模块。

  5. 丰富的API和教程
    KTransformers提供了RESTful API和详细的教程文档,方便开发者快速上手。

如何使用KTransformers?

使用KTransformers非常简单,以下是基本步骤:

  1. 安装依赖

    pip install ktransformers
    
  2. 加载模型

    from transformers import AutoModelForCausalLM
    import torch
    
    with torch.device("meta"):
        model = AutoModelForCausalLM.from_config(config, trust_remote_code=True)
    
  3. 优化和加载模型

    from ktransformers import optimize_and_load_gguf
    
    optimize_and_load_gguf(model, optimize_rule_path, gguf_path, config)
    
  4. 生成文本

    generated = prefill_and_generate(model, tokenizer, input_tensor.cuda(), max_new_tokens=1000)
性能对比:KTransformers vs llama.cpp

指标

llama.cpp(双节点,64核)

KTransformers(双节点,64核)

提升倍数

Prefill Speed

10.31 tokens/s

286.55 tokens/s

27.79×

Decode Speed

4.51 tokens/s

13.69 tokens/s

3.03×

从上表可以看出,KTransformers在性能上远超llama.cpp,尤其是在Prefill阶段,速度提升了27.79倍!

KTransformers的适用场景
  1. 本地开发和测试
    如果您希望在本地快速开发和测试大模型,KTransformers是一个理想的选择。

  2. 资源受限的环境
    对于硬件资源有限的开发者,KTransformers可以通过优化和量化,让模型在有限的资源下运行得更好。

  3. 高性能推理需求
    如果您需要在本地实现高性能的模型推理,KTransformers的多GPU和异构计算支持能够满足您的需求。

KTransformers的源代码:https://github.com/kvcache-ai/ktransformers

### KTransformers Library Information and Resources KTransformers is a specialized library designed to facilitate the use of transformer models within Kotlin-based applications, providing an interface that integrates seamlessly with existing machine learning frameworks such as Hugging Face's Transformers[^1]. The primary focus of this library lies in simplifying the process of deploying state-of-the-art NLP models into production environments by abstracting away much of the complexity associated with model management. #### Key Features - **Model Integration**: Supports integration with popular pre-trained models like BERT, RoBERTa, DistilBERT among others. - **Efficient Inference**: Optimized for efficient inference on both CPU and GPU hardware through leveraging advanced computational techniques. - **Ease of Use**: Designed with simplicity in mind, offering intuitive APIs tailored specifically towards developers working primarily in Kotlin. #### Installation Guide To incorporate KTransformers into projects, one can add dependencies via Gradle or Maven repositories depending upon project setup preferences: For Gradle users: ```groovy dependencies { implementation 'com.example.ktransformers:ktransformers:<version>' } ``` Maven configuration would look similar but adapted according to specific requirements documented officially. #### Example Usage Code Snippet Below demonstrates how easily one might load a tokenizer alongside initializing a sequence classification pipeline using KTransformers: ```kotlin import com.example.ktransformers.pipeline.SequenceClassificationPipeline import com.example.ktransformers.tokenization.BertTokenizer fun main() { val tokenizer = BertTokenizer.fromPretrained("bert-base-uncased") val classifier = SequenceClassificationPipeline(modelNameOrPath = "distilbert-base-uncased-finetuned-sst-2-english", tokenizer) println(classifier.invoke("I love programming!")) } ``` --related questions-- 1. What are some common issues encountered while setting up KTransformers? 2. How does KTransformers compare against other libraries when it comes to performance benchmarks? 3. Can you provide examples where KTransformers has been successfully deployed at scale? 4. Are there any community forums dedicated solely to discussing developments around KTransformers?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值