KTransformers × LLaMA-Factory 用户指南:2–4 张 RTX 4090 微调 671B 级 MoE 大模型
2026/9/13 18:33:36 网站建设 项目流程

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/s455.37 token/s530.38 token/s
[14B-DeepSeekV2-Lite] GPU 显存32.12 GB9.64 GB6.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 风格化对话语料,目标是提升风格一致性与可辨识度。基座模型与微调模型的输出对比显示,微调后的模型能更稳定地保持目标语气与称呼方式,验证了风格迁移微调的有效性。

基准评测:翻译腔 + 医疗问答

评测使用两个数据集:

  1. Translational-Style-ChatLLM:要求夸张的"西化翻译腔",属于清晰、风格化的定制化任务;
  2. AfriMed-QA(ACL 2025):面向非洲医疗场景的垂直领域数据集,含选择题与简答题子任务,适合垂直微调评估。

下表为 LoRA 微调前后各指标的对比:

Translational-Style 数据集BLEU-1BLEU-2BLEU-3BLEU-4ROUGE-1ROUGE-2ROUGE-L
V2-Lite(无 LoRA)20.668.334.542.8922.714.5219.19
KT-LoRA 微调后 V2-Lite35.4122.4415.4211.1842.0318.3833.10
V3 基座(无 LoRA)8.493.341.620.9615.912.5510.07
KT-LoRA 微调后 V337.0223.7016.2111.4943.4318.9634.54
AfriMed-QA(简答题)BLEU-1BLEU-2BLEU-3BLEU-4ROUGE-1ROUGE-2ROUGE-L
V2-Lite(无 LoRA)13.5811.129.107.2322.487.8111.73
KT-LoRA 微调后 V2-Lite35.9027.6322.9919.1535.2517.5028.44
V3 基座(无 LoRA)12.7510.278.055.9920.335.6510.11
KT-LoRA 微调后 V342.4234.1228.9524.5441.9722.3733.28
AfriMed-QA(选择题)Accuracy
V2-Lite(无 LoRA)0.0645
KT-LoRA 微调后 V2-Lite0.4812
V3 基座(无 LoRA)0.5833
KT-LoRA 微调后 V30.7930

可以看到,即便在超大 MoE 模型上,KTransformers 支撑的微调也能快速达到较强的任务表现。

三、环境搭建:同时装好 LLaMA-Factory 与 KTransformers

安装时同时部署LLaMA-FactoryKTransformers环境。为简化 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: 8192

KT 相关参数说明:

  • 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支持AMXInt8AMXBF16llamafile(默认)三种 CPU 内核路径;
  • 完整的 SFT 规则文件同时覆盖了embed_tokens(放 CPU)、RotaryEmbeddingLinear(走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_losssave_stepslogging_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 × qlentoken/s = tokens_per_step / step_time

测试设置GAS=16qlen=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-671B203 s≈ 8192 / 203 ≈40.35 token/s
DeepSeek-V2-Lite-14B36 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 GB30 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询