ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

KTransformers 异构推理实战:SmallThinker-21B 与 GLM-4-MoE 110B 的 CPU-GPU 混合部署指南

KTransformers 异构推理实战:SmallThinker-21B 与 GLM-4-MoE 110B 的 CPU-GPU 混合部署指南 KTransformers 异构推理实战SmallThinker-21B 与 GLM-4-MoE 110B 的 CPU-GPU 混合部署指南【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers本指南以 KTransformers 官方文档 doc/en/SmallThinker_and_Glm4moe.md 为骨架完整讲解 SmallThinker-21B 与 GLM-4-MoE 110B 两类 MoE 大模型在双路 CPU 单张消费级 GPU异构环境下的部署全流程从模型下载、KTransformers 安装、服务启动命令、OpenAI 兼容 API 调用到优化规则optimize rules的源码级原理剖析。读者学完后将能够在普通消费级硬件上独立拉起这两个模型的推理服务并理解 KTransformers 如何通过算子替换与专家卸载实现低显存、高吞吐的混合推理。1. 背景与能力概览KTransformers 是一个面向 LLM 异构推理与微调优化的灵活框架详见仓库根目录 README.md其核心思路是把模型中访存密集、参数量巨大的部分尤其是 MoE 专家网络卸载到 CPU/内存而把计算密集且对延迟敏感的注意力、全连接层保留在 GPU 上。2025 年 7 月 26 日KTransformers 正式宣布对SmallThinker与GLM-4-MoE的原生支持对应 README.md 更新记录中的 Support SmallThinker and GLM4-MoE 条目本文档即为官方配套教程。官方在概览中给出的典型硬件配置下的实测吞吐数据如下模型精度硬件配置吞吐约所需 DRAMSmallThinker-21BA3B-Instructbf16双路 CPU 单张消费级 GPU~26 TPS~84 GBGLM-4.5-Airbf16双路 CPU 单张消费级 GPU~11 TPS~440 GBGLM-4.5-AirAMX INT8双路 CPU 单张消费级 GPUprefill ~309 TPS / decode ~16 TPS~220 GB说明以上吞吐与内存数据来自官方文档在Overview一节中的表述为特定硬件与参数下的参考值实际数值会随序列长度、batch size、并发度与所使用内核的差异而浮动。1.1 涉及的模型SmallThinker-21BA3B-Instruct一个 21B 参数、激活参数约 3B 的 MoE 思考型模型官方发布组织为PowerInfer仓库模型 ID 为PowerInfer/SmallThinker-21BA3B-Instruct。GLM-4.5-Air110B 级 MoE智谱开源的高效 MoE 模型仓库模型 ID 为zai-org/GLM-4.5-Air。文档中GLM-4-MoE 110B与GLM-4.5-Air指代同一部署对象。两个模型均为典型的大规模稀疏 MoE 架构正是 KTransformersGPU 跑主干、CPU 跑专家异构策略的理想目标。2. 资源需求评估在动手前请先根据下表评估本机资源是否满足要求模型精度专家数所需 DRAM所需 GPU 显存*TPS约SmallThinker-21B-Instructbf1632~42 GB14 GB~26 TPSGLM-4.5-Airbf16128~220 GB14 GB~11 TPSGLM-4.5-AirAMX INT8int8128~220 GB14 GB~16 TPS* 确切 GPU 显存占用取决于序列长度、batch size 与所使用的内核kernels。两点需要特别留意DRAM 是主要瓶颈由于 110B 级 MoE 的专家权重整体驻留内存bf16 下约 220 GB本方案对 CPU 内存容量要求很高普通 32/64 GB 家用机无法承载 GLM-4.5-AirSmallThinker-21B 的 42 GB 需求同样需要大内存服务器。文档口径差异官方文档在Overview与Resource Requirements两处给出的 DRAM 数值存在差异SmallThinker 为 ~84 GB vs ~42 GBGLM-4.5-Air 为 ~440 GB vs ~220 GB。这可能是由于后者统计的是模型权重本身、前者统计了完整运行开销建议以实际--model_path下权重体积与运行监控为准资源规划时留出余量。3. 准备模型权重两种模型官方均提供 Hugging Face 格式的 safetensors 权重。使用huggingface-cli下载即可请将--local-dir调整为你自己的存储路径# SmallThinker-21B huggingface-cli download --resume-download PowerInfer/SmallThinker-21BA3B-Instruct \ --local-dir ./SmallThinker-21BA3B-Instruct # GLM-4-MoE 110BGLM-4.5-Air huggingface-cli download --resume-download zai-org/GLM-4.5-Air \ --local-dir ./GLM-4.5-Air提示--resume-download支持断点续传适合大体积权重下载完成后确认目录内包含config.json与完整的*.safetensors分片文件。4. 安装 KTransformers安装 KTransformers 主要有两种方式# 方式一PyPI 安装稳定版 pip install ktransformers # 方式二从源码安装需要最新特性时 # 克隆本仓库后进入根目录执行 # pip install .需要从源码编译时建议参考仓库内的官方安装文档 doc/en/install.md 完成依赖与编译环境的准备包括 Python 版本、PyTorch、CUDA 工具链与 CPU 指令集要求。5. 启动推理服务KTransformers 通过ktransformers/server/main.py启动一个 OpenAI 兼容的推理服务端。服务启动参数由 archive/ktransformers/server/args.py 统一解析关键参数含义见下表参数作用默认值依据 args.py--host服务监听地址配置文件server_ip--port服务端口配置文件server_port--model_path模型权重目录绝对路径配置文件model_path--model_name模型架构类名如SmallThinkerForCausalLM、Glm4MoeForCausalLM配置文件model_name--optimize_config_path优化规则 YAML 路径决定算子替换策略无可选--backend_type服务后端类型本文使用balance_serve配置文件backend_type--chunk_size预填充prefill分块大小配置文件chunk_size--max_batch_size最大并发批大小配置文件max_batch_size--max_new_tokens单次生成最大新 token 数配置文件max_new_tokens--cache_lensKV 缓存长度配置文件cache_lens5.1 启动 SmallThinker-21Bpython ktransformers/server/main.py \ --port 10021 \ --model_path /abs/path/to/SmallThinker-21B-bf16 \ --model_name SmallThinkerForCausalLM \ --optimize_config_path ktransformers/optimize/optimize_rules/SmallThinker-serve.yaml \ --max_new_tokens 1024 \ --cache_lens 32768 \ --chunk_size 256 \ --max_batch_size 4 \ --backend_type balance_serve5.2 启动 GLM-4-MoE 110Bpython ktransformers/server/main.py \ --port 10110 \ --model_name Glm4MoeForCausalLM \ --model_path /abs/path/to/GLM-4-MoE-110B-bf16 \ --optimize_config_path ktransformers/optimize/optimize_rules/Glm4Moe-serve.yaml \ --max_new_tokens 1024 \ --cache_lens 32768 \ --chunk_size 256 \ --max_batch_size 4 \ --backend_type balance_serve说明仓库内实际存在的优化规则文件名为Smallthinker-serve.yaml注意大小写位于 archive/ktransformers/optimize/optimize_rules/Smallthinker-serve.yamlGLM-4-MoE 对应 Glm4Moe-serve.yaml。若使用根目录版本请以实际文件名为准。6. 通过 OpenAI 兼容 API 访问服务服务启动后即可用标准curl发起/v1/chat/completions请求进行验证stream: true开启流式输出# 访问 SmallThinker-21B端口 10021 curl -X POST http://localhost:10021/v1/chat/completions \ -H accept: application/json \ -H Content-Type: application/json \ -d { messages: [ {role: user, content: hello} ], model: SmallThinker-21BA3B-Instruct, temperature: 0.3, top_p: 1.0, stream: true }# 访问 GLM-4-MoE 110B端口 10110 curl -X POST http://localhost:10110/v1/chat/completions \ -H accept: application/json \ -H Content-Type: application/json \ -d { messages: [ {role: user, content: hello} ], model: GLM-4.5-Air, temperature: 0.3, top_p: 1.0, stream: true }由于是 OpenAI 兼容接口openaiPython SDK 或其他 OpenAI 兼容客户端也可以直接指向http://localhost:10021/v1/http://localhost:10110/v1接入。7. 深入原理优化规则如何实现 CPU-GPU 异构启动命令中最关键的一环是--optimize_config_path指向的 YAML 优化规则文件。KTransformers 在模型加载阶段会逐条匹配模型中的子模块并用经过优化的算子类替换原始实现即match/replace机制。下面以 Smallthinker-serve.yaml 为例逐条拆解其设计意图。7.1 算子替换的总体布局match匹配目标replace替换为设备分配SmallthinkerRotaryEmbeddingRoPEKSmallthinkerRotaryEmbeddinggenerate/prefill 均 cudalm_headtorch.nn.LinearKTransformersLinearVLinearMarlin/KLinearTorchcuda除shared_expert_gate外的层内 LinearKTransformersLinearKLinearMarlin/KLinearTorchcudablock_sparse_moeSmallthinkerMoeBlockKSmallthinkerMoeBlockcudablock_sparse_moe.expertsKSmallthinkerExpertsgenerate 在 cpuprefill 在 cudaself_attnKSmallthinkerAttentioncudaembed_tokensdefaultgenerate/prefill 均 cpuSmallthinkerRMSNormKSmallthinkerRMSNormcudaSmallthinkerDenseMlpBlockKSmallthinkerDenseMlpBlockcuda7.2 核心策略一专家权重卸载到 CPU- match: name: ^model\\.layers\\..*\\.block_sparse_moe\\.experts$ replace: class: ktransformers.operators.experts.KSmallthinkerExperts # custom MoE Kernel with expert parallelism kwargs: prefill_device: cuda prefill_op: None generate_device: cpu generate_op: KExpertsCPU out_device: cuda recursive: False # dont recursively inject submodules of this module这是整份配置的灵魂prefill 阶段专家仍在 GPU 上执行prefill_device: cuda而 decode 生成阶段专家被卸载到 CPU 上执行generate_device: cpu算子为KExpertsCPU输出再通过out_device: cuda回传 GPU。正因为 MoE 的绝大多数参数量集中在专家矩阵这一条规则即可把 110B 模型的显存占用压到消费级显卡水平~14 GB同时通过 CPU 多核并行弥补专家计算的延迟。GLM-4-MoE 的 Glm4Moe-serve.yaml 结构完全相同只是匹配的是modeling_glm4_moe模块体系与Glm4MoeMoE/Glm4MoeMLP类。7.3 核心策略二主干计算留在 GPU注意力self_attn被替换为ktransformers.operators.balance_serve_attention.KSmallthinkerAttention对应实现见 balance_serve_attention.py全部在 CUDA 上执行线性层除共享专家门控shared_expert_gate外的 Linear 均替换为KTransformersLineardecode 用KLinearMarlinGPU 上的 Marlin 量化内核prefill 用KLinearTorch词嵌入embed_tokens显式保持在 CPUgenerate_device: cpu进一步压低显存RMSNorm / Dense MLP / RoPE均有对应的 KTransformers 优化算子KSmallthinkerRMSNorm、KSmallthinkerDenseMlpBlock、KSmallthinkerRotaryEmbedding相关实现可在 archive/ktransformers/operators/layernorm.py、mlp.py、RoPE.py 中找到。7.4 对应的原始模型定义优化规则引用的原始模块类如SmallthinkerMoeBlock、SmallthinkerRMSNorm、Glm4MoeMoE等定义在模型文件中SmallThinkerktransformers.models.modeling_smallthinker仓库对应 modeling_smallthinker.py架构配置见 configuration_smallthinker.pyGLM-4-MoEktransformers.models.modeling_glm4_moe对应 modeling_glm4_moe.py。7.5 关于 AMX INT8 精度文档提到的 GLM-4.5-Air AMX INT8 方案prefill ~309 TPS / decode ~16 TPS利用了 Intel 第四代及以上至强处理器内置的AMXAdvanced Matrix Extensions指令集在 CPU 侧以 INT8 量化精度执行专家矩阵乘从而在保持 ~220 GB DRAM 占用的前提下显著提升吞吐。若你的 CPU 支持 AMX 且需要压榨 CPU 专家计算性能可参考仓库内 doc/en/AMX.md 了解 AMX 内核的启用与调优方式该文档还覆盖了 AMX-BF16、AMX-INT8 与 Qwen3MoE 的配合用法。7.6 balance_serve 后端两个启动命令均指定--backend_type balance_serve这是 KTransformers 的多并发平衡服务后端负责请求调度、动态批处理与 KV 缓存管理是多路 CPU 单 GPU 场景下维持高吞吐的关键组件。其设计背景与使用说明见 doc/en/balance-serve.md。8. 常见问题与调优提示OOM内存不足先核对 DRAM 是否满足第 2 节表格要求SmallThinker-21B 至少 ~42 GBGLM-4.5-Air 至少 ~220 GB。若只有 SmallThinker 级别的内存不要尝试加载 110B 模型。显存超限GPU 显存需求随序列长度与max_batch_size增长可调小--cache_lens如 16384或--max_batch_size如 2降低峰值显存。性能达不到文档数值文档吞吐数据基于双路 CPU 消费级 GPU 的特定平台。CPU 核心数、内存带宽、是否启用 AMX/AVX 指令集、NVMe 读写速度都会直接影响专家卸载路径的吞吐。端口冲突两个模型使用不同端口10021 / 10110可同时部署端口可通过--port任意调整。模型名区分--model_name传入的是架构类名SmallThinkerForCausalLM/Glm4MoeForCausalLM而 API 请求体中的model字段是模型标识名SmallThinker-21BA3B-Instruct/GLM-4.5-Air两者含义不同不要混淆。9. 小结通过本指南你已完成 SmallThinker-21B 与 GLM-4-MoE 110B 在双路 CPU 单张消费级 GPU环境下的完整部署闭环模型下载 → KTransformers 安装 →balance_serve后端服务启动 → OpenAI 兼容 API 验证。更进一步通过研读 Smallthinker-serve.yaml 与 Glm4Moe-serve.yaml 可以理解 KTransformers 异构推理的核心机制——用match/replace规则把 MoE 专家在 decode 阶段卸载到 CPUKExpertsCPU把注意力与主干线性层保留在 GPU从而以 ~14 GB 显存承载百亿到千亿参数模型。这套优化规则机制不仅适用于本文两个模型也是 KTransformers 支持其他 MoE 模型如 DeepSeek-V3、Qwen3MoE 等见 optimize_rules 目录的通用范式读者可以举一反三地改造为自己的模型编写定制化规则。【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表