1 LLaMa-Factory 项目简介
LLaMA-Factory 是一个面向大语言模型(LLM)的高效训练与微调框架,专为简化 LLaMA 系列以及各类开源大模型的训练流程而设计。它以“开箱即用、灵活高效”为核心理念,提供从数据准备、参数高效微调(PEFT)、训练配置管理到模型部署的一站式解决方案。
LLaMA-Factory 支持多种主流模型架构(如 LLaMA、Qwen、Gemma、Mistral 等),并集成了 LoRA、QLoRA、AdaLoRA、Prompt Tuning 等多种轻量化训练技术,使开发者能够以极低成本在单卡或多卡环境下完成高质量模型微调。
该框架提供直观易用的命令行工具与 Web UI,适配从科研实验到生产级应用的多场景需求。通过结构化的配置体系、完善的训练监控以及可扩展的数据加载管线,LLaMA-Factory 让大模型训练变得更加透明、可控且易于维护。
2 项目目录结构
| |
3 命令行接口
在使用如下命令安装环境依赖时,setup.py 会注册命令行工具
在 setup.py 中,get_console_scripts 这个函数将定义控制台入口 llamafactory-cli = llamafactory.cli:main。
llamafactory.cli:main 是 LLaMA-Factory/src/llamafactory/cli.py 下的一个入口函数。
4 前后端交互逻辑
LLaMa-Factory 使用 gradio 搭建项目 webui 和后端,gradio 是一个开源 Python 包,允许快速为机器学习模型、API 或任何任意 Python 函数构建一个演示或 Web 应用程序。然后,可以使用 Gradio 内置的共享功能,在几秒钟内分享演示或 Web 应用程序的链接。无需 JavaScript、CSS 或 Web 托管经验!
LLaMa-Factory 在 /LLaMA-Factory/src/llamafactory/webui/interface.py 文件下创建 UI 界面。create_ui 定义了 web 界面的设置。
| |
5 主要功能模块事件绑定
组件定义和事件绑定在这个 LLaMA-Factory/src/llamafactory/webui/components 文件夹下,以训练模块为例,简要讲解事件绑定方法。
LLaMA-Factory/src/llamafactory/webui/components/train.py 内部的 create_train_tab 函数创建了训练模块的组件内容。最核心的几个按钮是 Preview,Save arguments,Load arguments,Start,Abort。
这几个按钮分别绑定了对应的函数,只要点击按钮,就执行绑定的函数。
6 训练按钮事件介绍
6.1 训练命令发起
下面以 Start 按钮为例,讲解项目核心代码的调用机制。“Start”按钮绑定了函数 engine.runner.run_train ,该函数在 /LLaMA-Factory/src/llamafactory/webui/runner.py 代码里面。
self._launch 也在该文件内部,定义如下:
| |
_launch 首先处理一些参数,提取出相应的模型参数后,调用
| |
完成子进程的创建,开始训练。
6.2 llamafactory-cli train
llamafactory-cli 绑定的是 /LLaMA-Factory/src/llamafactory/cli.py 的 main 函数,
接着调用 launcher.launch() 拉起服务,然后在 /LLaMA-Factory/src/llamafactory/launcher.py 下的 launch() 中进入 train 分支。
run_exp() 位于 /LLaMA-Factory/src/train.py 文件内。
而 run_exp() 来自于 /LLaMA-Factory/src/llamafactory/train/tuner.py
| |
run_exp() 检查是否使用 ray (一个开源的分布式机器学习加速引擎),最终都会调用 _training_function 函数。
| |
接着会根据不同的训练类型进入不同的入口函数。
6.3 以 run_sft 为例的代码逻辑
/LLaMA-Factory/src/llamafactory/train 目录下包含多个训练模式的调用代码,_training_function 会调用该目录下的代码进行训练。run_sft 调用的是 /LLaMA-Factory/src/llamafactory/train/sft/workflow.py。
| |
- load_tokenizer: 加载 tokenizer 和 processor
- get_template_and_fix_tokenizer: 根据配置选择合适的对话模板(Chat Template),并修正 Tokenizer 与模板之间的特殊 Token 匹配关系,使模型训练与推理时的对话格式正确。
- get_dataset: 获取数据集
- load_model: 加载模型权重
6.4 训练模型
加载好模型之后,调用 /LLaMA-Factory/src/llamafactory/train/sft/trainer.py 的训练函数训练模型
| |