LLaMA-LoRA-Tuner
通过 Gradio Web UI 傻瓜式微调 LLaMA/GPT-J 等大模型,LoRA + 8-b
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
通过 Gradio Web UI 傻瓜式微调 LLaMA/GPT-J 等大模型,LoRA + 8-b
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023年初,大模型社区最火的技术不是 GPT-4,而是"LoRA"——一种让普通人也能在消费级显卡上微调大模型的低秩适配方法。tloen/alpaca-lora 横空出世,但它的代码是纯命令行的,参数密密麻麻,配置文件改来改去。
这时候,一位开发者(zetavg)站了出来:能不能做一个图形界面,把这些命令行参数变成滑块和按钮?于是 LLaMA-LoRA Tuner 诞生了——它把微调大模型的过程,从"改代码改配置"变成了"拖拖拽拽点按钮"。
LLaMA-LoRA Tuner 是一款基于 Gradio 的大模型微调与推理可视化工具,核心功能是让用户通过 Web 界面完成 LoRA 微调(Fine-tuning)和对话推理(Inference)两件事。
用户上传自己的数据集,选择基础模型(如 LLaMA-7B、GPT-J-6B、Dolly 等),设置学习率、epoch 数、LoRA r 值等超参数,点击"训练",工具自动调用 PEFT 库和 Transformers 库完成微调。训练过程实时展示 loss 曲线,支持 WandB 日志记录,还支持断点续训。微调完成后,直接在同一个 Web UI 里切换到推理模式,加载 LoRA 适配器,输入 prompt,看模型输出。不需要写一行代码,不需要配置 API。

图1:模型评估界面,支持在多个 LoRA 模型之间快速切换对比

图2:训练配置界面,超参数一目了然
项目代码结构清晰,分为两层:
llama_lora/
├── lib/
│ ├── finetune.py # 核心训练逻辑(~17KB)
│ ├── inference.py # 推理生成逻辑(含流式输出)
│ ├── models.py # 模型加载封装
│ └── get_device.py # GPU 检测
├── ui/
│ ├── finetune_ui.py # 训练 UI Tab
│ ├── inference_ui.py # 推理 UI Tab
│ └── main_page.py # Gradio 主页面组装
└── config.py # 全局配置(单例模式)
| 层级 | 技术 | 作用 |
|---|---|---|
| 大模型框架 | HuggingFace Transformers | 加载 LLaMA/GPT-J 等模型 |
| LoRA 实现 | PEFT (LoraConfig + get_peft_model) | 注入低秩适配器 |
| 量化加速 | bitsandbytes (8-bit) | 减少显存占用 |
| 数据处理 | datasets (HuggingFace) | 加载/预处理训练数据 |
| Web UI | Gradio | 可视化交互界面 |
| 实验跟踪 | Weights & Biases (可选) | 训练曲线可视化 |
| 云端部署 | SkyPilot | 多云 GPU 集群一键部署 |
训练流程分为四步:量化加载、LoRA 注入、Trainer 配置、训练保存:
from peft import LoraConfig, get_peft_model, prepare_model_for_int8_training
# 1. 量化加载基础模型(8-bit,省显存)
model = AutoModelForCausalLM.from_pretrained(
base_model,
load_in_8bit=True, # bitsandbytes 8-bit 量化
device_map="auto",
trust_remote_code=True,
)
model = prepare_model_for_int8_training(model)
# 2. 注入 LoRA 适配器
lora_config = LoraConfig(
r=8, lora_alpha=16, # 秩和缩放因子
target_modules=["q_proj", "v_proj"], # 只微调 attention 层
lora_dropout=0.05, bias="none", task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
# 3. 开始训练
trainer = Trainer(model=model, args=training_args, ...)
trainer.train()
# 4. 保存 adapter
model.save_pretrained(output_dir)
支持流式输出(token-by-token)和批量生成两种模式。流式输出基于 oobabooga/text-generation-webui 的 Iteratorize 技巧实现,通过 stopping_criteria 回调机制,每次生成一个 token 就 yield 出来,前端实时展示。
推理还内置了对不同模型的特殊处理——例如 dolly 模型有额外的特殊 token(### End 等),跳过后会破坏 prompter 提取逻辑,代码对此做了专门兼容。
工具支持多种训练数据格式,覆盖主流场景:
| 格式 | 说明 | 示例 |
|---|---|---|
| Alpaca JSON | instruction/input/output 三字段 | Stanford Alpaca 官方数据集 |
| Alpaca JSONL | 每行一个 JSON | 实时数据追加 |
| Seed Tasks JSONL | Stanford Alpaca 格式 | 任务型数据 |
| OpenAI Fine-tune | prompt/completion 对 | OpenAI 官方格式 |
| 纯文本粘贴 | UI 内直接粘贴 | 快速测试 |
数据通过 prompt template 机制动态拼接,支持 alpaca、vigogne、user_and_ai 等多种模板,确保微调数据格式与推理时输入格式一致。
打开项目提供的 LLaMA_LoRA.ipynb,点击"运行全部",授权 Google Drive 挂载,约5分钟后 Gradio URL 自动生成,直接点击访问。零配置,免费 GPU(受限),5分钟上手。缺点是长时间任务会被 Colab 掐断,GPU 性能也受限。
通过 SkyPilot 在 Lambda Cloud / AWS / GCP / Azure 上租用 GPU 实例,一行命令部署:sky launch -c llm-tuner llm-tuner.yaml。优点是按需计费,A10G GPU (~0.6$/h),自动挂载 S3/GCS 持久化存储。缺点是需要云账号配置。
conda create -y python=3.8 -n llm-tuner
conda activate llm-tuner
pip install -r requirements.lock.txt
python app.py --data_dir='./data' --base_model='decapoda-research/llama-7b-hf' --share
注意:无 Dockerfile,本地部署需手动处理 CUDA 依赖和 bitsandbytes 安装。requirements.txt 中包含 git+https 的 PEFT/Transformers 依赖,版本可能随时间漂移。
| 模型规模 | 量化方式 | 最低显存 | 推荐显存 |
|---|---|---|---|
| 7B (LLaMA) | 8-bit (bitsandbytes) | 6-8 GB | 14 GB+ |
| 7B (LLaMA) | FP16 全精度 | 14 GB | 24 GB |
| 13B (LLaMA) | 8-bit | 12 GB | 24 GB |
| 6B (GPT-J) | 8-bit | 6 GB | 12 GB |
纯 CPU 推理理论上可行(transformers 支持),但速度极慢(预计 5-10 tokens/s),基本无实用价值。
亮点:
局限与争议:
LLaMA-LoRA Tuner 诞生于 2023 年 LoRA 民主化浪潮中,它的出现代表了那一波开源 AI 社区的核心精神:降低门槛,让更多人参与。
虽然项目本身已停止活跃维护,但它展示的"Gradio + PEFT + 量化"的组合范式,已被后续大量项目(如 Axolotl、unsloth、Fireworks.ai 等)继承和发扬。它的 star 增长曲线几乎与 2023 年初 LoRA 论文引发的技术热潮同步——先快速上涨,之后随着更成熟的工具出现,增长趋于平稳。
对于今天想要学习 LoRA 微调的开发者来说,这个项目依然是一个极好的学习起点:代码量适中(34个 Python 文件),架构清晰,核心逻辑都在 lib/finetune.py 的 500 行代码中。
lib/finetune.py + lib/inference.py