LLM-Finetuning-Toolkit
一个 YAML 文件掌控 LLM 微调全流程的配置驱动工具包,支持消融实验追踪和内置 QA 测试框架
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一个 YAML 文件掌控 LLM 微调全流程的配置驱动工具包,支持消融实验追踪和内置 QA 测试框架
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:LLM Finetuning Toolkit 工作流演示动画
大模型微调是 AI 落地中最耗时的环节之一。一个典型的微调实验循环往往是这样的:数据准备 → 模型加载 → 参数配置 → 训练 → 推理验证 → 调整超参 → 重新训练。每改一次 prompt 模板、每换一种 LoRA rank,都要把整个流程重新跑一遍。更糟糕的是,当你在 Llama-2、Mistral-7B、Falcon 之间做对比实验时,光是管理多个 checkpoint 目录就足以让人崩溃。
Geogian.io 团队在内部使用这套流程处理大量垂直领域微调任务后,将经验沉淀为开源工具包 LLM Finetuning Toolkit(又称 llm-toolkit)。它的核心理念是:一个 YAML 文件掌控一切,从数据源、模型选择、LoRA 参数,到推理温度、测试指标,全部通过配置驱动,彻底省去反复修改代码的痛苦。
LLM Finetuning Toolkit 由 Georgian.io 团队开发和维护。Georgian 是一家专注于 AI 投资的成长型股权公司,同时也在内部积极构建开源 AI 基础设施。该项目于 2023 年 7 月开源,目前在 GitHub 拥有 871 Stars、106 Forks,收到 16 个 Open Issue,是目前最活跃的 LLMOps 开源工具包之一。
项目支持的主流模型包括:
支持的微调范式以 QLoRA(量化 LoRA)为主,兼容标准 LoRA、4-bit/8-bit 量化,以及 Flash Attention 2 加速。
项目采用 模块化分层架构,主要分为以下几个核心模块:
数据摄入由 llmtune/data/ 模块处理,支持四种数据格式:
load_dataset() 从 HF Hub 加载,如 yahma/alpaca-cleanedijson 流式解析大文件,避免内存溢出csv.DictReader 读取在数据加载完成后,系统会根据 YAML 中定义的 prompt 和 prompt_stub 模板,对数据进行自动化格式化。以 Alpaca 数据集为例:
data:
file_type: "huggingface"
path: "yahma/alpaca-cleaned"
prompt: "### Instruction: {instruction}\n### Input: {input}\n### Output:"
prompt_stub: "{output}"
系统会自动识别 prompt 模板中的占位符 {instruction}、{input},从数据集列名中提取对应字段,将数据重格式化为训练所需的指令-following 格式。
微调核心实现在 llmtune/finetune/ 模块,核心类为 LoRAFinetune。其工作流程如下:
模型加载:
AutoModelForCausalLM.from_pretrained(
hf_model_ckpt,
quantization_config=BitsAndBytesConfig(**bitsandbytes.model_dump()),
device_map="auto",
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
配合 prepare_model_for_kbit_training() 完成 4-bit 量化前的预处理。
LoRA 配置:通过 peft.LoraConfig 注入可训练适配器,默认 target modules 覆盖全部 Transformer 层:
target_modules = ["q_proj", "v_proj", "k_proj", "o_proj",
"up_proj", "down_proj", "gate_proj"]
训练器:使用 trl.SFTTrainer(来自 TRL 库),支持 max_seq_length=5000 的长上下文训练、PagedAdamW 优化器(减少显存碎片),以及梯度检查点(Gradient Checkpointing)以降低显存占用。
推理模块 llmtune/inference/lora.py 在微调完成后加载 PEFT adapter 权重,调用 merge_and_unload() 将 LoRA 权重合并回基础模型,然后执行批量推理。推理结果连同原始 prompt 和 ground truth 一并保存为 CSV 文件,供后续 QA 流程使用。
这是该项目区别于大多数微调工具的亮点:内置了一套 LLM 质量测试框架。
指标系统(llmtune/qa/qa_metrics.py):
summary_length:生成摘要与参考答案的长度差异jaccard_similarity:词汇重叠度rouge_score:ROUGE-1/2/L 指标semantic_similarity:基于 DistilBERT 嵌入的语义相似度json_validity:LangChain JsonValidityEvaluator 验证 JSON 格式测试套件(llmtune/qa/qa_tests.py):基于 LLMQaTest 抽象基类,支持注册自定义测试。内置 JSON 格式验证测试,通过 LangChain 的 JsonValidityEvaluator 判断模型输出是否为合法 JSON。
实验追踪:每个 YAML 配置通过 SHA-like hash 生成唯一目录名(experiment/[hash]/),包含以下产物:
dataset/:格式化后的训练/测试数据集(pickle 格式)model/:PEFT 格式的 LoRA 权重results/:推理结果 CSVqa/:测试结果 CSV项目使用 Rich 库提供实时进度展示,包括数据集下载进度、模型加载状态、训练 loss 曲线等,输出效果接近 tqdm + 日志 的体验。
这是该工具最强大的功能之一。在 YAML 配置中,任意参数均可指定为列表,工具包会自动做全组合网格搜索:
model:
hf_model_ckpt: ["NousResearch/Llama-2-7b-hf", "mistralai/Mistral-7B-v0.1"]
lora:
r: [16, 32, 64]
lora_dropout: [0.1, 0.25]
上述配置会自动生成 2 × 3 × 2 = 12 组实验,每组实验有独立的结果目录和 hash,用于系统性对比 LoRA rank、dropout 和基础模型对任务效果的影响。llmtune/utils/ablation_utils.py 负责从 Pydantic 模型中提取类型信息,验证配置合法性,并展开全组合。

图2:LLM Finetuning Toolkit 系统架构图
项目以 Python 包形式发布,支持 pipx(推荐)和 pip 两种安装方式:
pipx install llm-toolkit
# 或
pip install llm-toolkit
安装后获得 CLI 命令 llmtune,包含 generate config 和 run 两个子命令。
项目提供 Dockerfile,基于 nvidia/cuda:12.1.0-cudnn8-devel-ubuntu20.04,但未提供 docker-compose,也无 kubernetes 部署 Manifest。Dockerfile 为单阶段构建,直接 pip install -r requirements.txt,启动后需要手动挂载数据和配置。
快速部署评分:不支持(unsupported)——主要因为缺少 docker-compose 一键启动方案,且需要手动配置 GPU 访问。
| 层级 | 技术选型 |
|---|---|
| 基础框架 | Python 3.9-3.12、Poetry |
| 深度学习 | Transformers、PEFT、TRL、Accelerate |
| 量化 | bitsandbytes(4-bit / 8-bit NF4/INT8) |
| 数据处理 | datasets、pandas、ijson、py7zr |
| 配置验证 | Pydantic v2 |
| CLI | Typer、Rich |
| 实验追踪 | Weights & Biases(wandb) |
| LLM 集成 | LangChain(QA 评估用) |
| 测试 | pytest + pytest-cov |
作为纯命令行工具,用户需要熟悉 YAML 语法和微调基本概念。对于完全没有 NLP 经验的开发者,初始配置有一定学习成本。
项目目前仅支持文本 LLM 的微调,不支持视觉语言模型(VLM)、音频模型或多模态模型。随着 GPT-4V 等多模态模型的普及,这一局限将越发明显。
推理层使用朴素循环,未利用批处理优化或流式推理。对于大规模推理场景(如实时对话系统),可能需要替换为 vLLM 或 Text Generation Inference(TGI)等专用推理引擎。
YAML 配置虽然降低了重复代码,但当用户需要做一些配置系统未覆盖的操作(如自定义损失函数、添加正则化项)时,仍需修改源码。这对于有深度定制需求的高级用户不够友好。
LLM Finetuning Toolkit 在 LLMOps 工具生态中占据了一个明确的位置:填补了"简单微调脚本"和"企业级 ML 平台"之间的空白。
它不像 Axolotl 那样追求覆盖所有微调范式,也不像 LLaMA-Factory 那样强调 Web UI 可视化。LLM Finetuning Toolkit 的设计哲学是:专注配置驱动实验,用消融实验能力建立差异化优势。对于需要系统性地探索 prompt 模板 × 模型 × LoRA 超参组合的 AI 团队,这个工具包的 hash-based 实验追踪和全组合网格搜索是真正的效率倍增器。
项目由 Georgian.io 团队持续维护(最近更新:2026-06-07),License 为 Apache-2.0,可免费商用。随着开源社区对 LoRA 微调最佳实践的不断积累,该工具包的价值将持续放大。