Project Icon

ktransformers

体验前沿LLM推理优化的灵活框架

KTransformers是一个灵活的Python框架,通过高级内核优化和并行策略增强Transformers性能。框架支持单行代码注入优化模块,提供Transformers兼容接口、OpenAI和Ollama标准RESTful API及简化的ChatGPT风格Web UI。专注本地部署和异构计算优化,KTransformers集成Llamafile和Marlin内核,为LLM推理优化实验提供灵活平台。

KTransformers

体验前沿LLM推理优化的灵活框架

🔥 展示案例 | 🚀 快速开始 | 📃 教程 | 💬 讨论

🎉 简介

KTransformers(发音为Quick Transformers)旨在通过高级内核优化和放置/并行策略来增强您的🤗 Transformers体验。

KTransformers是一个灵活的、以Python为中心的框架,其核心设计理念是可扩展性。 通过一行代码实现和注入优化模块,用户可以获得与Transformers兼容的接口、符合OpenAI和Ollama标准的RESTful API,甚至是简化版的ChatGPT网页界面。

我们对KTransformers的愿景是成为一个灵活的平台,用于尝试创新的LLM推理优化。如果您需要任何其他功能,请告诉我们。

✨ 更新

  • 2024年8月15日:更新了注入和多GPU的详细教程
  • 2024年8月14日:支持llamafile作为线性后端。
  • 2024年8月12日:支持多GPU;支持新模型:mixtral 8*7B和8*22B;支持GPU上的q2k、q3k、q5k反量化。
  • 2024年8月9日:支持原生Windows。

🔥 展示案例

仅需24GB显存的桌面电脑上运行GPT-4级别的本地VSCode Copilot

https://github.com/user-attachments/assets/0b9fa2da-66f0-48eb-b4b9-f0e1f06f8927

  • 本地236B DeepSeek-Coder-V2: 运行其Q4_K_M版本仅需21GB显存和136GB内存,可在本地桌面机器上实现,在BigCodeBench测试中得分甚至超过GPT4-0613。

DeepSeek-Coder-V2 分数

  • 更快的速度: 通过MoE卸载和注入来自LlamafileMarlin的高级内核,实现2K提示词预填充126 tokens/s和生成13.6 tokens/s的速度。
  • VSCode集成: 封装成兼容OpenAI和Ollama的API,可无缝集成为Tabby和其他各种前端的后端。

https://github.com/user-attachments/assets/4c6a8a38-05aa-497d-8eb1-3a5b3918429c

更多高级功能即将推出,敬请期待!

🚀 快速开始

准备工作

一些准备工作:
  • CUDA 12.1及以上版本,如果您还没有安装,可以从这里安装。

  • Linux-x86_64系统,安装gcc、g++和cmake

    sudo apt-get update
    sudo apt-get install gcc g++ cmake ninja-build
    
  • 我们建议使用Conda创建一个Python=3.11的虚拟环境来运行我们的程序。

    conda create --name ktransformers python=3.11
    conda activate ktransformers # 您可能需要先运行'conda init'并重新打开shell
    
  • 确保已安装PyTorch、packaging和ninja

    pip install torch packaging ninja
    

安装

  1. 使用Docker镜像,请参阅Docker文档

  2. 您可以使用Pypi安装(适用于Linux):

    pip install ktransformers --no-build-isolation
    

    对于Windows,我们准备了一个预编译的whl包ktransformers-0.1.1+cu125torch24avx2-cp311-cp311-win_amd64.whl,需要cuda-12.5、torch-2.4、python-3.11,更多预编译包正在制作中。

  3. 或者您可以下载源代码并编译:

    • 初始化源代码

      git clone https://github.com/kvcache-ai/ktransformers.git
      cd ktransformers
      git submodule init
      git submodule update
      
    • [可选] 如果您想运行网站,请在执行bash install.sh之前编译网站

    • 编译并安装(适用于Linux)

      bash install.sh
      
    • 编译并安装(适用于Windows)

      install.bat
      

本地聊天

我们提供了一个简单的命令行本地聊天Python脚本,您可以运行它进行测试。

注意,这只是一个非常简单的测试工具,仅支持一轮对话,没有关于上一次输入的任何记忆。如果您想尝试模型的全部功能,可以前往RESTful API和Web UI。这里我们以DeepSeek-V2-Lite-Chat-GGUF模型为例。但我们也支持其他模型,您可以用任何想测试的其他模型替换它。

运行示例

# 从克隆的仓库根目录开始!
# 从克隆的仓库根目录开始!!
# 从克隆的仓库根目录开始!!!

# 从huggingface下载mzwing/DeepSeek-V2-Lite-Chat-GGUF
mkdir DeepSeek-V2-Lite-Chat-GGUF
cd DeepSeek-V2-Lite-Chat-GGUF

wget https://huggingface.co/mzwing/DeepSeek-V2-Lite-Chat-GGUF/resolve/main/DeepSeek-V2-Lite-Chat.Q4_K_M.gguf -O DeepSeek-V2-Lite-Chat.Q4_K_M.gguf

cd .. # 返回仓库根目录

# 开始本地聊天
python -m ktransformers.local_chat --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF
# 如果看到 "OSError: 无法连接到 'https://huggingface.co' 加载此文件",请尝试:
# GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite
# python ktransformers.local_chat --model_path ./DeepSeek-V2-Lite --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF

它具有以下参数:

  • --model_path(必需):模型名称(如 "deepseek-ai/DeepSeek-V2-Lite-Chat",将自动从 Hugging Face 下载配置)。或者如果你已经有本地文件,可以直接使用该路径初始化模型。

    注意:目录中不需要 .safetensors 文件。我们只需要配置文件来构建模型和分词器。

  • --gguf_path(必需):包含 GGUF 文件的目录路径,可以从 Hugging Face 下载(目前我们只支持 q4_k_m 和 q8_0,更多格式即将推出)。
  • --optimize_rule_path(除 Qwen2Moe 和 DeepSeek-V2 外必需):包含优化规则的 YAML 文件路径。ktransformers/optimize/optimize_rules 目录中预先编写了两个规则文件,用于优化 DeepSeek-V2 和 Qwen2-57B-A14,这两个是最先进的 MoE 模型。
  • --max_new_tokens:整数(默认为 1000)。生成的最大新 token 数。
  • --cpu_infer:整数(默认为 10)。用于推理的 CPU 数量。理想情况下应设置为(总核心数 - 2)。

支持的模型

模型名称模型大小显存最小内存推荐内存
DeepSeek-V2-q4_k_m133G24G136G192G
Qwen2-57B-A14B-Instruct-q4_k_m33G8G34G64G
DeepSeek-V2-Lite-q4_k_m9.7G3G13G16G

更多模型即将推出。请告诉我们你最感兴趣的模型。

请注意,在使用 DeepSeekQWen 时,你需要遵守它们各自的模型许可。

点击显示如何运行其他示例
  • Qwen2-57B
pip install flash_attn # 适用于 Qwen2

mkdir Qwen2-57B-GGUF && cd Qwen2-57B-GGUF

wget https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct-GGUF/resolve/main/qwen2-57b-a14b-instruct-q4_k_m.gguf?download=true -O qwen2-57b-a14b-instruct-q4_k_m.gguf

cd ..

python -m ktransformers.local_chat --model_name Qwen/Qwen2-57B-A14B-Instruct --gguf_path ./Qwen2-57B-GGUF

# 如果看到 "OSError: 无法连接到 'https://huggingface.co' 加载此文件",请尝试:
# GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct
# python ktransformers/local_chat.py --model_path ./Qwen2-57B-A14B-Instruct --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF
  • DeepseekV2
mkdir DeepSeek-V2-Chat-0628-GGUF && cd DeepSeek-V2-Chat-0628-GGUF
# 下载权重
wget https://huggingface.co/bartowski/DeepSeek-V2-Chat-0628-GGUF/resolve/main/DeepSeek-V2-Chat-0628-Q4_K_M/DeepSeek-V2-Chat-0628-Q4_K_M-00001-of-00004.gguf -o DeepSeek-V2-Chat-0628-Q4_K_M-00001-of-00004.gguf
wget https://huggingface.co/bartowski/DeepSeek-V2-Chat-0628-GGUF/resolve/main/DeepSeek-V2-Chat-0628-Q4_K_M/DeepSeek-V2-Chat-0628-Q4_K_M-00002-of-00004.gguf -o DeepSeek-V2-Chat-0628-Q4_K_M-00002-of-00004.gguf
wget https://huggingface.co/bartowski/DeepSeek-V2-Chat-0628-GGUF/resolve/main/DeepSeek-V2-Chat-0628-Q4_K_M/DeepSeek-V2-Chat-0628-Q4_K_M-00003-of-00004.gguf -o DeepSeek-V2-Chat-0628-Q4_K_M-00003-of-00004.gguf
wget https://huggingface.co/bartowski/DeepSeek-V2-Chat-0628-GGUF/resolve/main/DeepSeek-V2-Chat-0628-Q4_K_M/DeepSeek-V2-Chat-0628-Q4_K_M-00004-of-00004.gguf -o DeepSeek-V2-Chat-0628-Q4_K_M-00004-of-00004.gguf

cd ..

python -m ktransformers.local_chat --model_name deepseek-ai/DeepSeek-V2-Chat-0628 --gguf_path ./DeepSeek-V2-Chat-0628-GGUF

# 如果看到 "OSError: 无法连接到 'https://huggingface.co' 加载此文件",请尝试:
# GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-V2-Chat-0628
# python -m ktransformers.local_chat --model_path ./DeepSeek-V2-Chat-0628 --gguf_path ./DeepSeek-V2-Chat-0628-GGUF
模型名称权重下载链接
Qwen2-57BQwen2-57B-A14B-gguf-Q4K-M
DeepseekV2-coderDeepSeek-Coder-V2-Instruct-gguf-Q4K-M
DeepseekV2-chatDeepSeek-V2-Chat-gguf-Q4K-M
DeepseekV2-liteDeepSeek-V2-Lite-Chat-GGUF-Q4K-M

RESTful API 和 Web 界面

不启动网站:

ktransformers --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path /path/to/DeepSeek-V2-Lite-Chat-GGUF --port 10002

使用网站启动:

ktransformers --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path /path/to/DeepSeek-V2-Lite-Chat-GGUF  --port 10002 --web True

如果你想使用transformers启动服务器,model_path应包含safetensors

ktransformers --type transformers --model_path /mnt/data/model/Qwen2-0.5B-Instruct --port 10002 --web True

通过网址 http://localhost:10002/web/index.html#/chat 访问网站:

Web UI

关于RESTful API服务器的更多信息可以在这里找到。你也可以在这里找到一个与Tabby集成的示例。

📃 简要注入教程

KTransformers的核心是一个用户友好的、基于模板的注入框架。 这允许研究人员轻松地用优化变体替换原始的torch模块。它还简化了组合多个优化的过程,允许探索它们的协同效应。

Inject-Struction

鉴于vLLM已经是大规模部署优化的优秀框架,KTransformers特别专注于资源有限的本地部署。我们特别关注异构计算机会,如量化模型的GPU/CPU卸载。例如,我们支持高效的LlamafileMarlin内核,分别用于CPU和GPU。更多详情可以在这里找到。

使用示例

要使用提供的内核,用户只需创建一个基于YAML的注入模板,并在使用Transformers模型之前添加对`optimize_and_load_gguf`的调用。
with torch.device("meta"):
    model = AutoModelForCausalLM.from_config(config, trust_remote_code=True)
optimize_and_load_gguf(model, optimize_rule_path, gguf_path, config)
...
generated = prefill_and_generate(model, tokenizer, input_tensor.cuda(), max_new_tokens=1000)

在这个例子中,首先在meta设备上初始化AutoModel以避免占用任何内存资源。然后,optimize_and_load_gguf遍历模型的所有子模块,匹配YAML规则文件中指定的规则,并用指定的高级模块替换它们。

注入后,原始的generate接口仍然可用,但我们还提供了一个兼容的prefill_and_generate方法,它可以启用进一步的优化,如CUDAGraph,以提高生成速度。

如何自定义你的模型

这里给出了以DeepSeek-V2为例的详细注入和多GPU使用教程。

以下是一个YAML模板示例,用于将所有原始Linear模块替换为Marlin,这是一个先进的4位量化内核。

- match:
    name: "^model\\.layers\\..*$"  # 正则表达式
    class: torch.nn.Linear  # 仅匹配同时匹配名称和类的模块
  replace:
    class: ktransformers.operators.linear.KTransformerLinear  # 优化的量化数据类型内核
    device: "cpu"   # 初始化时加载此模块的设备
    kwargs:
      generate_device: "cuda"
      generate_linear_type: "QuantizedLinearMarlin"

YAML文件中的每条规则都有两部分:matchreplacematch部分指定应该被替换的模块,replace部分指定要注入模型的模块以及初始化关键字。

你可以在ktransformers/optimize/optimize_rules目录中找到用于优化DeepSeek-V2和Qwen2-57B-A14(两个最先进的MoE模型)的示例规则模板。这些模板用于驱动local_chat.py演示。

如果你对我们的设计原则和注入框架的实现感兴趣,请参考设计文档

致谢和贡献者

KTransformer的开发基于Transformers提供的灵活多变的框架。我们还受益于先进的内核,如GGUF/GGML、Llamafile和Marlin。我们计划通过上游我们的修改来回馈社区。

KTransformer由来自清华大学MADSys小组的贡献者和Approaching.AI的成员积极维护和开发。我们欢迎新的贡献者加入我们,使KTransformer更快、更易用。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号