跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LLaMA Factory 从安装到推理的完整记录

使用 LLaMA Factory 微调大语言模型的实战笔记,涵盖 CUDA 安装、环境配置、数据集准备、命令行与 WebUI 训练、LoRA 合并与量化、推理引擎切换以及模型评估,记录了关键配置和常见问题。

微码行者发布于 2026/6/10更新于 2026/8/1728 浏览
LLaMA Factory 从安装到推理的完整记录

LLaMA Factory 是一个很方便的大模型微调平台,不需要写多少代码就能训练上百种模型。我最近用了一段时间,把从安装到推理的流程踩了一遍,这里记录一下。

环境准备

CUDA 安装

首先要确保 GPU 支持 CUDA,可以在 https://developer.nvidia.com/cuda-gpus 查一下。

检查 Linux 系统版本和 gcc:

uname -m && cat /etc/*release
# 输出类似 x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04

gcc --version
# gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

推荐装 CUDA 12.2,兼容性好一点。如果以前装过其他版本,先卸载干净:

# 如果 uninstaller 找不到,直接删目录也行
sudo rm -r /usr/local/cuda-12.1/
sudo apt clean && sudo apt autoclean

# 下载安装
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run

注意:安装时先别急着选 Driver,尤其是驱动版本和显卡不兼容的话容易出问题。装完用 nvcc -V 验证一下。

LLaMA Factory 安装

基础环境:Ubuntu 22.04, CUDA 12.x, Python 3.10, PyTorch 2.x。

conda create -n llama_factory python=3.10 -y
conda activate llama_factory

# 安装 PyTorch(根据 CUDA 版本调整)
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=11.8 -c pytorch -c nvidia
pip3 install torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 安装核心包
pip install llmtuner

# 克隆仓库
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

如果装依赖时冲突,可以试试 pip install --no-deps -e .,跳过依赖检查,或者自己维护一个纯净环境。

验证安装:

llamafactory-cli version

启动 Web 界面:

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

离线模型下载

训练时直接用本地路径就行,比如从魔搭社区拉一个 Qwen 模型:

git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git

Windows 上的坑

如果在 Windows 上用 QLoRA,需要单独装 bitsandbytes:

pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl

FlashAttention-2 同理,去 这里 找对应版本。

数据该怎么准备

LLaMA Factory 支持多种数据集格式,所有定义都在 data/dataset_info.json 里。你要用它训练自己的数据,就得先在这个文件里注册一下。

指令监督微调(SFT)

最常用的格式是 alpaca,包含 instruction、input、output 三个字段,还可以带 history 和 system。例如:

[
  {
    "instruction": "计算这些物品的总费用。",
    "input": "汽车 - $3000,衣服 - $100,书 - $20。",
    "output": "总费用为 $3000 + $100 + $20 = $3120。"
  }
]

多轮对话加上 history:

[
  {
    "instruction": "今天的天气怎么样?",
    "input": "",
    "output": "今天的天气不错,是晴天。",
    "history": [
      ["今天会下雨吗?", "今天不会下雨,是个好天气。"],
      ["今天适合出去玩吗?", "非常适合,空气质量很好。"]
    ]
  }
]

在 dataset_info.json 里这样描述:

"数据集名称": {
  "file_name": "data.json",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "system": "system",
    "history": "history"
  }
}

预训练

纯文本,一行一个 text 字段:

[
  {"text": "document1"},
  {"text": "document2"}
]

偏好数据集

用于 DPO/ORPO 训练,需要 chosen 和 rejected:

[
  {
    "instruction": "...",
    "input": "...",
    "chosen": "优质回答",
    "rejected": "劣质回答"
  }
]

KTO 数据集

加一个 kto_tag 字段,true/false 表示反馈好坏:

[
  {
    "instruction": "...",
    "input": "...",
    "output": "...",
    "kto_tag": "true"
  }
]

多模态数据

图像数据集,images 字段里写路径,注意和文本中 <image> 数量一致:

[
  {
    "instruction": "描述这张图片",
    "output": "...",
    "images": ["path/to/img.jpg"]
  }
]

视频和音频也类似,用 videos 和 audios 字段。

用 YAML 启动训练

SFT 训练既可以用 WebUI,也可以直接用命令行。我自己更习惯 YAML 配置,调参方便。

一个典型的 LoRA 微调配置 llama3_lora_sft.yaml:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
stage: sft
do_train: true
finetuning_type: lora
lora_target: all
dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
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
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

然后运行:

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

也可以直接覆盖参数:

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml \
  learning_rate=1e-5 \
  logging_steps=1

训练时要注意模型名、数据集、模板三者必须匹配,否则会报错。

常用参数说明:

名称描述
model_name_or_path模型名称或路径
stage训练阶段:rm, pt, sft, PPO, DPO, KTO, ORPO
do_traintrue 训练,false 评估
finetuning_typefreeze, lora, full
lora_targetLoRA 目标模块,默认 all
dataset逗号分隔多个数据集
template数据集模板,必须与模型对应
output_dir输出路径
logging_steps日志步数间隔
save_steps断点保存间隔
overwrite_output_dir是否覆盖输出目录
per_device_train_batch_size每卡 batch size
gradient_accumulation_steps梯度累积步数
max_grad_norm梯度裁剪阈值
learning_rate学习率
lr_scheduler_type学习率曲线:linear, cosine, polynomial, constant
num_train_epochs训练轮数
bf16是否使用 bf16
warmup_ratio预热比例
warmup_steps预热步数
push_to_hub是否推送模型到 Huggingface

合并与量化

LoRA 训练完会生成一个适配器权重,每次推理都要同时加载基座和适配器,很麻烦。可以把它俩合并成一个完整模型。

合并配置 merge_config.yaml:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false

执行合并:

llamafactory-cli export merge_config.yaml

一个容易踩的坑:合并时不要用量化模型或指定量化位数,否则会报错。 一定要用原始的未量化基座。

合并后如果想进一步压缩,可以用 GPTQ 等后训练量化。示例配置:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
export_dir: models/llama3_gptq
export_quantization_bit: 4
export_quantization_dataset: data/c4_demo.json
export_size: 2
export_device: cpu
export_legacy_format: false

量化需要提供校准数据集,位数越高保存的质量越好,但体积也越大。4-bit 是常见的折中选择。

如果用的 QLoRA 训练,导出时不需要再量化,直接用合并方式导出即可。

推理几种方式

推理分为交互式对话和批量处理,底层可以选 Huggingface 或 vLLM 引擎。

原始模型推理

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface  # 或 vllm

启动命令:

llamafactory-cli chat inference_config.yaml
# 或 Web 聊天
llamafactory-cli webchat inference_config.yaml

微调模型推理

需要额外指定适配器路径和微调类型:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora
infer_backend: huggingface

多模态模型

例如 llava:

llamafactory-cli webchat examples/inference/llava1_5.yaml

批量推理

用 vLLM 引擎处理整个数据集:

python scripts/vllm_infer.py --model_name_or_path path_to_merged_model --dataset alpaca_en_demo

还可以启动 API 服务:

API_PORT=8000 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml

调用示例:

from openai import OpenAI
client = OpenAI(api_key="0", base_url="http://0.0.0.0:8000/v1")
messages = [{"role": "user", "content": "Who are you?"}]
result = client.chat.completions.create(messages=messages, model="meta-llama/Meta-Llama-3-8B-Instruct")
print(result.choices[0].message)

评估模型效果

训练完了总得看看效果。LLaMA Factory 内置了 MMLU、C-Eval 等评测。

llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml

配置示例:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
finetuning_type: lora
task: mmlu_test
template: fewshot
lang: en
n_shot: 5
save_dir: saves/llama3-8b/lora/eval
batch_size: 4

还可以评估 NLG 指标(BLEU、ROUGE),配置:

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
stage: sft
do_predict: true
finetuning_type: lora
eval_dataset: identity,alpaca_en_demo
template: llama3
cutoff_len: 2048
max_samples: 50
overwrite_cache: true
preprocessing_num_workers: 16
output_dir: saves/llama3-8b/lora/predict
overwrite_output_dir: true
per_device_eval_batch_size: 1
predict_with_generate: true
ddp_timeout: 180000000

运行后会在输出目录生成预测结果和分数。

评估常用参数:

参数说明
taskmmlu_test, ceval_validation, cmmlu_test
task_dir评估数据集目录,默认 evaluation
batch_size每卡 batch size,默认 4
seed随机种子,默认 42
lang评估语言:en, zh
n_shotfew-shot 样例数,默认 5
save_dir结果保存路径
download_mode数据集下载策略,默认复用已有

整个流程走下来,LLaMA Factory 确实能省很多事,尤其是 WebUI 对新手很友好。不过命令行 YAML 更可控,适合批量实验。建议先从 WebUI 上手,再切到命令行。

目录

  1. 环境准备
  2. CUDA 安装
  3. 输出类似 x8664 DISTRIBID=Ubuntu DISTRIB_RELEASE=22.04
  4. gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
  5. 如果 uninstaller 找不到,直接删目录也行
  6. 下载安装
  7. LLaMA Factory 安装
  8. 安装 PyTorch(根据 CUDA 版本调整)
  9. 安装核心包
  10. 克隆仓库
  11. 离线模型下载
  12. Windows 上的坑
  13. 数据该怎么准备
  14. 指令监督微调(SFT)
  15. 预训练
  16. 偏好数据集
  17. KTO 数据集
  18. 多模态数据
  19. 用 YAML 启动训练
  20. 合并与量化
  21. 推理几种方式
  22. 原始模型推理
  23. 或 Web 聊天
  24. 微调模型推理
  25. 多模态模型
  26. 批量推理
  27. 评估模型效果
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python Flask 微服务开发实战:接口设计与数据库集成
  • MongoDB 详细安装与配置指南(Windows / Linux / macOS)
  • 从 Java 到 Kotlin 语法平滑迁移指南
  • artTemplate 模板语法中多余空格导致渲染为空的问题分析
  • Flask 实战:从环境搭建到鉴权中间件
  • C/C++ 命名规范:风格、规则与实践详解
  • Spring Cloud + Nacos 微服务从 0 到 1 搭建实战
  • Python 四大数据类型详解:字典、列表、集合与元组
  • AIGC 已步入落地阶段:2025 年六大技术趋势解析
  • 基于 LangChain 开发大模型 RAG 知识问答应用
  • RAG 优化方案与实践详解
  • 零成本搭建飞书机器人:用 Webhook 实现高效消息推送
  • 远程控制安全与软件测评:ToDesk、AnyDesk、向日葵对比
  • llama.cpp 核心特性、技术原理及部署实践
  • RAG 的基石:大语言模型文本向量化能力对比
  • llama.cpp 核心特性、技术原理与实用部署指南
  • AI 提示词实战:从设计原则到工程化落地
  • LLaMA2 模型架构深度解析
  • 进程实践:手动实现 Shell
  • OpenVLA 详解:基于 Prismatic VLM 与离散化动作预测的通用机器人策略

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online