|
| 1 | +<div align="center"> |
| 2 | + <!-- <h1>KTransformers</h1> --> |
| 3 | + <p align="center"> |
| 4 | + |
| 5 | +<picture> |
| 6 | + <img alt="KTransformers" src="https://github.com/user-attachments/assets/d5a2492f-a415-4456-af99-4ab102f13f8b" width=50%> |
| 7 | + |
| 8 | +</picture> |
| 9 | + |
| 10 | +</p> |
| 11 | + <h3>一个用于体验尖端 LLM 推理优化的灵活框架</h3> |
| 12 | + <strong><a href="#show-cases">🌟 案例展示</a> | <a href="#quick-start">🚀 快速入门</a> | <a href="#tutorial">📃 教程</a> | <a href="https://github.com/kvcache-ai/ktransformers/discussions">💬 讨论</a> | <a href="#FAQ">🙋 常见问题</a> </strong> |
| 13 | +</div> |
| 14 | + |
| 15 | +<h2 id="intro">🎉 介绍</h2> |
| 16 | +KTransformers(发音为 Quick Transformers)旨在通过先进的内核优化和放置/并行策略来增强您对 🤗 [Transformers](https://github.com/huggingface/transformers) 的体验。 |
| 17 | +<br/><br/> |
| 18 | +KTransformers 是一个以 Python 为中心的灵活框架,其核心是可扩展性。通过用一行代码实现并注入优化模块,用户可以获得与 Transformers 兼容的接口、符合 OpenAI 和 Ollama 的 RESTful API,甚至是一个简化的类似 ChatGPT 的 Web 界面。 |
| 19 | +<br/><br/> |
| 20 | +我们对 KTransformers 的愿景是成为一个用于实验创新 LLM 推理优化的灵活平台。如果您需要任何其他功能,请告诉我们。 |
| 21 | + |
| 22 | +<h2 id="Updates">🔥 更新</h2> |
| 23 | + |
| 24 | +* **2025 年 2 月 10 日**:支持 Deepseek-R1 和 V3 在单个(24GB VRAM)/多 GPU 和 382G DRAM 上运行,速度提升高达 3~28 倍。详细教程请参见 [这里](./doc/en/DeepseekR1_V3_tutorial.md)。 |
| 25 | +* **2024 年 8 月 28 日**:支持 InternLM2.5-7B-Chat-1M 模型下的 1M 上下文,使用 24GB 的 VRAM 和 150GB 的 DRAM。详细教程请参见 [这里](./doc/en/long_context_tutorial.md)。 |
| 26 | +* **2024 年 8 月 28 日**:将 DeepseekV2 所需的 VRAM 从 21G 降低到 11G。 |
| 27 | +* **2024 年 8 月 15 日**:更新了详细的 [教程](doc/en/injection_tutorial.md),介绍注入和多 GPU 的使用。 |
| 28 | +* **2024 年 8 月 14 日**:支持 llamfile 作为线性后端。 |
| 29 | +* **2024 年 8 月 12 日**:支持多 GPU;支持新模型:mixtral 8\*7B 和 8\*22B;支持 q2k、q3k、q5k 在 GPU 上的去量化。 |
| 30 | +* **2024 年 8 月 9 日**:支持 Windows。 |
| 31 | + |
| 32 | +<h2 id="show-cases">🌟 案例展示</h2> |
| 33 | + |
| 34 | +<div> |
| 35 | +<h3>在仅 24GB VRAM 的桌面上运行 GPT-4/o1 级别的本地 VSCode Copilot</h3> |
| 36 | +</div> |
| 37 | + |
| 38 | +https://github.com/user-attachments/assets/ebd70bfa-b2c1-4abb-ae3b-296ed38aa285 |
| 39 | + |
| 40 | +</p> |
| 41 | + |
| 42 | +- **[NEW!!!] 本地 671B DeepSeek-Coder-V3/R1**:使用其 Q4_K_M 版本,仅需 14GB VRAM 和 382GB DRAM 即可运行(教程请参见 [这里](./doc/en/DeepseekR1_V3_tutorial.md))。 |
| 43 | + - 预填充速度(tokens/s): |
| 44 | + - KTransformers:54.21(32 核)→ 74.362(双插槽,2×32 核)→ 255.26(优化的 AMX 基 MoE 内核,仅 V0.3)→ 286.55(选择性使用 6 个专家,仅 V0.3) |
| 45 | + - 与 llama.cpp 在 2×32 核下相比,达到 **27.79× 速度提升**。 |
| 46 | + - 解码速度(tokens/s): |
| 47 | + - KTransformers:8.73(32 核)→ 11.26(双插槽,2×32 核)→ 13.69(选择性使用 6 个专家,仅 V0.3) |
| 48 | + - 与 llama.cpp 在 2×32 核下相比,达到 **3.03× 速度提升**。 |
| 49 | + - 即将开源发布: |
| 50 | + - AMX 优化和选择性专家激活将在 V0.3 中开源。 |
| 51 | + - 目前仅在预览二进制分发中可用,可从 [这里](./doc/en/DeepseekR1_V3_tutorial.md) 下载。 |
| 52 | + |
| 53 | +- **本地 236B DeepSeek-Coder-V2**:使用其 Q4_K_M 版本,仅需 21GB VRAM 和 136GB DRAM 即可运行,甚至在 [BigCodeBench](https://huggingface.co/blog/leaderboard-bigcodebench) 中得分超过 GPT4-0613。 |
| 54 | + |
| 55 | +<p align="center"> |
| 56 | + <picture> |
| 57 | + <img alt="DeepSeek-Coder-V2 Score" src="https://github.com/user-attachments/assets/d052924e-8631-44de-aad2-97c54b965693" width=100%> |
| 58 | + </picture> |
| 59 | +</p> |
| 60 | + |
| 61 | +- **更快的速度**:通过 MoE 卸载和注入来自 [Llamafile](https://github.com/Mozilla-Ocho/llamafile/tree/main) 和 [Marlin](https://github.com/IST-DASLab/marlin) 的高级内核,实现了 2K 提示预填充 126 tokens/s 和生成 13.6 tokens/s 的速度。 |
| 62 | +- **VSCode 集成**:封装成符合 OpenAI 和 Ollama 的 API,可无缝集成到 [Tabby](https://github.com/TabbyML/tabby) 和其他前端的后端。 |
| 63 | + |
| 64 | +<p align="center"> |
| 65 | + |
| 66 | +https://github.com/user-attachments/assets/4c6a8a38-05aa-497d-8eb1-3a5b3918429c |
| 67 | + |
| 68 | +</p> |
| 69 | + |
| 70 | +<h3>在仅 24GB VRAM 的桌面上进行 1M 上下文本地推理</h3> |
| 71 | +<p align="center"> |
| 72 | + |
| 73 | +https://github.com/user-attachments/assets/a865e5e4-bca3-401e-94b8-af3c080e6c12 |
| 74 | + |
| 75 | +* **1M 上下文 InternLM 2.5 7B**:以全 bf16 精度运行,使用 24GB VRAM 和 150GB DRAM,可在本地桌面设置中实现。在 1M "针在干草堆中" 测试中达到 92.88% 的成功率,在 128K NIAH 测试中达到 100%。 |
| 76 | + |
| 77 | +<p align="center"> |
| 78 | + <picture> |
| 79 | + <img alt="Single Needle Retrieval 128K" src="./doc/assets/needle_128K.png" width=100%> |
| 80 | + </picture> |
| 81 | +</p> |
| 82 | + |
| 83 | +<p align="center"> |
| 84 | + <picture> |
| 85 | + <img alt="Single Needle Retrieval 1000K" src="./doc/assets/needle_1M.png" width=100%> |
| 86 | + </picture> |
| 87 | +</p> |
| 88 | + |
| 89 | +* **增强的速度**:使用稀疏注意力,通过 llamafile 内核实现 1M 上下文生成 16.91 tokens/s 的速度。这种方法比 llama.cpp 的全注意力方法快 10 倍以上。 |
| 90 | + |
| 91 | +* **灵活的稀疏注意力框架**:提供了一个灵活的块稀疏注意力框架,用于 CPU 卸载解码。与 SnapKV、Quest 和 InfLLm 兼容。更多信息请参见 [这里](./doc/en/long_context_introduction.md)。 |
| 92 | + |
| 93 | +<strong>更多高级功能即将推出,敬请期待!</strong> |
| 94 | + |
| 95 | +<h2 id="quick-start">🚀 快速入门</h2> |
| 96 | + |
| 97 | +<h3>准备工作</h3> |
| 98 | +一些准备工作: |
| 99 | + |
| 100 | +- 如果您还没有 CUDA 12.1 及以上版本,可以从 [这里](https://developer.nvidia.com/cuda-downloads) 安装。 |
| 101 | + |
| 102 | + ```sh |
| 103 | + # Adding CUDA to PATH |
| 104 | + export PATH=/usr/local/cuda/bin:$PATH |
| 105 | + export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH |
| 106 | + export CUDA_PATH=/usr/local/cuda |
| 107 | + ``` |
| 108 | + |
| 109 | +- Linux-x86_64 系统,需要安装 gcc、g++ 和 cmake |
| 110 | + |
| 111 | + ```sh |
| 112 | + sudo apt-get update |
| 113 | + sudo apt-get install gcc g++ cmake ninja-build |
| 114 | + ``` |
| 115 | + |
| 116 | +- 我们建议使用 Conda 创建一个 Python=3.11 的虚拟环境来运行我们的程序。 |
| 117 | + |
| 118 | + ```sh |
| 119 | + conda create --name ktransformers python=3.11 |
| 120 | + conda activate ktransformers # 您可能需要先运行 ‘conda init’ 并重新打开 shell |
| 121 | + ``` |
| 122 | + |
| 123 | +- 确保安装了 PyTorch、packaging、ninja |
| 124 | + |
| 125 | + ``` |
| 126 | + pip install torch packaging ninja cpufeature numpy |
| 127 | + ``` |
| 128 | + |
| 129 | +<h3>安装</h3> |
| 130 | + |
| 131 | +1. 使用 Docker 镜像,详见 [Docker 文档](./doc/en/Docker.md) |
| 132 | + |
| 133 | +2. 您可以使用 Pypi 安装(适用于 Linux): |
| 134 | + |
| 135 | + ``` |
| 136 | + pip install ktransformers --no-build-isolation |
| 137 | + ``` |
| 138 | + |
| 139 | + 对于 Windows,我们提供了一个预编译的 whl 包 [ktransformers-0.2.0+cu125torch24avx2-cp312-cp312-win_amd64.whl](https://github.com/kvcache-ai/ktransformers/releases/download/v0.2.0/ktransformers-0.2.0+cu125torch24avx2-cp312-cp312-win_amd64.whl),需要 cuda-12.5、torch-2.4、python-3.11,更多预编译包正在制作中。 |
| 140 | + |
| 141 | +3. 或者您可以下载源代码并编译: |
| 142 | + |
| 143 | + - init source code |
| 144 | + |
| 145 | + ```sh |
| 146 | + git clone https://github.com/kvcache-ai/ktransformers.git |
| 147 | + cd ktransformers |
| 148 | + git submodule init |
| 149 | + git submodule update |
| 150 | + ``` |
| 151 | + |
| 152 | + - [可选] 如果您想运行网站,请在执行```bash install.sh```之前, 进行 [compile the website](./doc/en/api/server/website.md) |
| 153 | + |
| 154 | + - 编译并安装(适用于 Linux) |
| 155 | + |
| 156 | + ``` |
| 157 | + bash install.sh |
| 158 | + ``` |
| 159 | + |
| 160 | + - 编译并安装(适用于 Windows) |
| 161 | + |
| 162 | + ``` |
| 163 | + install.bat |
| 164 | + ``` |
| 165 | +4. 如果您是开发者,可以使用 makefile 来编译和格式化代码。makefile 的详细用法请参见 [这里](./doc/en/makefile_usage.md) |
| 166 | + |
| 167 | +<h3>本地聊天</h3> |
| 168 | +我们提供了一个简单的命令行本地聊天 Python 脚本,您可以运行它进行测试。 |
| 169 | + |
| 170 | +> 请注意,这只是一个非常简单的测试工具,仅支持一轮聊天,不记忆上一次输入。如果您想体验模型的全部功能,可以前往 RESTful API 和 Web UI。这里以 DeepSeek-V2-Lite-Chat-GGUF 模型为例,但我们也支持其他模型,您可以替换为您想要测试的任何模型。 |
| 171 | + |
| 172 | +<h4>运行示例</h4> |
| 173 | + |
| 174 | +```shell |
| 175 | +# 从克隆的仓库根目录开始! |
| 176 | +# 从克隆的仓库根目录开始!! |
| 177 | +# 从克隆的仓库根目录开始!!! |
| 178 | +
|
| 179 | +# 从 Hugging Face 下载 mzwing/DeepSeek-V2-Lite-Chat-GGUF |
| 180 | +mkdir DeepSeek-V2-Lite-Chat-GGUF |
| 181 | +cd DeepSeek-V2-Lite-Chat-GGUF |
| 182 | +
|
| 183 | +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 |
| 184 | +
|
| 185 | +cd .. # 返回仓库根目录 |
| 186 | +
|
| 187 | +# 启动本地聊天 |
| 188 | +python -m ktransformers.local_chat --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF |
| 189 | +
|
| 190 | +# 如果遇到报错 “OSError: We couldn't connect to 'https://huggingface.co' to load this file”, 请尝试: |
| 191 | +# GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite |
| 192 | +# python ktransformers.local_chat --model_path ./DeepSeek-V2-Lite --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF |
| 193 | +``` |
| 194 | + |
| 195 | +它具有以下参数: |
| 196 | + |
| 197 | +- `--model_path` (required): 模型名称 (例如 "deepseek-ai/DeepSeek-V2-Lite-Chat" 将自动从 [Hugging Face](https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite) 下载配置)。或者,如果您已经有本地文件,可以直接使用该路径来初始化模型。 |
| 198 | + |
| 199 | + > Note: <strong>.safetensors</strong> 文件不是必需的。我们只需要配置文件来构建模型和分词器。 |
| 200 | + |
| 201 | +- `--gguf_path` (required): 包含 GGUF 文件的目录路径,可以从 [Hugging Face](https://huggingface.co/mzwing/DeepSeek-V2-Lite-Chat-GGUF/tree/main) 下载。请注意,该目录应仅包含当前模型的 GGUF,这意味着您需要为每个模型使用一个单独的目录。 |
| 202 | + |
| 203 | +- `--optimize_rule_path` (必需,Qwen2Moe 和 DeepSeek-V2 除外): 包含优化规则的 YAML 文件路径。在 [ktransformers/optimize/optimize_rules](ktransformers/optimize/optimize_rules) 目录中有两个预写的规则文件,用于优化 DeepSeek-V2 和 Qwen2-57B-A14,这两个是 SOTA MoE 模型。 |
| 204 | + |
| 205 | +- `--max_new_tokens`: Int (default=1000). 要生成的最大 new tokens。 |
| 206 | + |
| 207 | +- `--cpu_infer`: Int (default=10). 用于推理的 CPU 数量。理想情况下应设置为(总核心数 - 2)。 |
| 208 | + |
| 209 | +<h3 id="suggested-model"> 建议模型</h3> |
| 210 | + |
| 211 | +| Model Name | Model Size | VRAM | Minimum DRAM | Recommended DRAM | |
| 212 | +| ------------------------------ | ---------- | ----- | --------------- | ----------------- | |
| 213 | +| DeepSeek-R1-q4_k_m | 377G | 14G | 382G | 512G | |
| 214 | +| DeepSeek-V3-q4_k_m | 377G | 14G | 382G | 512G | |
| 215 | +| DeepSeek-V2-q4_k_m | 133G | 11G | 136G | 192G | |
| 216 | +| DeepSeek-V2.5-q4_k_m | 133G | 11G | 136G | 192G | |
| 217 | +| DeepSeek-V2.5-IQ4_XS | 117G | 10G | 107G | 128G | |
| 218 | +| Qwen2-57B-A14B-Instruct-q4_k_m | 33G | 8G | 34G | 64G | |
| 219 | +| DeepSeek-V2-Lite-q4_k_m | 9.7G | 3G | 13G | 16G | |
| 220 | +| Mixtral-8x7B-q4_k_m | 25G | 1.6G | 51G | 64G | |
| 221 | +| Mixtral-8x22B-q4_k_m | 80G | 4G | 86.1G | 96G | |
| 222 | +| InternLM2.5-7B-Chat-1M | 15.5G | 15.5G | 8G(32K context) | 150G (1M context) | |
| 223 | + |
| 224 | + |
| 225 | +更多即将推出。请告诉我们您最感兴趣的模型。 |
| 226 | + |
| 227 | +请注意,在使用 [DeepSeek](https://huggingface.co/deepseek-ai/DeepSeek-V2/blob/main/LICENSE) 和 [QWen](https://huggingface.co/Qwen/Qwen2-72B-Instruct/blob/main/LICENSE) 时,需要遵守相应的模型许可证。 |
| 228 | + |
| 229 | +<details> |
| 230 | + <summary>点击显示如何运行其他示例</summary> |
| 231 | + |
| 232 | +* Qwen2-57B |
| 233 | + |
| 234 | + ```sh |
| 235 | + pip install flash_attn # For Qwen2 |
| 236 | +
|
| 237 | + mkdir Qwen2-57B-GGUF && cd Qwen2-57B-GGUF |
| 238 | +
|
| 239 | + 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 |
| 240 | +
|
| 241 | + cd .. |
| 242 | +
|
| 243 | + python -m ktransformers.local_chat --model_name Qwen/Qwen2-57B-A14B-Instruct --gguf_path ./Qwen2-57B-GGUF |
| 244 | +
|
| 245 | + # 如果遇到报错 “OSError: We couldn't connect to 'https://huggingface.co' to load this file”, 请尝试: |
| 246 | + # GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct |
| 247 | + # python ktransformers/local_chat.py --model_path ./Qwen2-57B-A14B-Instruct --gguf_path ./DeepSeek-V2-Lite-Chat-GGUF |
| 248 | + ``` |
| 249 | + |
| 250 | +* DeepseekV2 |
| 251 | + |
| 252 | + ```sh |
| 253 | + mkdir DeepSeek-V2-Chat-0628-GGUF && cd DeepSeek-V2-Chat-0628-GGUF |
| 254 | + # Download weights |
| 255 | + 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 |
| 256 | + 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 |
| 257 | + 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 |
| 258 | + 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 |
| 259 | +
|
| 260 | + cd .. |
| 261 | +
|
| 262 | + python -m ktransformers.local_chat --model_name deepseek-ai/DeepSeek-V2-Chat-0628 --gguf_path ./DeepSeek-V2-Chat-0628-GGUF |
| 263 | +
|
| 264 | + # 如果遇到报错 “OSError: We couldn't connect to 'https://huggingface.co' to load this file”, 请尝试: |
| 265 | +
|
| 266 | + # GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-V2-Chat-0628 |
| 267 | +
|
| 268 | + # python -m ktransformers.local_chat --model_path ./DeepSeek-V2-Chat-0628 --gguf_path ./DeepSeek-V2-Chat-0628-GGUF |
| 269 | + ``` |
| 270 | + |
| 271 | +| model name | weights download link | |
| 272 | +|----------|----------| |
| 273 | +| Qwen2-57B | [Qwen2-57B-A14B-gguf-Q4K-M](https://huggingface.co/Qwen/Qwen2-57B-A14B-Instruct-GGUF/tree/main) | |
| 274 | +| DeepseekV2-coder |[DeepSeek-Coder-V2-Instruct-gguf-Q4K-M](https://huggingface.co/LoneStriker/DeepSeek-Coder-V2-Instruct-GGUF/tree/main) | |
| 275 | +| DeepseekV2-chat |[DeepSeek-V2-Chat-gguf-Q4K-M](https://huggingface.co/bullerwins/DeepSeek-V2-Chat-0628-GGUF/tree/main) | |
| 276 | +| DeepseekV2-lite | [DeepSeek-V2-Lite-Chat-GGUF-Q4K-M](https://huggingface.co/mzwing/DeepSeek-V2-Lite-Chat-GGUF/tree/main) | |
| 277 | + |
| 278 | +</details> |
| 279 | + |
| 280 | +<!-- pin block for jump --> |
| 281 | +<span id='id_666'> |
| 282 | + |
| 283 | +<h3>RESTful API and Web UI</h3> |
| 284 | + |
| 285 | + |
| 286 | +启动不带网站的服务: |
| 287 | + |
| 288 | +```sh |
| 289 | +ktransformers --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path /path/to/DeepSeek-V2-Lite-Chat-GGUF --port 10002 |
| 290 | +``` |
| 291 | + |
| 292 | +启动带网站的服务: |
| 293 | + |
| 294 | +```sh |
| 295 | +ktransformers --model_path deepseek-ai/DeepSeek-V2-Lite-Chat --gguf_path /path/to/DeepSeek-V2-Lite-Chat-GGUF --port 10002 --web True |
| 296 | +``` |
| 297 | + |
| 298 | +或者,如果您想使用 transformers 启动服务,model_path 应该包含 safetensors 文件: |
| 299 | + |
| 300 | +```bash |
| 301 | +ktransformers --type transformers --model_path /mnt/data/model/Qwen2-0.5B-Instruct --port 10002 --web True |
| 302 | +``` |
| 303 | + |
| 304 | +通过 [http://localhost:10002/web/index.html#/chat](http://localhost:10002/web/index.html#/chat) 访问: |
| 305 | + |
| 306 | +<p align="center"> |
| 307 | + <picture> |
| 308 | + <img alt="Web UI" src="https://github.com/user-attachments/assets/615dca9b-a08c-4183-bbd3-ad1362680faf" width=90%> |
| 309 | + </picture> |
| 310 | +</p> |
| 311 | + |
| 312 | +关于 RESTful API 服务器的更多信息可以在这里找到 [这里](doc/en/api/server/server.md)。您还可以在这里找到与 Tabby 集成的示例 [这里](doc/en/api/server/tabby.md)。 |
| 313 | + |
| 314 | +<h2 id="tutorial">📃 简要注入教程</h2> |
| 315 | +KTransformers 的核心是一个用户友好的、基于模板的注入框架。这使得研究人员可以轻松地将原始 torch 模块替换为优化的变体。它还简化了多种优化的组合过程,允许探索它们的协同效应。 |
| 316 | +</br> |
| 317 | +<p align="center"> |
| 318 | + <picture> |
| 319 | + <img alt="Inject-Struction" src="https://github.com/user-attachments/assets/6b4c1e54-9f6d-45c5-a3fc-8fa45e7d257e" width=65%> |
| 320 | + </picture> |
| 321 | +</p> |
| 322 | + |
| 323 | +鉴于 vLLM 已经是一个用于大规模部署优化的优秀框架,KTransformers 特别关注受资源限制的本地部署。我们特别关注异构计算时机,例如量化模型的 GPU/CPU 卸载。例如,我们支持高效的 <a herf="https://github.com/Mozilla-Ocho/llamafile/tree/main">Llamafile</a> 和<a herf="https://github.com/IST-DASLab/marlin">Marlin</a> 内核,分别用于 CPU 和 GPU。 更多详细信息可以在这里找到 <a herf="doc/en/operators/llamafile.md">这里</a>。 |
| 324 | + |
| 325 | + |
| 326 | +<h3>示例用法</h3> |
| 327 | +要使用提供的内核,用户只需创建一个基于 YAML 的注入模板,并在使用 Transformers 模型之前添加对 `optimize_and_load_gguf` 的调用。 |
| 328 | + |
| 329 | +```python |
| 330 | +with torch.device("meta"): |
| 331 | + model = AutoModelForCausalLM.from_config(config, trust_remote_code=True) |
| 332 | +optimize_and_load_gguf(model, optimize_rule_path, gguf_path, config) |
| 333 | +... |
| 334 | +generated = prefill_and_generate(model, tokenizer, input_tensor.cuda(), max_new_tokens=1000) |
| 335 | +``` |
| 336 | +
|
| 337 | +在这个示例中,首先在 meta 设备上初始化 AutoModel,以避免占用任何内存资源。然后,`optimize_and_load_gguf` 遍历模型的所有子模块,匹配您的 YAML 规则文件中指定的规则,并将它们替换为指定的高级模块。 |
| 338 | +
|
| 339 | +注入后,原始的 `generate` 接口仍然可用,但我们还提供了一个兼容的 `prefill_and_generate` 方法,这使得可以进一步优化,例如使用 CUDAGraph 提高生成速度。 |
| 340 | +
|
| 341 | +<h3>如何自定义您的模型</h3> |
| 342 | +
|
| 343 | +一个详细的使用 DeepSeek-V2 作为示例的注入和 multi-GPU 教程在这里给出 [这里](doc/en/injection_tutorial.md)。 |
| 344 | +
|
| 345 | +以下是一个将所有原始 Linear 模块替换为 Marlin 的 YAML 模板示例,Marlin 是一个高级的 4 位量化内核。 |
| 346 | +
|
| 347 | +```yaml |
| 348 | +- match: |
| 349 | + name: "^model\\.layers\\..*$" # 正则表达式 |
| 350 | + class: torch.nn.Linear # 仅匹配同时符合名称和类的模块 |
| 351 | + replace: |
| 352 | + class: ktransformers.operators.linear.KTransformerLinear # 量化数据类型的优化内核 |
| 353 | + device: "cpu" # 初始化时加载该模块的 device |
| 354 | + kwargs: |
| 355 | + generate_device: "cuda" |
| 356 | + generate_linear_type: "QuantizedLinearMarlin" |
| 357 | +``` |
| 358 | +
|
| 359 | +YAML 文件中的每个规则都有两部分:`match` 和 `replace`。`match` 部分指定应替换的模块,`replace` 部分指定要注入到模型中的模块以及初始化关键字。 |
| 360 | +
|
| 361 | +您可以在 [ktransformers/optimize/optimize_rules](ktransformers/optimize/optimize_rules) 目录中找到用于优化 DeepSeek-V2 和 Qwen2-57B-A14 的示例规则模板。这些模板用于为 `local_chat.py` 示例提供支持。 |
| 362 | +
|
| 363 | +如果您对我们的设计原则和注入框架的实现感兴趣,请参考 [设计文档](doc/en/deepseek-v2-injection.md)。 |
| 364 | +
|
| 365 | +<h2 id="ack">致谢和贡献者</h2> |
| 366 | +
|
| 367 | +KTransformer 的开发基于 Transformers 提供的灵活和多功能框架。我们还受益于 GGUF/GGML、Llamafile 和 Marlin 等高级内核。我们计划通过向上游贡献我们的修改来回馈社区。 |
| 368 | +
|
| 369 | +KTransformer 由清华大学 <a href="https://madsys.cs.tsinghua.edu.cn/">MADSys group</a> 小组的成员以及 <a href="http://approaching.ai/">Approaching.AI</a> 的成员积极维护和开发。我们欢迎新的贡献者加入我们,使 KTransformer 更快、更易于使用。 |
| 370 | +
|
| 371 | +
|
| 372 | +<h2 id="ack">讨论</h2> |
| 373 | +
|
| 374 | +如果您有任何问题,欢迎随时提出 issue。或者,您可以加入我们的微信群进行进一步讨论。二维码: [微信群](WeChatGroup.png) |
| 375 | +
|
| 376 | +<h2 id="FAQ">🙋 常见问题</h2> |
| 377 | +
|
| 378 | +一些常见问题的答案可以在 [FAQ](doc/en/FAQ.md) 中找到。 |
0 commit comments