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

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

本教程基于 RockyLinux8 版本,适用于单机 RTX 4090Ti (24G 显存) 环境。训练过程中 GPU 显存占用约为 23G。通过本文档,您可以完整掌握从模型下载、数据准备、LoRA 微调、模型合并到 RAG 应用部署的全流程。
下载训练好的 Llama3-8B 版本中文模型。请将模型文件放置于指定目录:
/data/dataset/model/llama3/8b-chinese-chat
确保目录结构包含 config.json, tokenizer.json 及权重文件。若使用 HuggingFace 下载,请配置好环境变量以加速访问。
LLaMA-Factory 是一个高效的大模型微调框架,支持多种训练策略(如 SFT, LoRA)。
创建项目目录并克隆仓库。注意版本兼容性,推荐使用 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
进入数据目录,添加您的指令微调数据。数据格式通常为 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
编辑 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"
}
为 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,
)
创建 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 适配器权重文件。
将 LoRA 权重合并回基础模型,以便部署时减少推理开销。
编辑 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。
使用内置 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
运行后访问浏览器显示的地址即可交互测试。
为了在更多设备上部署,可将模型转换为 llama.cpp 支持的 GGUF 格式。
前往官网获取源码,编译安装。确保安装路径为:
/data/dataset/project/llama.cpp
运行转换脚本:
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 的二进制模型文件。
结合 Ollama 和 Phidata 框架实现检索增强生成(RAG)。
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
安装 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
上传文档后,系统会自动向量化并支持问答。
per_device_train_batch_sizegradient_accumulation_stepsbf16 替代 fp16 (需显卡支持)flash_attention_2 加速warmup_ratio 比例max_new_tokens 限制生成长度本文详细介绍了 Llama3 模型的微调与部署全流程。通过 LLaMA-Factory 可以显著降低微调门槛,配合 llama.cpp 和 Ollama 可实现本地化的高效推理。在实际生产中,建议根据业务场景调整超参数,并持续监控模型表现。对于大规模数据,建议采用分布式训练方案以提升效率。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online