多模态 Llama-3 模型微调实战教程
1. 背景介绍
随着大语言模型(LLM)技术的飞速发展,多模态模型已成为连接文本与视觉信息的关键桥梁。Llama-3 作为 Meta 推出的最新一代开源基座模型,具备强大的指令遵循能力。结合 XTuner 框架,我们可以利用其预训练的 Image Projector 和 LLaVA 架构,快速构建基于 Llama-3-8B-Instruct 的多模态图文理解模型。
本教程将详细演示如何从零开始配置环境、准备权重、构建数据集,并完成模型的微调与推理验证。
2. 环境与模型准备
2.1 配置基础环境
推荐使用 Python 3.10 配合 PyTorch 2.1.2 (CUDA 12.1) 版本,以确保兼容性。
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
安装 XTuner 训练框架:
cd ~
git clone -b v0.1.18 https://github.com/InternLM/XTuner
cd XTuner
pip install -e .
2.2 模型权重准备
微调前需准备三部分核心权重:语言模型、视觉编码器、图像投影器。
2.2.1 准备 Llama3 权重
下载 Meta-Llama-3-8B-Instruct 模型权重。若使用本地环境,可从 HuggingFace 或 OpenXLab 获取。
cd ~
git lfs install
git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct
2.2.2 准备 Visual Encoder 权重
LLaVA 架构需要 CLIP 模型作为视觉编码器,此处使用 openai/clip-vit-large-patch14-336。
cd ~
ln -s /root/new_models/openai/clip-vit-large-patch14-336 .
# 若无特定路径,可直接从 HuggingFace 下载
2.2.3 准备 Image Projector 权重
XTuner 团队提供了预训练的 Image Projector 权重,用于对齐视觉特征与文本特征。
- Pretrain 阶段权重:用于后续微调的初始投影层。
- 下载地址:可访问 HuggingFace 仓库
xtuner/llava-llama-3-8b获取相关文件。
2.3 数据准备
微调数据通常采用 JSON 格式,包含图片路径及对应的对话指令。为了快速验证流程,本教程采用过拟合方式生成少量重复数据。
cd ~
git clone https://github.com/InternLM/tutorial -b camp2
python ~/tutorial/xtuner/llava/llava_data/repeat.py \
-i ~/tutorial/xtuner/llava/llava_data/unique_data.json \
-o ~/tutorial/xtuner/llava/llava_data/repeated_data.json \
-n 200


