ARTICLE DETAIL

资讯详情

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

KTransformers KT-Kernel 实战指南:用 CPU 高性能 MoE 内核实现 CPU-GPU 异构推理

KTransformers KT-Kernel 实战指南:用 CPU 高性能 MoE 内核实现 CPU-GPU 异构推理 KTransformers KT-Kernel 实战指南用 CPU 高性能 MoE 内核实现 CPU-GPU 异构推理【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformersKT-Kernel 是 KTransformers 项目中的高性能内核库提供面向 CPU 的高效 MoEMixture-of-Experts推理内核支持 AMX、AVX512、AVX2 等后端并通过 NUMA 感知的线程池最大化多路服务器 CPU 的内存带宽利用率。本文将基于仓库文档 kt-kernel/README_zh.md 与配套源码完整讲解 KT-Kernel 的安装与构建、权重量化、与 SGLang 集成的 CPU-GPU 异构部署含 Qwen3-30B-A3B 完整可复现示例、参数调优以及直接调用 Python API 的底层机制读完即可在双路 Xeon 服务器 单卡 4090 的常见配置上跑通“热专家在 GPU、冷专家在 CPU”的混合推理。一、KT-Kernel 是什么定位与当前支持状态KT-Kernel 的核心定位是为 MoE 模型的“冷” experts 提供 CPU 侧的高吞吐推理内核在 CPU-GPU 混合部署中将激活频率高的“热” experts 保留在 GPU 显存里激活频率低的“冷” experts 放到 CPU 内存中由 CPU 内核计算从而在显存受限的硬件上用有限的 GPU 资源服务超大 MoE 模型。当前仓库中 KT-Kernel 的支持状态硬件/格式支持状态说明带 AMX 的 Intel CPU已支持基于转换为 INT4/INT8 格式的权重AMXINT4/AMXINT8通用 CPUllamafile 后端已支持基于 GGUF 格式的权重LLAMAFILE带 BLIS 的 AMD CPU已支持INT8 的 prefill 和 decodeKimi-K2 原生 INT4RAWINT4已支持AVX512 CPU 上 CPU-GPU 共享 INT4 权重见 Kimi-K2-Thinking 原生推理教程特性层面KT-Kernel 提供CPU 友好的 MoE 内核针对 AMX/AVX512/AVX2 指令集优化的高吞吐 MoE 专家内核C 实现分别位于 operators/amx/、operators/avx2/ 与 operators/llamafile/ 目录AMX INT4/INT8 后端面向支持 AMX 的服务器提供 INT4/INT8 量化专家推理Llamafile CPU 后端基于 Llamafile 的 AVX2/AVX512 MoE 后端适用于通用 CPU 部署NUMA 感知执行为多路/多 NUMA 机器设计的线程池和内存布局实现见 cpu_backend/worker_pool.h。从源码结构看整个内核由三层组成Python 工厂层python/experts.py 中的KTMoEWrapper负责按method分派到具体后端基类层python/experts_base.py负责 pinned 缓冲区管理、GPU-CPU 异步传输和流水线调度C 扩展层kt_kernel_ext提供 CPUInfer 任务队列与 WorkerPool。运行时还会通过 python/_cpu_detect.py 按AMX AVX512_BF16 AVX512_VBMI AVX512_VNNI AVX512_BASE AVX2的等级自动选择最优内核变体并可通过环境变量KT_KERNEL_CPU_VARIANT手动覆盖、KT_KERNEL_DEBUG1打开调试输出若二进制要求比本机更高的指令集加载时会直接报错提示重新构建。二、安装先决条件与快速安装KT-Kernel 建议从源码安装本机使用或需要 AMD BLIS、ARM KML、自定义 CUDA 的场景。先初始化子模块并创建 conda 环境git submodule update --init --recursive conda create -n kt-kernel python3.11 -y conda activate kt-kernel快速安装推荐只需运行安装脚本它会自动检测 CPU 并优化性能./install.sh从 install.sh 的实现看该脚本自动完成的操作包括自动检测 CPU 能力AMX、AVX512_VNNI、AVX512_BF16、AVX512_VBMI其中 VBMI 是 FP8 MoE 内核所需安装系统依赖cmake、libhwloc-dev、pkg-config另会附带libnuma-dev为你的 CPU构建优化二进制默认CPUINFER_CPU_INSTRUCTNATIVE即-marchnative软件回退机制为不支持 VNNI/BF16 的 CPU 自动启用回退。支持分步安装./install.sh deps # 仅安装依赖 ./install.sh build # 构建并安装 kt-kernel不同后端的 CPU 要求后端最低 CPU 要求示例 CPU说明LLAMAFILEAVX2Intel Haswell (2013)、AMD Zen通用兼容性RAWINT4AVX512F AVX512BWIntel Skylake-X (2017)、Ice Lake、Cascade Lake支持 VNNI/BF16 软件回退AMXINT4/INT8AMXIntel Sapphire Rapids (2023)最佳性能需要 AMX 硬件软件回退支持AVX512 后端VNNI 回退使用 AVX512BW 指令性能约降为 1/2–1/3BF16 回退使用 AVX512F 指令性能约降为 1/5–1/10老的 AVX512 CPUSkylake-X、Cascade Lake可以运行 RAWINT4使用回退。以上回退倍数为 install.sh 帮助文本中标注的参考区间。可移植性说明默认构建针对你的特定 CPU 优化可能无法在不同/更老的 CPU 上运行。如需打包分发或跨机器部署请见下节“手动配置”。AMD BLIS 后端用户AMD 专用配置请参见仓库 issues 中的安装指南kvcache-ai/ktransformers issue #1601。三、手动配置进阶构建可移植二进制如需打包分发、跨机器部署或构建可移植二进制需要手动指定目标指令集# 通用分发版适用于 2017 的任何 AVX512 CPU export CPUINFER_CPU_INSTRUCTAVX512 export CPUINFER_ENABLE_AMXOFF ./install.sh build --manual # 最大兼容性适用于 2013 的任何 CPU export CPUINFER_CPU_INSTRUCTAVX2 export CPUINFER_ENABLE_AMXOFF ./install.sh build --manual # 仅限现代 CPUIce Lake、Zen 4 export CPUINFER_CPU_INSTRUCTFANCY export CPUINFER_ENABLE_AMXOFF ./install.sh build --manual可选覆盖 VNNI/BF16 检测# 强制启用/禁用 VNNI 和 BF16用于测试回退 export CPUINFER_ENABLE_AVX512_VNNIOFF export CPUINFER_ENABLE_AVX512_BF16OFF ./install.sh运行./install.sh --help可查看完整选项除上述外还包括CPUINFER_ENABLE_AVX512_VBMIFP8 MoE 所需默认自动检测、CPUINFER_ENABLE_CPPTRACE原生崩溃追踪、CPUINFER_PIP_NO_DEPS安装 wheel 时不改动镜像内 Python 依赖等。构建配置参考不使用 install.sh 时1. 安装系统依赖前置依赖cmake推荐conda install -y cmake、libhwloc-dev和pkg-config。2. 配置构建参数核心选项变量取值描述CPUINFER_CPU_INSTRUCTNATIVE,AVX512,AVX2,FANCY使用的 CPU 指令集CPUINFER_ENABLE_AMXON,OFF是否启用 Intel AMX 支持CPUINFER_BUILD_TYPERelease,Debug,RelWithDebInfo构建类型默认ReleaseCPUINFER_PARALLEL数值并行构建的 Job 数默认自动检测CPUINFER_VERBOSE0,1是否启用详细构建日志默认0指令集说明选项目标 CPU使用场景NATIVE仅限你的特定 CPU本地构建最佳性能默认AVX512Skylake-X、Ice Lake、Cascade Lake、Zen 4通用分发AVX2Haswell (2013) 及更新最大兼容性FANCYIce Lake、Zen 4具有完整 AVX512 扩展的现代 CPU配置示例# 本地使用 - 最高性能默认行为 export CPUINFER_CPU_INSTRUCTNATIVE export CPUINFER_ENABLE_AMXON # 或 OFF # 分发构建 - 适用于任何 AVX512 CPU export CPUINFER_CPU_INSTRUCTAVX512 export CPUINFER_ENABLE_AMXOFF # 最大兼容性 - 适用于 2013 年以来的 CPU export CPUINFER_CPU_INSTRUCTAVX2 export CPUINFER_ENABLE_AMXOFF # 调试构建 export CPUINFER_BUILD_TYPEDebug export CPUINFER_VERBOSE13. 构建并安装# 开发模式可编辑安装 pip install -e . # 普通安装 pip install .四、验证安装python -c from kt_kernel import KTMoEWrapper; print(✓ kt-kernel installed successfully)此外可以查看运行时实际加载的内核变体与版本导出自 python/init.pyimport kt_kernel print(kt_kernel.__cpu_variant__) # amx / avx512_bf16 / avx512_vnni / ... / avx2 print(kt_kernel.__version__)五、权重量化CPU 侧专家的两种准备方式AMX 后端AMXINT4/AMXINT8convert_cpu_weights.py对于 AMX 后端CPU 侧 experts 需要通过仓库提供的脚本 scripts/convert_cpu_weights.py 转换为适配 AMX 的 INT4/INT8 格式python scripts/convert_cpu_weights.py \ --input-path /path/to/model \ --input-type bf16 \ --output /path/to/output \ --quant-method int4完整命令行参数来自脚本 argparse 定义参数默认值说明--input-path,-i必填输入 safetensors 模型目录--input-type必填输入权重类型awq/fp8/fp16/bf16--output,-o必填输出目录--quant-methodint4输出量化方法int4、int8、awq、moe_int4、moe_int8moe_int8用于 AMD--cpuinfer-threads60CPU 推理线程数--threadpool-count2NUMA 子池数量--gpu关闭有 GPU 时使用 GPU 加速转换--no-merge-safetensor关闭保留逐层目录而不合并为 safetensor--resume-layer0从指定层恢复转换--save-backward-weights关闭额外保存 SFT 训练用的反向转置量化权重--profile关闭启用 torch profiler 并输出汇总表支持的输入格式为FP8、FP16、BF16以及 AWQ→ INT4/INT8。脚本要求模型目录包含config.json并从中读取num_experts、num_experts_per_tok、hidden_size、moe_intermediate_size等字段对 FP8 输入还会校验quantization_config.weight_block_size字段。从源码看量化过程复用了内核自身的加载路径OnlineQuantConverter为每一层创建KTMoEWrappercpu_saveTrue调用load_weights_from_tensors(gate_proj, up_proj, down_proj, ...)触发在线量化并落盘因此转换出的权重与推理内核的消费格式天然对齐。来自 scripts/README.md 的精度提醒直接从 FP8 权重量化到 INT4/INT8 可能造成明显的精度下降建议使用原始 BF16 模型作为 INT4/INT8 量化的源。LLAMAFILE 后端直接使用 GGUFLLAMAFILE 在 CPU 侧直接使用预量化的GGUF权重无需运行转换脚本。你只需从模型平台Hugging Face、ModelScope 等下载 GGUF 模型并在weight_path或 SGLang 的--kt-weight-path中指向该 GGUF 目录即可。KT-Kernel 支持多种 GGUF 量化格式如Q4_K_M、Q4_K、Q5_K等可根据延迟和效果需求选择。六、与 SGLang 集成CPU-GPU 异构推理KT-Kernel 可以单独通过 Python API 使用也可以集成到 SGLang 中用于生产部署。集成后的核心思想是将“热” experts 放在 GPU 上“冷” experts 放在 CPU 上达到资源利用和性价比的平衡。安装步骤1. 安装 SGLangKT-Kernel 需要 kvcache-ai 分支的 SGLangsglang-kt# 方式 A: 一键安装从 ktransformers 根目录同时安装 sglang kt-kernel ./install.sh # 方式 B: pip 安装 pip install sglang-kt # 方式 C: 从源码安装可编辑模式 git clone --recursive https://github.com/kvcache-ai/ktransformers.git cd ktransformers pip install -e third_party/sglang/python[all]重要请使用sglang-ktkvcache-ai 分支而非官方sglang包。如已安装官方版本请先卸载pip uninstall sglang -y2. 准备权重要进行异构推理需要同时准备 GPU 权重和 CPU 侧 experts 对应的权重具体格式取决于后端类型GPU 权重使用 SGLang 所需的模型权重例如 Hugging Face 上的原始模型目录或已量化好的 GPU 权重。CPU 权重AMX 后端AMXINT4/AMXINT8通过上文convert_cpu_weights.py量化为 INT4/INT8在 SGLang 集成中--kt-weight-path应指向该转换后的 CPU 权重目录。CPU 权重LLAMAFILE 后端直接下载 GGUF 权重将该 GGUF 目录作为--kt-weight-path。3. 启动 SGLang Server在通常的 SGLang 启动参数基础上增加如下 KT-Kernel 参数以启用 CPU-GPU 异构推理--kt-method后端类型AMXINT4、AMXINT8、RAWINT4或LLAMAFILE--kt-weight-path转换后的 CPU 权重路径--kt-cpuinferCPU 推理线程数建议设为物理核数--kt-threadpool-count线程池数量建议设为 NUMA 节点个数--kt-num-gpu-experts留在 GPU 上的 experts 数量--kt-max-deferred-experts-per-token每个 token 延迟到 CPU 的 experts 数量用于流水线执行示例python -m sglang.launch_server \ [your normal SGLang parameters...] \ --kt-method AMXINT8 \ --kt-weight-path /path/to/cpu-weights \ --kt-cpuinfer 64 \ --kt-threadpool-count 2 \ --kt-num-gpu-experts 32 \ --kt-max-deferred-experts-per-token 2完整示例Qwen3-30B-A3B该示例展示从下载权重到启动服务的完整流程分别演示AMX 后端和LLAMAFILE 后端两种方案。硬件配置GPUNVIDIA RTX 4090 24GBCPU2x Intel Xeon Gold 6454S共 64 个物理核128 线程2 个 NUMA 节点模型Qwen/Qwen3-30B-A3B如何检查系统配置# 查看 CPU 配置 lscpu | grep -E ^CPU\(s\)|Thread\(s\) per core|Socket\(s\)|NUMA node\(s\) # 期望输出示例: # CPU(s): 128 # Thread(s) per core: 2 # Socket(s): 2 # NUMA node(s): 2 # → 物理核数 CPU(s) / Thread(s) per core 128 / 2 64参数选型说明--kt-cpuinfer 64设为物理核数64而不是 128 线程--kt-threadpool-count 2检测到 2 个 NUMA 节点双路系统--kt-num-gpu-experts 32在 24GB 显存下对该模型大约可以放 32 个 experts 在 GPU 上具体取决于模型结构和实际内存占用--kt-max-deferred-experts-per-token 2启用流水线执行允许 CPU 处理下一批 token 的同时GPU 完成当前批次。方案 AAMX 后端AMXINT8适用于支持 AMX 指令集的 Intel CPU。步骤 1下载模型权重# 如未安装 huggingface-cli请先安装 pip install huggingface-hub # 从 Hugging Face 下载模型 huggingface-cli download Qwen/Qwen3-30B-A3B --local-dir /mnt/data/models/Qwen3-30B-A3B步骤 2转换为 CPU 权重AMXINT8python scripts/convert_cpu_weights.py \ --input-path /mnt/data/models/Qwen3-30B-A3B \ --input-type bf16 \ --output /mnt/data/models/Qwen3-30B-A3B-INT8 \ --quant-method int8步骤 3启动 SGLang 服务python -m sglang.launch_server \ --host 0.0.0.0 \ --port 8000 \ --model /mnt/data/models/Qwen3-30B-A3B \ --trust-remote-code \ --mem-fraction-static 0.92 \ --chunked-prefill-size 4096 \ --served-model-name Qwen3-30B-A3B \ --enable-mixed-chunk \ --kt-method AMXINT8 \ --kt-weight-path /mnt/data/models/Qwen3-30B-A3B-INT8 \ --kt-cpuinfer 64 \ --kt-threadpool-count 2 \ --kt-num-gpu-experts 32 \ --kt-max-deferred-experts-per-token 2方案 BLLAMAFILE 后端GGUF适用于通用 CPU无需 AMX 支持直接使用预量化的 GGUF 权重。步骤 1下载 GPU 权重原始模型pip install huggingface-hub huggingface-cli download Qwen/Qwen3-30B-A3B --local-dir /mnt/data/models/Qwen3-30B-A3B步骤 2下载 CPU 权重GGUF 格式huggingface-cli download Qwen/Qwen3-30B-A3B-GGUF Qwen3-30B-A3B-Q4_K_M.gguf \ --local-dir /mnt/data/models/Qwen3-30B-A3B-Q4_K_M步骤 3启动 SGLang 服务python -m sglang.launch_server \ --host 0.0.0.0 \ --port 8000 \ --model /mnt/data/models/Qwen3-30B-A3B \ --trust-remote-code \ --mem-fraction-static 0.92 \ --chunked-prefill-size 4096 \ --served-model-name Qwen3-30B-A3B \ --enable-mixed-chunk \ --kt-method LLAMAFILE \ --kt-weight-path /mnt/data/models/Qwen3-30B-A3B-Q4_K_M \ --kt-cpuinfer 64 \ --kt-threadpool-count 2 \ --kt-num-gpu-experts 32 \ --kt-max-deferred-experts-per-token 2七、KT-Kernel 参数详解与调优参数描述示例值--kt-methodCPU 推理后端类型AMXINT4、AMXINT8、RAWINT4或LLAMAFILE--kt-weight-path量化后的 CPU 权重路径/path/to/cpu-weights--kt-cpuinferCPU 推理线程数64根据 CPU 核心数调整--kt-threadpool-count并行执行的线程池数量2通常为 1–4--kt-num-gpu-experts保留在 GPU 上的 experts 数量32其余 experts 由 CPU 承担--kt-max-deferred-experts-per-token每个 token 延迟到 CPU 的 experts 数量用于流水线执行20 关闭1–4 推荐--kt-gpu-prefill-token-thresholdPrefill 策略的 token 数量阈值仅 RAWINT4~400kt-method按 CPU 能力和权重格式选择AMXINT4在 AMX CPU 上 INT4 量化时性能最高但可能对某些模型有较大精度影响例如 Qwen3-30B-A3BAMXINT8在 AMX CPU 上提供更高精度的 INT8 量化方案RAWINT4CPU 和 GPU 共享原生 INT4 权重目前仅支持 Kimi-K2-Thinking 模型详见 Kimi-K2-Thinking 原生推理教程LLAMAFILE基于 AVX2/AVX512 的通用 CPU 后端性能较 AMX 略低但适用范围更广。从 python/experts.py 的INFERENCE_METHODS可以看到KTMoEWrapper实际支持的推理 method 远不止上述四种还包括FP8、BF16、FP8_PERCHANNEL、GPTQ_INT4、SYCL_GPTQ_INT4、MXFP4、NVFP4、MXFP8、MOE_INT4、MOE_INT8等——它们分别映射到AMXMoEWrapper、NativeMoEWrapper、LlamafileMoEWrapper、GeneralMoEWrapper四个后端实现为不同量化生态原生 FP8/BF16、GPTQ、MX 系列、通用 INT4/INT8提供统一的工厂入口。kt-cpuinfer务必设为物理核数设置为物理核数不是线程数查看物理核数lscpu | grep -E ^CPU\(s\)|Thread\(s\) per core计算方式物理核数 CPU(s) / Thread(s) per core。例若 CPU(s)128 且 Thread(s) per core2则物理核数64重要不要设置为超线程总数否则会降低性能。从源码看kt-cpuinfer与kt-threadpool-count共同决定 C 侧 WorkerPool 的配置_MoEBase._get_cpu_infer 会创建WorkerPoolConfig把cpuinfer_threads均分到threadpool_count个子池余数分给前几个子池每个子池绑定一个 NUMA 节点subpool_numa_map可通过numa_nodes参数显式指定。底层WorkerPool/InNumaPool实现见 cpu_backend/worker_pool.h。kt-threadpool-count设为 NUMA 节点数查看 NUMA 数lscpu | grep NUMA node(s)或numactl --hardware | grep available注意NUMA 节点数不等同于物理 CPU 数量——它表示内存域可能在单颗 CPU 内被拆分也可能跨多颗 CPU请以lscpu输出的 NUMA 节点数为准常见配置单路 1–2双路 2–4正确设置有助于充分利用跨 NUMA 域的内存带宽。kt-num-gpu-experts 与流水线参数kt-num-gpu-experts根据 GPU 显存和实际性能测试决定。GPU 上的 experts 越多 → 延迟越低但显存占用越高可能 OOM。仓库中还提供了 generate_gpu_experts_masks 工具函数给定每层专家的激活频率表自动挑选全局激活频率最高的 N 个专家放到 GPU可作为专家放置策略的参考实现。kt-max-deferred-experts-per-token用于开启 CPU-GPU 流水线。0完全同步执行简单但延迟较高1–4推荐范围一部分 experts 延迟到 CPU在延迟和质量之间取得较好平衡需按模型调参5–7可获得更低延迟但存在明显精度下降风险请谨慎使用。其实现机制在 experts_base.py 中清晰可见select_deferred_experts按 topk 得分选出得分最高的num_experts_per_tok - max_deferred个专家作为“即时”任务先提交其余专家作为“延迟”任务通过submit_with_cuda_stream挂到 CUDA 流上后发后至KExpertsCPUBuffer以buffer_depth2的双缓冲 pinned 内存轮换槽位layer_idx % 2保证当前层计算时上一层的延迟任务结果可被安全写回。kt-gpu-prefill-token-threshold仅 RAWINT4控制原生 INT4 推理的 prefill 策略。token 数≤ 阈值使用 CPUGPU 混合 prefill无需额外显存但随着 token 数量增加性能会缓慢下降token 数 阈值使用分层 GPU prefill长序列性能更好但需要约 9GB 额外显存仅在使用--kt-method RAWINT4时生效目前仅支持 Kimi-K2-Thinking 模型。八、直接使用 Python API不集成 SGLang 时也可以直接通过 Python API 单独使用 KT-Kernelfrom kt_kernel import KTMoEWrapper # 初始化 MoE 包装器 wrapper KTMoEWrapper( layer_idx0, num_experts8, num_experts_per_tok2, hidden_size4096, moe_intermediate_size14336, num_gpu_experts2, cpuinfer_threads32, threadpool_count2, weight_path/path/to/weights, chunked_prefill_size512, methodAMXINT4 # 选项: AMXINT4, AMXINT8, LLAMAFILE ) # 从磁盘加载权重预先量化好 wrapper.load_weights(physical_to_logical_map) # 或者从张量加载权重在线量化 wrapper.load_weights_from_tensors(gate_proj, up_proj, down_proj, physical_to_logical_map) # 执行推理 output wrapper.forward(hidden_states, topk_ids, topk_weights, cuda_stream) # 或使用异步 API 获取更好的流水线效果 wrapper.submit_forward(hidden_states, topk_ids, topk_weights, cuda_stream) # ... 做一些其他工作例如在 GPU 上跑该层的注意力/热专家... output wrapper.sync_forward(hidden_states, cuda_stream)几个要点说明KTMoEWrapper是工厂类构造时校验modeinference/sft与method的匹配关系见 experts.pyinference 模式下实际通过gpu_experts_mask布尔张量mask[i]True表示第 i 个专家在 GPU描述专家分布num_gpu_experts为 SFT 模式参数。load_weights(physical_to_logical_map)从磁盘加载预量化权重load_weights_from_tensors(gate_proj, up_proj, down_proj, ...)接受 BF16/FP16 张量并在线量化gate_proj/up_proj形状为[num_experts, intermediate_size, hidden_size]down_proj为[num_experts, hidden_size, intermediate_size]。forward等价于submit_forwardsync_forward的同步组合异步拆分让你在提交 CPU 任务后可以继续做 GPU 侧计算是流水线优化的关键接口。chunked_prefill_size同时是 C 侧 MoE 输出缓冲区的容量上限experts_base.py 中的_check_qlen_fits_cpp_buffers会在输入 token 数超过它时抛出明确的ValueError提示调大--chunked-prefill-size或减小 prefill 分块——这可以避免 C 输出缓冲区被越界写坏这类难以定位的内存错误。高级选项# 使用更多高级选项初始化 wrapper KTMoEWrapper( layer_idx0, num_experts8, num_experts_per_tok2, hidden_size4096, moe_intermediate_size14336, num_gpu_experts2, cpuinfer_threads32, threadpool_count2, weight_path/path/to/weights, chunked_prefill_size512, methodAMXINT4, cpu_saveFalse, # 加载后是否将权重常驻 CPU 内存 max_deferred_experts_per_token0 # 每个 token 延迟的 experts 数量用于流水线 ) # 为特定 batch size 预分配缓冲区提升性能 KTMoEWrapper.set_capture_batch_sizes([1, 2, 4, 8, 16]) # 查看当前捕获的 batch size batch_sizes KTMoEWrapper.get_capture_batch_sizes() # 清理缓冲区缓存以释放内存 KTMoEWrapper.clear_buffer_cache()从源码看set_capture_batch_sizes会让 KExpertsCPUBuffer 为列出的 batch size 常驻缓存一套 pinned 输入/输出缓冲区含buffer_depth2的即时/延迟双槽避免推理中反复分配 pinned 内存clear_buffer_cache则释放这些缓存。九、错误排查找不到 CUDA-- Looking for a CUDA compiler - NOTFOUND CMake Error at CMakeLists.txt:389 (message): KTRANSFORMERS_USE_CUDAON but CUDA compiler not found请确认已安装 CUDA Toolkit 且nvcc在系统 PATH 中该报错对应 CMakeLists.txt 中KTRANSFORMERS_USE_CUDAON但找不到CUDA compiler的分支。可以尝试显式指定编译器后重新安装export CMAKE_ARGS-D CMAKE_CUDA_COMPILER$(which nvcc) pip install .找不到 hwloc在 Debian 系发行版上可以直接sudo apt install libhwloc-dev或从 hwloc 官方源码构建hwloc 是 Open MPI 项目下的库到其官方发布页下载对应源码包后按./configure make sudo make install标准流程编译安装。hwloc 用于 NUMA 拓扑探测是--kt-threadpool-count/numa_nodes子池绑定的底层依赖缺失时多 NUMA 绑核能力会不可用。十、提交前必读提交信息应符合 Conventional Commits 规范见 conventionalcommits.org。在提交前请先格式化代码cmake -B build cd build make format你可能需要一个较新的 clang-format至少 18在 conda 环境中可以conda install -c conda-forge clang-format18 rm -rf build并且建议安装 black 用于 Python 代码格式化conda install black结语KT-Kernel 把“大 MoE 模型放不下单卡显存”的问题转化为“GPU 管热专家、CPU 管冷专家”的工程问题AMX/AVX512/AVX2 多档后端 GGUF/INT4/INT8 多档权重格式 NUMA 感知线程池 延迟专家流水线四者共同构成了可复制到 4090 双路 Xeon 这类高性价比硬件组合上的异构推理方案。按照本文的安装、量化、启动三步流程操作即可复现文档中的 Qwen3-30B-A3B 示例更深入的权重量化选项与低显存模式可继续参考 scripts/README.md内核级实现则可分别深入 operators/ 下的 amx、avx2、llamafile 目录与 cpu_backend/ 的任务队列/线程池代码。【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表