KTransformers × LLaMA-Factory 用户指南:2–4 张 RTX 4090 微调 671B 级 MoE 大模型
【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers
本文面向资源受限的研究者与开发者,讲解 KTransformers 与 LLaMA-Factory 集成后的 LoRA 微调完整工作流:从环境搭建,到使用 KTransformers 异构(GPU+CPU)后端微调 DeepSeek-V3-671B 等超大规模 MoE 模型,再到加载 base + LoRA adapter 进行对话、批量推理与指标评测。读完本文后,你可以直接复制文中的命令与 YAML 配置,在 2–4 张 RTX 4090 + 大内存 CPU 的机器上跑通"训练 → 加载 adapter → 推理评测"的全链路。
一、方案定位:为什么是 LLaMA-Factory + KTransformers
从 DeepSeek-V3/R1 到 Qwen3-MoE、Kimi-K2,每一代开源大模型都在性能和规模上持续跃升,但数十亿甚至上千亿参数让"在有限资源下微调超大模型"成为普遍痛点。本文的方案是:用 2–4 张 RTX 4090 加一台高内存 CPU 机器,微调 DeepSeek-671B 这一量级的 MoE 模型。
分工如下:
- LLaMA-Factory是统一的编排/配置层,负责数据处理、训练调度、LoRA 注入和推理接口;
- KTransformers作为可插拔的高性能后端,在同一份训练配置下接管 Attention / MoE 等核心算子,实现GPU + CPU 异构协同(Attention 与门控走 GPU,Expert 前向/反向下沉到 CPU 侧内核)。
三个后端的 LoRA 微调对比
在 LLaMA-Factory 内,官方对比了HuggingFace、Unsloth、KTransformers三种后端的 LoRA 微调能力。KTransformers 是超大 MoE 模型(如 671B)在 4090 级别硬件上唯一可行的方案,并且在小规模 MoE 模型(如 14B)上也有更高的吞吐与更低的显存占用:
| 场景(LoRA BF16 + NekoQA-10K 风格化对话数据) | HuggingFace 后端 | Unsloth 后端 | KTransformers 后端 |
|---|---|---|---|
| [14B-DeepSeekV2-Lite] LoRA 微调吞吐 | 303.58 token/s | 455.37 token/s | 530.38 token/s |
| [14B-DeepSeekV2-Lite] GPU 显存 | 32.12 GB | 9.64 GB | 6.08 GB |
| [671B-DeepSeekV3] LoRA 微调吞吐 | 显存需求过大,无法运行 | 不支持 | 40.35 token/s |
| [671B-DeepSeekV3] GPU 显存(多卡合计) | 理论 1400 GB † | 不支持 | 70 GB† |
†1400 GB是 FP16 全参数常驻的理论占用(不可运行);70 GB是 KT 策略(Attention 驻 GPU + 分层 MoE offload)下的实测峰值。
该方案的验证任务覆盖三类代表性场景:风格化对话、西化翻译腔调、医疗问答,结论是个性化适配可以在数小时内完成。
二、微调效果示例(原文实测结果)
风格化对话(CatGirl 语气)
数据集采用 NekoQA-10K 风格化对话语料,目标是提升风格一致性与可辨识度。基座模型与微调模型的输出对比显示,微调后的模型能更稳定地保持目标语气与称呼方式,验证了风格迁移微调的有效性。
基准评测:翻译腔 + 医疗问答
评测使用两个数据集:
- Translational-Style-ChatLLM:要求夸张的"西化翻译腔",属于清晰、风格化的定制化任务;
- AfriMed-QA(ACL 2025):面向非洲医疗场景的垂直领域数据集,含选择题与简答题子任务,适合垂直微调评估。
下表为 LoRA 微调前后各指标的对比:
| Translational-Style 数据集 | BLEU-1 | BLEU-2 | BLEU-3 | BLEU-4 | ROUGE-1 | ROUGE-2 | ROUGE-L |
|---|---|---|---|---|---|---|---|
| V2-Lite(无 LoRA) | 20.66 | 8.33 | 4.54 | 2.89 | 22.71 | 4.52 | 19.19 |
| KT-LoRA 微调后 V2-Lite | 35.41 | 22.44 | 15.42 | 11.18 | 42.03 | 18.38 | 33.10 |
| V3 基座(无 LoRA) | 8.49 | 3.34 | 1.62 | 0.96 | 15.91 | 2.55 | 10.07 |
| KT-LoRA 微调后 V3 | 37.02 | 23.70 | 16.21 | 11.49 | 43.43 | 18.96 | 34.54 |
| AfriMed-QA(简答题) | BLEU-1 | BLEU-2 | BLEU-3 | BLEU-4 | ROUGE-1 | ROUGE-2 | ROUGE-L |
|---|---|---|---|---|---|---|---|
| V2-Lite(无 LoRA) | 13.58 | 11.12 | 9.10 | 7.23 | 22.48 | 7.81 | 11.73 |
| KT-LoRA 微调后 V2-Lite | 35.90 | 27.63 | 22.99 | 19.15 | 35.25 | 17.50 | 28.44 |
| V3 基座(无 LoRA) | 12.75 | 10.27 | 8.05 | 5.99 | 20.33 | 5.65 | 10.11 |
| KT-LoRA 微调后 V3 | 42.42 | 34.12 | 28.95 | 24.54 | 41.97 | 22.37 | 33.28 |
| AfriMed-QA(选择题) | Accuracy |
|---|---|
| V2-Lite(无 LoRA) | 0.0645 |
| KT-LoRA 微调后 V2-Lite | 0.4812 |
| V3 基座(无 LoRA) | 0.5833 |
| KT-LoRA 微调后 V3 | 0.7930 |
可以看到,即便在超大 MoE 模型上,KTransformers 支撑的微调也能快速达到较强的任务表现。
三、环境搭建:同时装好 LLaMA-Factory 与 KTransformers
安装时同时部署LLaMA-Factory与KTransformers环境。为简化 KTransformers 的安装流程,本指南使用 PyPI 包以避免本地编译。注意:请确保本机Python 版本、Torch 版本与 CUDA 版本和所装包兼容。
# 1. 创建 conda 环境 conda create -n Kllama python=3.12 # 可选版本:[3.11, 3.12, 3.13] conda install -y -c conda-forge libstdcxx-ng gcc_impl_linux-64 conda install -y -c nvidia/label/cuda-11.8.0 cuda-runtime # 2. 安装 LLaMA-Factory 环境 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . # 3. 安装 KTransformers SFT 包([sft] 附加依赖组) pip install "ktransformers[sft]" # 4. 安装 flash-attention:按 Python 与 Torch 版本从 flash-attention 官方 releases 下载对应预编译包 pip install flash-attn --no-build-isolation # abi=True/False 可通过以下方式确认: # import torch # print(torch._C._GLIBCXX_USE_CXX11_ABI) # 5. (可选)如需使用 flash_infer,否则默认走 triton # 克隆 kvcache-ai 组织的 custom_flashinfer 仓库后执行: # pip install custom_flashinfer/使用要点:在 LLaMA-Factory 的 YAML 中设置use_kt: true并指定kt_optimize_rule文件,即可让 KTransformers 接管核心计算。下文三个核心功能各给出一份典型配置。
四、核心功能 1:用 KTransformers 后端微调超大 MoE 模型
4.1 训练命令
USE_KT=1 ACCELERATE_USE_KT=true accelerate launch \ --config_file examples/ktransformers/accelerate/fsdp2_kt_bf16.yaml \ -m llamafactory.cli train examples/ktransformers/train_lora/deepseek_v3_lora_sft_kt.yaml注意:必须提供BF16权重的模型。DeepSeek-V3-671B 官方默认发布 FP8 版本,需先按 DeepSeek-V3 仓库提供的fp8_cast_bf16.py脚本将权重转换为 BF16 再使用。
4.2 训练配置 YAML(完整版,可直接参考)
### model model_name_or_path: opensourcerelease/DeepSeek-V3-bf16 trust_remote_code: true ### method stage: sft do_train: true finetuning_type: lora lora_rank: 8 lora_target: all ### dataset dataset: identity template: deepseek cutoff_len: 2048 max_samples: 100000 overwrite_cache: true preprocessing_num_workers: 16 dataloader_num_workers: 4 ### output output_dir: saves/Kllama_deepseekV3 logging_steps: 10 save_steps: 500 plot_loss: true overwrite_output_dir: true save_only_model: false report_to: none # choices: [none, wandb, tensorboard, swanlab, mlflow] ### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 3.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 resume_from_checkpoint: null ### ktransformers use_kt: true # use KTransformers as LoRA sft backend kt_optimize_rule: examples/kt_optimize_rules/DeepSeek-V3-Chat-sft-amx-multi-gpu.yaml cpu_infer: 32 chunk_size: 8192KT 相关参数说明:
use_kt: true:启用 KTransformers 作为 LoRA SFT 后端;kt_optimize_rule:指定算子放置(placement)策略文件,决定每个模块跑在 GPU/CPU 的哪个算子上;cpu_infer: 32:CPU 侧推理/计算使用的线程数;chunk_size: 8192:GPU/CPU 分层传输的块大小。
4.3kt_optimize_rule:放置策略文件如何命名与解析
kt_optimize_rule是放置策略的入口。仓库内提供了一整套规则文件,例如 SFT 专用规则 DeepSeek-V3-Chat-sft-amx-multi-gpu.yaml。文件命名约定(*为通配符):
| 命名模式 | 含义 |
|---|---|
DeepSeek-V2-Lite-Chat-*/DeepSeek-V3-Chat-* | 目标模型变体 |
*-sft-* | 微调策略;其余为推理策略 |
*-amx-* | CPU 侧使用 AMX 加速;否则使用llamafile内核 |
*-multi-gpu-X* | X 卡模型并行(省略 X → 默认 2 卡) |
例如DeepSeek-V3-Chat-sft-amx-multi-gpu.yaml= "V3-Chat 的微调 + AMX 加速 + 2 卡模型并行"。
从源码结构看,规则文件是一组match/replace条目:用正则匹配 HF 模块路径(如^model\.layers\..*\.mlp\.experts$),再把对应模块替换为 KT 的定制算子并注入设备参数。以仓库中的 SFT 规则文件为例,专家模块的替换条目为:
- match: name: "^model\.layers\..*\.mlp\.experts$" replace: class: ktransformers.operators.experts.KTransformersExperts # 带专家并行的定制 MoE Kernel kwargs: prefill_device: "cpu" prefill_op: "KExpertsTorch" generate_device: "cpu" generate_op: "KSFTExpertsCPU" out_device: "cuda" backend: "AMXInt8" # 可选 "AMXBF16" 或 "llamafile"(默认) recursive: False # 不递归注入该模块的子模块要点:
KTransformersExperts/KSFTExpertsCPU等 SFT 专家算子定义在 experts.py 中,prefill_device/generate_device分离了前向填充与生成两种路径的设备,out_device指定结果回传位置;backend支持AMXInt8、AMXBF16、llamafile(默认)三种 CPU 内核路径;- 完整的 SFT 规则文件同时覆盖了
embed_tokens(放 CPU)、RotaryEmbedding、Linear(走KLinearTorch)、MoE/gate/self_attn(按层号切分到cuda:0/cuda:1两卡)等模块,实现"Attention/门控在 GPU、Expert 计算在 CPU"的异构布局,这正是 671B 模型 70 GB 显存峰值的来源。
硬件建议:在可用情况下优先启用AMX 加速(用lscpu | grep amx检测),AMX 支持 BF16/INT8。LoRA 权重注入与 SFT 相关的 Python 侧逻辑位于 sft/lora.py 与 sft/ 目录,当前仓库将 SFT 内核进一步演进到了 kt-kernel/python/sft/ 下的独立包(含 backend、checkpoint、autograd、amx 等模块),可结合 开发者技术笔记 深入阅读。
4.4 训练产物
训练输出写入output_dir(本例为saves/Kllama_deepseekV3),包含safetensors 格式的 adapter 权重以及供后续加载使用的 adapter 元数据。训练过程中的 loss 曲线与保存行为由plot_loss、save_steps、logging_steps等字段控制。
五、核心功能 2:与微调后的模型对话(base + LoRA adapter)
执行命令:
llamafactory-cli chat examples/inference/qwen3_lora_sft.yaml即使用 KT 训练出的 safetensors adapter 做推理:
model_name_or_path: opensourcerelease/DeepSeek-V3-bf16 adapter_name_or_path: saves/Kllama_deepseekV3 template: deepseek infer_backend: ktransformers # choices: [huggingface, vllm, sglang, ktransformers] trust_remote_code: true use_kt: true # use KTransformers as LoRA sft backend to inference kt_optimize_rule: examples/kt_optimize_rules/DeepSeek-V3-Chat-sft-amx-multi-gpu.yaml cpu_infer: 32 chunk_size: 8192注意infer_backend: ktransformers与训练侧的use_kt: true配套,kt_optimize_rule/cpu_infer/chunk_size建议与训练时保持一致,保证放置策略连贯。
GGUF adapter 也受支持:adapter_name_or_path对 safetensors 填目录,对 GGUF 填文件路径即可。
加载阶段,LLaMA-Factory 会把 HF 层名映射到 KT 的命名体系,日志中会出现形如Loaded adapter weight: XXX -> XXX的逐层加载记录,可用于核对 adapter 是否正确落位:
六、核心功能 3:批量推理 + 指标评测(base + LoRA adapter)
执行命令:
API_PORT=8000 llamafactory-cli api examples/inference/qwen3_lora_sft.yaml即通过 KT 微调后的 adapter 对外提供 API 服务,其余 API 的用法与 LLaMA-Factory 原生方式一致,可直接对接批量评测脚本(如上文第二节的 BLEU/ROUGE/Accuracy 评测流程)。API 模式使用与对话模式相同的配置文件:
model_name_or_path: opensourcerelease/DeepSeek-V3-bf16 adapter_name_or_path: saves/Kllama_deepseekV3 template: deepseek infer_backend: ktransformers # choices: [huggingface, vllm, sglang, ktransformers] trust_remote_code: true use_kt: true # use KTransformers as LoRA sft backend to inference kt_optimize_rule: examples/kt_optimize_rules/DeepSeek-V3-Chat-sft-amx-multi-gpu.yaml cpu_infer: 32 chunk_size: 8192七、KT 微调速度:用户视角的性能与资源占用
7.1 端到端吞吐
定义
step_time:一个完整优化步(张量搬运 + Attention + MoE + 其他计算)的墙钟时间;tokens_per_step = GAS × qlen;token/s = tokens_per_step / step_time。
测试设置:GAS=16、qlen=512(即tokens_per_step = 8192);LoRA 超参r=8, alpha=32, dropout=0.1;启用AMX;GPU 为 RTX 4090,CPU 为 Intel Xeon Platinum 8488C。
实测结果
| 模型 | step_time | 吞吐 |
|---|---|---|
| DeepSeek-V3-671B | 203 s | ≈ 8192 / 203 ≈40.35 token/s |
| DeepSeek-V2-Lite-14B | 36 s | ≈ 8192 / 36 ≈227.6 token/s |
7.2 GPU/CPU 内存占用
| 模型(结构) | GPU 显存 | CPU 内存 |
|---|---|---|
| DeepSeek-V3(671B,61 层含 58 层 MoE) | 约70 GB(多卡合计) | 约1.2–1.3 TB |
| DeepSeek-V2-Lite(14B,27 层含 26 层 MoE) | 约5.5 GB | 约30 GB |
这组数字说明该方案的适用前提:GPU 显存只需承载 Attention 与少量常驻权重,绝大部分 Expert 权重驻留 CPU 内存,因此硬件选择上"高内存 CPU + 多张中端 GPU"比"单张高端 GPU"更划算;同时 CPU 内存至少需要能装下模型全量权重的余量。
八、小结
将KTransformers LoRA 微调集成进LLaMA-Factory后,本方案给出了在 MoE LLM 上做高效训练与部署的完整路径:KT 带来面向 DeepSeek / Qwen / Kimi 系列、带 AMX 加速内核的异构优化,LoRA 让 GPU 显存占用降到极低水平,LLaMA-Factory 则提供友好的统一接口。三者结合(类似 Unsloth 的加速思路)意味着即便数十亿到上千亿参数的模型,也能在消费级硬件上完成微调与低延迟部署——显存节省、速度提升、易用性三者兼得。建议在你下一个 MoE 项目上尝试 LLaMA-Factory + KTransformers 组合;若想继续深入训练侧实现细节,可阅读配套的 Cookbook 与 开发者技术笔记。
【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考