Llama 3 大模型微调实战:基于 XTuner 的 8B 模型训练指南
Llama 3 微调实战教程,涵盖环境配置、XTuner 安装、数据集构建、QLoRA 微调及模型合并部署全流程。通过具体命令演示如何完成 8B 模型的认知定制,解决显存不足问题,并提供常见训练问题排查建议。内容涉及 GQA 架构优势、Tiktoken 分词器特性及具体的 Python 脚本实现,适合希望掌握大模型私有化部署的开发人员参考。

Llama 3 微调实战教程,涵盖环境配置、XTuner 安装、数据集构建、QLoRA 微调及模型合并部署全流程。通过具体命令演示如何完成 8B 模型的认知定制,解决显存不足问题,并提供常见训练问题排查建议。内容涉及 GQA 架构优势、Tiktoken 分词器特性及具体的 Python 脚本实现,适合希望掌握大模型私有化部署的开发人员参考。

Llama 3 近期重磅发布,提供了 8B 和 70B 参数量的模型版本。本文详细介绍如何使用 XTuner 框架对 Llama 3 进行微调,包括环境配置、数据集准备、模型训练及部署全流程。
在开始微调之前,了解 Llama 3 的技术特性至关重要:
XTuner 团队针对 Llama 3 8B 进行了性能测试。在配备 2 张 A100 80G GPU 的环境下,即可支持 8K 上下文长度的全量微调。对于显存有限的用户,推荐使用 QLoRA 等高效微调方法。
首先创建独立的 Conda 环境并安装必要的依赖库。
conda create -n llama3 python=3.10
conda activate llama3
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
conda install git
git-lfs install
通过 Hugging Face 或本地仓库下载 Meta-Llama-3-8B-Instruct 模型。确保已签署相关协议并拥有访问权限。
mkdir -p ./models
cd ./models
git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct.git
若已有本地模型路径,可建立软链接以简化路径管理。
ln -s /path/to/existing/models/Meta-Llama-3-8B-Instruct ./Meta-Llama-3-8B-Instruct
克隆 XTuner 项目并安装为可编辑模式。
cd ~
git clone -b v0.1.18 https://github.com/InternLM/XTuner
cd XTuner
pip install -e .
在微调前,建议先运行官方提供的 Web Demo 验证模型基础能力。
streamlit run ~/XTuner/tools/internstudio_web_demo.py \
./models/Meta-Llama-3-8B-Instruct
此时询问模型'你是谁',默认回答应体现其作为 Llama 的身份。
本节演示如何让 Llama 3 具备特定的自我认知,例如将其设定为某公司的专属 AI 助手。
我们需要构造包含特定 System Prompt 和问答对的 JSON 格式数据集。以下脚本用于生成示例数据。
import json
# 输入你的名字或者机构
name = 'TechAssistant'
# 重复次数,实际生产中需多样化数据
n = 2000
data = [
{
"conversation": [
{
"system": "你是一个懂中文的小助手",
"input": "你是(请用中文回答)",
"output": "您好,我是 {},一个由 TechAssistant 打造的人工智能助手,请问有什么可以帮助您的吗?".format(name)
}
]
}
]
# 为避免过拟合,实际场景应增加不同问法
for i in range(n):
data.append(data[0])
with open('data/personal_assistant.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
生成的数据文件 personal_assistant.json 将包含多轮对话结构,确保符合 XTuner 的数据格式规范。
XTuner 允许通过 Python 脚本定义训练超参数。主要配置项包括模型路径、数据集路径、优化器类型(如 QLoRA)、学习率及批次大小。
参考配置文件逻辑如下(具体路径请根据实际项目调整):
# configs/assistant/llama3_8b_instruct_qlora_assistant.py
model = dict(
type=SupervisedFinetune,
use_varlen_attn=False,
)
dataset = dict(
type=process_hf_dataset,
dataset=dict(type=load, path="data/personal_assistant.json"),
template_map=dict(),
max_length=4096,
pack_to_max_length=True,
)
train_batch_size = 1
eval_batch_size = 1
optim_wrapper = dict(
type=OptimWrapper,
optimizer=dict(type='adamw_torch', lr=2e-4),
paramwise_cfg=dict(norm_decay_mult=0, bias_decay_mult=0),
)
lr_scheduler_type = 'cosine'
max_steps = 500
执行训练命令,指定配置文件和工作目录。
cd /root/project/llama3-ft
xtuner train configs/assistant/llama3_8b_instruct_qlora_assistant.py --work-dir ./llama3_pth
训练完成后,将 Adapter 权重转换为 HuggingFace 格式。
xtuner convert pth_to_hf ./configs/assistant/llama3_8b_instruct_qlora_assistant.py \
./llama3_pth/iter_500.pth \
./llama3_hf_adapter
最后,将 Adapter 权重合并到基座模型中,以便直接部署。
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge ./models/Meta-Llama-3-8B-Instruct \
./llama3_hf_adapter \
./llama3_hf_merged
加载合并后的模型再次运行 Web Demo,验证微调效果。
streamlit run ~/XTuner/tools/internstudio_web_demo.py \
./llama3_hf_merged
此时询问'你是谁',模型应回答预设的自定义身份。
gradient_accumulation_steps 增大有效 batch size。通过上述步骤,您可以完成 Llama 3 的基础微调与部署,并根据实际需求扩展更多垂直领域的应用场景。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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