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

Llama3 中文模型实战微调与部署指南

基于 RockyLinux8 环境,演示如何使用 LLaMA-Factory 对 Llama3-8B 中文模型进行 LoRA 微调。流程涵盖数据集准备、训练脚本配置、模型合并导出以及基于 llama.cpp 和 Phidata 的 RAG 应用部署。详细说明了参数设置、模板配置及常见问题处理,适合具备基础 Linux 操作经验的开发者参考。

星云发布于 2025/2/6更新于 2026/10/25104 浏览
Llama3 中文模型实战微调与部署指南

Llama3 中文模型实战微调与部署指南

本教程基于 RockyLinux8 版本,适用于单机 RTX 4090Ti (24G 显存) 环境。训练过程中 GPU 显存占用约为 23G。通过本文档,您可以完整掌握从模型下载、数据准备、LoRA 微调、模型合并到 RAG 应用部署的全流程。

1. 环境准备与模型下载

1.1 硬件与软件要求

  • 操作系统: RockyLinux 8 或 CentOS 7+
  • GPU: NVIDIA GeForce RTX 4090 (建议 24G 显存)
  • CUDA: 建议使用 CUDA 11.8 或更高版本
  • Python: Python 3.10 及以上
  • 依赖库: PyTorch, Transformers, Accelerate 等

1.2 下载预训练模型

下载训练好的 Llama3-8B 版本中文模型。请将模型文件放置于指定目录:

/data/dataset/model/llama3/8b-chinese-chat

确保目录结构包含 config.json, tokenizer.json 及权重文件。若使用 HuggingFace 下载,请配置好环境变量以加速访问。

2. 使用 LLaMA-Factory 进行微调

LLaMA-Factory 是一个高效的大模型微调框架,支持多种训练策略(如 SFT, LoRA)。

2.1 安装 LLaMA-Factory

创建项目目录并克隆仓库。注意版本兼容性,推荐使用 v0.6.1 或更新稳定版。

# 建立存放目录
mkdir -p /data/dataset/project
cd /data/dataset/project

# 克隆仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory-0.6.1

# 安装依赖
pip install -r requirements.txt

2.2 准备训练数据

进入数据目录,添加您的指令微调数据。数据格式通常为 JSON 列表,包含 instruction, input, output 字段。

cd /data/dataset/project/LLaMA-Factory-0.6.1/data
# 例如创建 stock.json

数据示例如下:

[
  {"instruction": "请给出以下区域板块包含的个股名称和代码,使用;隔开",    
       

"input"
:
"贵州"
,
"output"
:
"贵州茅台 600519;"
}
,
{
"instruction"
:
"请给出以下区域板块包含的个股名称和代码,使用;隔开"
,
"input"
:
"北京"
,
"output"
:
"京东方 A000725;"
}
]

计算文件的 SHA1 值用于校验:

sha1sum stock.json
# 输出示例:073db05fbf903c494e0826615194fef77c24fa1f

2.3 配置数据集信息

编辑 dataset_info.json 文件,注册新数据集:

vim /data/dataset/project/LLaMA-Factory-0.6.1/data/dataset_info.json

新增如下配置:

"stock_zh": {
  "file_name": "stock.json",
  "file_sha1": "073db05fbf903c494e0826615194fef77c24fa1f"
}

2.4 配置模型模板

为 Llama3 添加专用对话模板,确保 tokenizer 正确分词。编辑 template.py:

vim /data/dataset/project/LLaMA-Factory-0.6.1/src/llmtuner/data/template.py

注册 llama3 模板:

_register_template(
    name="llama3",
    format_user=StringFormatter(
        slots=[
            (
                "<|start_header_id|>user<|end_header_id|>\n\n{{content}}<|eot_id|>"
                "<|start_header_id|>assistant<|end_header_id|>\n\n"
            )
        ]
    ),
    format_system=StringFormatter(
        slots=[{"bos_token"}, "<|start_header_id|>system<|end_header_id|>\n\n{{content}}<|eot_id|>"]
    ),
    format_observation=StringFormatter(
        slots=[
            (
                "<|start_header_id|>tool<|end_header_id|>\n\n{{content}}<|eot_id|>"
                "<|start_header_id|>assistant<|end_header_id|>\n\n"
            )
        ]
    ),
    default_system="You are a helpful assistant.",
    stop_words=["<|eot_id|>"],
    replace_eos=True,
)

2.5 编写训练脚本

创建 Shell 脚本配置训练参数。关键参数说明:

  • --stage sft: 监督微调阶段
  • --lora_target: 可训练层,通常选 q_proj, v_proj
  • --per_device_train_batch_size: 单卡批次大小
  • --gradient_accumulation_steps: 梯度累积步数,等效增大 batch size
  • --learning_rate: 学习率,LoRA 通常设为 2e-4
  • --fp16: 使用半精度训练节省显存
touch single_lora_llama3.sh
chmod +x single_lora_llama3.sh
vim single_lora_llama3.sh

脚本内容:

#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export NCCL_P2P_DISABLE="1"
export NCCL_IB_DISABLE="1"

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
  --stage sft \
  --do_train True \
  --model_name_or_path /data/dataset/model/llama3/8b-chinese-chat \
  --dataset stock_zh \
  --template llama3 \
  --lora_target q_proj,v_proj \
  --output_dir output1 \
  --overwrite_cache \
  --per_device_train_batch_size 2 \
  --gradient_accumulation_steps 64 \
  --lr_scheduler_type cosine \
  --logging_steps 5 \
  --save_steps 100 \
  --learning_rate 2e-4 \
  --num_train_epochs 1.0 \
  --finetuning_type lora \
  --fp16 \
  --lora_rank 128 \
  --lora_alpha 32 \
  --target_modules all-linear

运行训练:

./single_lora_llama3.sh

训练完成后,在 output1 目录下会生成 LoRA 适配器权重文件。

3. 模型合并与导出

将 LoRA 权重合并回基础模型,以便部署时减少推理开销。

3.1 执行合并

编辑 export.sh 脚本:

vim /data/dataset/project/LLaMA-Factory-0.6.1/export.sh

输入如下:

#!/bin/bash
python src/export_model.py \
  --model_name_or_path /data/dataset/model/llama3/8b-chinese-chat \
  --adapter_name_or_path /data/dataset/project/LLaMA-Factory-0.6.1/output1 \
  --template llama3 \
  --finetuning_type lora \
  --export_dir /data/dataset/model/llama3/8b-chinese-chat/output_lora1 \
  --export_size 2 \
  --export_legacy_format false

赋予权限并运行:

chmod +x /data/dataset/project/LLaMA-Factory-0.6.1/export.sh
bash /data/dataset/project/LLaMA-Factory-0.6.1/export.sh

合并后的模型位于 /data/dataset/model/llama3/8b-chinese-chat/output_lora1。

3.2 启动 Web 演示

使用内置 Demo 验证模型效果:

cd /data/dataset/project/LLaMA-Factory-0.6.1
vim run_web.sh

脚本内容:

CUDA_VISIBLE_DEVICES=0 python src/web_demo.py \
    --model_name_or_path /data/dataset/model/llama3/8b-chinese-chat/output_lora1 \
    --template llama3 \
    --infer_backend vllm \
    --vllm_enforce_eager

运行后访问浏览器显示的地址即可交互测试。

4. 模型打包与量化

为了在更多设备上部署,可将模型转换为 llama.cpp 支持的 GGUF 格式。

4.1 编译 llama.cpp

前往官网获取源码,编译安装。确保安装路径为:

/data/dataset/project/llama.cpp

4.2 转换模型格式

运行转换脚本:

mkdir -p /data/dataset/model/llama3/custom
cd /data/dataset/project/llama.cpp

python ./convert.py /data/dataset/model/llama3/8b-chinese-chat/output_lora1 \
  --outtype f16 \
  --outfile /data/dataset/model/llama3/custom/8b.bin \
  --vocab-type bpe

转换完成后,将得到约 15GB 的二进制模型文件。

5. 构建 RAG 应用

结合 Ollama 和 Phidata 框架实现检索增强生成(RAG)。

5.1 安装 Ollama

curl -fsSL https://ollama.com/install.sh | sh

创建 Modelfile 加载本地模型:

touch Modelfile
vim Modelfile

内容:

FROM /data/dataset/model/llama3/custom/8b.bin
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"""
SYSTEM """You are a helpful assistant. 你是一个乐于助人的助手。"""
PARAMETER temperature 0.2
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|
PARAMETER stop <|end_header_id|
PARAMETER stop <|eot_id|

注册模型:

ollama create llama3 -f ./Modelfile
ollama list

同时拉取嵌入模型用于向量检索:

ollama run nomic-embed-text

5.2 搭建 Phidata RAG 环境

安装 Phidata 及其依赖:

cd /data/dataset/project
git clone https://github.com/phidatahq/phidata.git
cd phidata
pip install -r cookbook/llms/groq/rag/requirements.txt

启动 PostgreSQL 向量数据库容器:

vim pg_start.sh

内容:

docker run -d \
  -e POSTGRES_DB=ai \
  -e POSTGRES_USER=ai \
  -e POSTGRES_PASSWORD=ai \
  -e PGDATA=/data/dataset/pgdata/data \
  -v pgvolume:/data/dataset/pgdata \
  -p 5532:5432 \
  --name pgvector \
  phidata/pgvector:16

运行 Streamlit 应用:

streamlit run cookbook/llms/ollama/rag/app.py

上传文档后,系统会自动向量化并支持问答。

6. 常见问题与优化建议

6.1 显存不足 (OOM)

  • 减小 per_device_train_batch_size
  • 增加 gradient_accumulation_steps
  • 启用 bf16 替代 fp16 (需显卡支持)
  • 使用 flash_attention_2 加速

6.2 训练不收敛

  • 检查学习率是否过高,尝试降低至 1e-4
  • 增加 warmup_ratio 比例
  • 确认数据集质量,去除噪声数据

6.3 推理速度慢

  • 使用 vLLM 后端替代默认后端
  • 对模型进行 INT8 量化处理
  • 调整 max_new_tokens 限制生成长度

7. 总结

本文详细介绍了 Llama3 模型的微调与部署全流程。通过 LLaMA-Factory 可以显著降低微调门槛,配合 llama.cpp 和 Ollama 可实现本地化的高效推理。在实际生产中,建议根据业务场景调整超参数,并持续监控模型表现。对于大规模数据,建议采用分布式训练方案以提升效率。

目录

  1. Llama3 中文模型实战微调与部署指南
  2. 1. 环境准备与模型下载
  3. 1.1 硬件与软件要求
  4. 1.2 下载预训练模型
  5. 2. 使用 LLaMA-Factory 进行微调
  6. 2.1 安装 LLaMA-Factory
  7. 建立存放目录
  8. 克隆仓库
  9. 安装依赖
  10. 2.2 准备训练数据
  11. 例如创建 stock.json
  12. 输出示例:073db05fbf903c494e0826615194fef77c24fa1f
  13. 2.3 配置数据集信息
  14. 2.4 配置模型模板
  15. 2.5 编写训练脚本
  16. 3. 模型合并与导出
  17. 3.1 执行合并
  18. 3.2 启动 Web 演示
  19. 4. 模型打包与量化
  20. 4.1 编译 llama.cpp
  21. 4.2 转换模型格式
  22. 5. 构建 RAG 应用
  23. 5.1 安装 Ollama
  24. 5.2 搭建 Phidata RAG 环境
  25. 6. 常见问题与优化建议
  26. 6.1 显存不足 (OOM)
  27. 6.2 训练不收敛
  28. 6.3 推理速度慢
  29. 7. 总结

更多推荐文章

查看全部
  • llama-cpp-python 完整安装与配置指南
  • 从 Python 到 OpenClaw:本地 AI 助理构建路径
  • TI AFE5816:16 通道超声波模拟前端 (AFE) 详解
  • RabbitMQ/Spring-AMQP 事务与消息限流高级特性详解
  • Web3 核心概念与业务应用场景解析
  • 前端通用 AI Rules 定义:适配 Cursor、Trae 等主流开发工具
  • SpringBoot 启动引导类的命名约定与核心原理
  • YOLOv8 OBB 旋转目标检测 RK3588 C++ 部署:模型转换与推理优化
  • 无人机返航避障:基于 SILD 的电力线尺度不变检测器
  • MySQL 登录报错 ERROR 1045 (28000) 解决方案
  • C++ 基于 Boost 的正倒排索引搜索引擎数据清洗详解
  • 算法:双指针法判断快乐数
  • Android MVVM 架构搭建(1):DataBinding 入门指南
  • 阿里 P6 安卓开发面试流程及核心基础知识梳理
  • 零基础本地部署 Stable Diffusion 完整实战指南
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用的排查与修复
  • Node.js 环境变量配置与管理
  • 机器学习:数据清洗与预处理(Python)
  • MCP 协议详解:与 Function Call 的区别及使用方法
  • Python 能做什么?常见应用场景与学习指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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