LLaMA-Factory微调实战:从环境到API部署

LLaMA-Factory微调实战:从环境到API部署

在大模型应用落地的今天,如何快速将一个通用语言模型适配到特定领域,已成为开发者最关心的问题之一。全参数微调成本高、门槛高,而像LoRA这样的高效微调技术又常因配置复杂让人望而却步。有没有一种方式,能让我们像搭积木一样完成模型定制?

LLaMA-Factory正是为此而生——它不只是一套工具,更像是一个“大模型工厂”,把数据准备、训练、评估、合并、部署等环节全部打通。无论你是想给模型换个身份人设,还是让它学会写广告文案、医疗问答或法律咨询,都可以通过这个框架快速实现。

本文将以Meta-Llama-3-8B-Instruct为例,带你走完一次完整的LoRA微调旅程:从环境搭建开始,到自定义数据集构建、模型训练与评估,再到最终以OpenAI兼容接口对外提供服务。整个过程无需深入源码,命令行+YAML即可掌控全局。


环境准备:让一切跑起来的基础

任何微调任务都建立在稳定可靠的运行环境之上。我们本次实验基于以下配置:

  • 操作系统:Ubuntu 22.04 LTS
  • GPU:NVIDIA RTX 4090(24GB显存)
  • CUDA 版本:12.1
  • Python:3.10.13
  • PyTorch:2.4.0+cu121
  • Transformers:4.45.2
  • LLaMA-Factory:0.9.1.dev0(主干最新版)

单卡RTX 4090足以支持Llama-3-8B级别的QLoRA微调。若使用纯LoRA,16GB以上显存即可流畅运行。多卡用户需确保NCCL通信正常,避免分布式训练时报错。

⚠️ 提示:QLoRA对显存要求更低,但首次加载时仍可能触发OOM,建议设置--export_device cpu进行模型合并。

安装与验证:第一步不能出错

首先克隆项目并安装依赖:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]" -i https://mirrors.aliyun.com/pypi/simple/ 

这里的-e表示开发模式安装,便于后续调试;[torch,metrics]会自动安装PyTorch及相关评估库(如jieba、rouge-chinese)。如果遇到依赖冲突,可先跳过依赖检查:

pip install --no-deps -e . 

安装完成后,用两条命令确认环境就绪:

llamafactory-cli version 

输出应显示当前版本信息和项目主页链接。接着检查CUDA是否可用:

import torch print(torch.cuda.is_available()) # 应返回 True print(torch.cuda.get_device_name(0)) # 显示 GPU 型号 

同时验证Transformers版本:

import transformers print(transformers.__version__) # 推荐 ≥ 4.37 

一切正常后,就可以进入下一步了。


模型下载:获取基础骨架

我们选用Meta官方发布的Meta-Llama-3-8B-Instruct作为基座模型。由于该模型受访问限制,请提前在Hugging FaceModelScope申请权限。

推荐使用Git方式克隆:

# ModelScope 方式 git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git # 或 Hugging Face(需登录) git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 

将模型路径记为/path/to/Meta-Llama-3-8B-Instruct,后续所有操作都将引用此路径作为--model_name_or_path


初步测试:看看原模型有多强

在动手微调前,先了解原始模型的能力边界非常重要。这不仅能验证环境正确性,也能为后续效果对比提供基准。

LLaMA-Factory提供了两种交互方式:命令行聊天和WebUI界面。

启动命令行对话:

llamafactory-cli chat \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --template llama3 

其中--template llama3是关键参数。不同模型有不同的Prompt模板,例如ChatGLM用chatglm3,Qwen用qwen。模板错误会导致指令无法识别甚至无限生成。

你也可以创建YAML配置文件复用参数:

# examples/inference/llama3.yaml model_name_or_path: /path/to/Meta-Llama-3-8B-Instruct template: llama3 

之后只需运行:

llamafactory-cli webchat examples/inference/llama3.yaml 

即可启动Gradio网页界面,默认地址为http://localhost:7860


数据集构建:教会模型新技能

要让模型具备特定能力,必须提供相应的训练数据。LLaMA-Factory支持JSON/JSONL格式,并通过data/dataset_info.json注册数据集。

示例一:修改助手身份(identity)

系统内置了一个简单的身份替换数据集data/identity.json,内容如下:

[ { "instruction": "你的名字是什么?", "input": "", "output": "我叫 {{name}},由 {{author}} 开发。" } ] 

我们可以用sed命令批量替换变量:

sed -i 's/{{name}}/PonyBot/g' data/identity.json sed -i 's/{{author}}/LLaMA Factory/g' data/identity.json 

更新后的输出变为:“我叫 PonyBot,由 LLaMA Factory 开发。”

示例二:广告文案生成(AdGen)

我们再引入一个更实用的任务——根据商品描述生成广告语。使用清华大学开源的AdvertiseGen数据集:

wget https://cloud.tsinghua.edu.cn/seafhttp/files/1746ec39-a653-4c81-9197-55383e942282/AdvertiseGen.tar.gz tar -zxvf AdvertiseGen.tar.gz mv AdvertiseGen LLaMA-Factory/data/ 

然后在data/dataset_info.json中注册:

"adgen_local": { "file_name": "AdvertiseGen/train.json", "columns": { "prompt": "content", "response": "summary" } } 

现在就可以在训练脚本中通过adgen_local引用该数据集。


LoRA微调:低成本定制专属模型

相比全参数微调动辄上百GB显存消耗,LoRA仅训练低秩矩阵,显存占用可降至原来的1/10,且训练速度更快。

执行以下命令启动SFT训练:

export NCCL_P2P_DISABLE="1" export NCCL_IB_DISABLE="1" llamafactory-cli train \ --stage sft \ --do_train \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --dataset alpaca_gpt4_zh,identity,adgen_local \ --dataset_dir ./data \ --template llama3 \ --finetuning_type lora \ --output_dir ./saves/LLaMA3-8B/lora/sft \ --overwrite_cache \ --overwrite_output_dir \ --cutoff_len 1024 \ --preprocessing_num_workers 16 \ --per_device_train_batch_size 2 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 8 \ --lr_scheduler_type cosine \ --logging_steps 50 \ --warmup_steps 20 \ --save_steps 100 \ --eval_steps 50 \ --evaluation_strategy steps \ --load_best_model_at_end \ --learning_rate 5e-5 \ --num_train_epochs 5.0 \ --max_samples 1000 \ --val_size 0.1 \ --plot_loss \ --fp16 

几个关键点值得注意:

  • --finetuning_type lora启用LoRA;
  • --dataset支持多个数据集联合训练;
  • --fp16开启半精度,提升效率;
  • --plot_loss会自动生成loss.png,直观查看收敛情况。

在RTX 4090上,整个训练过程约8–15分钟。结束后可在输出目录看到:

./saves/LLaMA3-8B/lora/sft/ ├── adapter_config.json ├── adapter_model.bin ← LoRA权重核心文件 ├── training_args.bin └── trainer_state.json 

动态推理:即时验证微调效果

训练完成后,无需合并模型即可直接测试效果。LLaMA-Factory支持动态加载LoRA权重。

启动命令行对话:

llamafactory-cli chat \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --template llama3 \ --finetuning_type lora 

你会发现模型已经能正确回答“你是谁?”并生成更专业的广告文案。

也可以用YAML简化调用:

# examples/inference/llama3_lora_sft.yaml model_name_or_path: /path/to/Meta-Llama-3-8B-Instruct adapter_name_or_path: ./saves/LLaMA3-8B/lora/sft template: llama3 finetuning_type: lora 

然后运行:

llamafactory-cli webchat examples/inference/llama3_lora_sft.yaml 

即可打开带图形界面的聊天窗口。


效果评估:用数据说话

主观体验之外,我们也需要量化指标来衡量性能变化。

先安装评估依赖:

pip install jieba rouge-chinese nltk 

然后运行预测任务:

llamafactory-cli train \ --stage sft \ --do_predict \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --eval_dataset adgen_local \ --dataset_dir ./data \ --template llama3 \ --finetuning_type lora \ --output_dir ./saves/LLaMA3-8B/lora/predict \ --cutoff_len 1024 \ --per_device_eval_batch_size 1 \ --max_samples 20 \ --predict_with_generate 

结果保存在generated_predictions.jsonlpredict_results.json中,包含以下指标:

指标含义
BLEU-4四元语法匹配度(越高越好)
rouge-1, rouge-2单词/双词召回率
rouge-l最长公共子序列相似度
predict_samples_per_second推理吞吐量

这些数值可以帮助判断是否出现过拟合或欠拟合。


模型合并:打造独立可部署模型

虽然可以动态加载LoRA,但在生产环境中通常希望得到一个完整模型文件。

使用export命令完成合并:

llamafactory-cli export \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --template llama3 \ --finetuning_type lora \ --export_dir ./merged-model-path \ --export_size 2 \ --export_device cpu \ --export_legacy_format false 

注意事项:

  • 不要在量化模型上执行合并;
  • 使用--export_device cpu防止GPU显存溢出;
  • --export_size 2表示将模型切分为两个bin文件,适合跨设备部署。

导出后的模型完全符合Hugging Face标准,可用于vLLM、TGI等高性能推理框架。


WebUI可视化面板:零代码操作利器

对于不想敲命令的用户,LLaMA-Factory还提供了一站式WebUI:

CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=1 GRADIO_SERVER_PORT=7860 llamafactory-cli webui 

访问http://localhost:7860即可进入图形界面,功能涵盖:

  • Training:拖拽式配置训练参数,实时查看loss曲线;
  • Evaluation:选择MMLU、C-Eval等基准一键评测;
  • Inference:多轮对话测试,支持流式输出;
  • Export:点击按钮完成模型合并导出。

非常适合教学演示或团队协作场景。


API服务部署:接入下游应用

最终目标往往是将模型集成进业务系统。LLaMA-Factory支持OpenAI协议API服务,轻松对接LangChain、AutoGPT等Agent框架。

方式一:原生后端API

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api \ --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \ --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft \ --template llama3 \ --finetuning_type lora 

启动后可用标准OpenAI客户端调用:

from openai import OpenAI client = OpenAI( api_key="0", # 占位符 base_url="http://localhost:8000/v1" ) messages = [{"role": "user", "content": "写一段智能手表的广告语"}] response = client.chat.completions.create(model="default", messages=messages) print(response.choices[0].message.content) 

方式二:vLLM加速(推荐生产使用)

若已合并模型,可切换至vLLM后端获得更高并发:

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api \ --model_name_or_path ./merged-model-path \ --template llama3 \ --infer_backend vllm \ --vllm_enforce_eager 

vLLM在批处理和连续提示生成方面表现优异,适合高负载场景。


进阶评测:检验知识保留能力

微调后模型是否“遗忘”了原有知识?这是常见问题。LLaMA-Factory内建支持主流评测基准:

llamafactory-cli eval \ --model_name_or_path ./merged-model-path \ --template llama3 \ --task mmlu_test \ --lang en \ --n_shot 5 \ --batch_size 1 

输出示例:

Average: 63.64 STEM: 50.83 Social Sciences: 76.31 Humanities: 56.63 Other: 73.31 

若分数显著下降,说明存在“灾难性遗忘”,建议降低学习率或增加通用数据比例。

对于Base模型(非Instruct版),需改用fewshot模板:

llamafactory-cli eval \ --model_name_or_path meta-llama/Meta-Llama-3-8B \ --template fewshot \ --task mmlu \ --split validation \ --lang en \ --n_shot 5 \ --batch_size 1 

这种高度集成的设计思路,正推动大模型定制从“专家专属”走向“人人可用”。LLaMA-Factory不仅降低了技术门槛,更重要的是建立了标准化的工作流范式——从数据到部署,每一步都有迹可循。未来随着QLoRA、RAG、Agent等技术的深度融合,这类一体化框架将成为AI工程化落地的核心基础设施。

Read more

office里面你所在的区域不支持Copilot的解决方法

最近了一年office 365羊毛,想试用copilot的时候遇到这个问题: 梯子开了美国全局tun也没用,之后怀疑是缓存问题,因为一开始没开梯子导致加载了中国区的js文件,所以没法用 用微软官方网站上的方法试了下清缓存: 删除以下文件夹的内容 %LOCALAPPDATA%\Microsoft\Office\16.0\Wef\ 之后保持美国全局tun重启word即可: 如果还是不行,可以尝试office 365的网页版,也能用Copilot 参考:https://ZEEKLOG.fjh1997.top/posts/40329.html

By Ne0inhk

如何下载、安装whisper、faster_whisper?

1、模型种类 whisper:有很多模型:tiny、base、small、medium、large等 faster_whisper:模型种类与whisper类似 2、模型安装 特别注意:whisper和faster_whisper中的模型,有两种获得方式。 ①在网址:https://github.com/openai/whisper上有提示:pip install -U openai-whisper,下载结果为  .pt文件。在网址:https://github.com/SYSTRAN/faster-whisper上有提示:pip install faster-whisper,下载结果为.pt文件 ②在网址:https://huggingface.co/,进行搜索 whisper,根据提示,可以下载 large-v3和large-v3-turbo,

By Ne0inhk
AI 智能编码工具:重塑开发效率的革命,从 GitHub Copilot 到国产新秀的全面解析

AI 智能编码工具:重塑开发效率的革命,从 GitHub Copilot 到国产新秀的全面解析

目录 引言 一、主流智能编码工具深度测评:从功能到实战 1. GitHub Copilot:AI 编码的 “开山鼻祖” 核心特性与实战代码 优缺点总结 2. Baidu Comate:文心大模型加持的 “国产之光” 核心特性与实战代码 优缺点总结 3. 通义灵码:阿里云的 “企业级编码助手” 核心特性与实战代码 优缺点总结 引言 作为一名拥有 8 年开发经验的程序员,我曾无数次在深夜对着屏幕反复调试重复代码,也因记不清框架语法而频繁切换浏览器查询文档。直到 2021 年 GitHub Copilot 问世,我才第一次感受到:AI 不仅能辅助编码,更能彻底改变开发模式。如今,智能编码工具已从 “尝鲜选项” 变为 “必备工具”,它们像经验丰富的结对编程伙伴,能精准补全代码、生成测试用例、

By Ne0inhk

TRAE vs Qoder vs Cursor vs GitHub Copilot:谁才是真正的“AI 工程师”?

引言:工具选择 = 成本 + 效率 + 风险 的综合权衡 2026 年,AI 编程工具已从“玩具”走向“生产主力”。但面对 TRAE、Qoder、Cursor、GitHub Copilot 等选项,开发者不仅要问: * 它能写 Rust 吗?支持中文需求吗? * 更要问:一个月多少钱?团队用得起吗?代码安全有保障吗? 本文将从 五大核心维度 深度剖析四大主流 AI IDE: 1. 核心理念与自主性 2. 多语言与跨生态支持能力 3. 工程化与交付闭环能力 4. 中文本地化与业务适配 5. 收费模式、定价策略与企业成本 帮你做出技术可行、经济合理、风险可控的决策。 一、核心理念:

By Ne0inhk