基于 XTuner 微调 LLaVA-Llama-3-8B 多模态模型教程
近日,XTuner 团队基于 Meta 发布了最新版多模态大模型 LLaVA-Llama-3-8B。相比 LLaVA-1.5,该模型在多个评测数据集上取得了显著提升。本文旨在提供一份详细的微调指南,帮助用户基于 Llama3-8B-Instruct 和 XTuner 预训练的 Image Projector,快速构建自己的多模态图文理解模型。
1. 环境、模型与数据准备
1.1 配置开发环境
首先,我们需要搭建 Python 运行环境。建议使用 Conda 管理虚拟环境,确保依赖版本兼容。
# 创建 conda 环境
conda create -n llama3 python=3.10 -y
conda activate llama3
# 安装 PyTorch (CUDA 12.1)
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
接下来安装 XTuner 框架。建议克隆官方仓库并安装为可编辑模式。
cd ~
git clone -b v0.1.18 https://github.com/InternLM/XTuner.git
cd XTuner
pip install -e .
注意: 安装过程中请确保网络通畅,若遇到依赖冲突,可尝试更新 pip 或清理缓存。
1.2 模型权重准备
微调开始前,需准备以下三个核心组件的权重文件:
1.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
1.2.2 Visual Encoder 权重
LLaVA 需要视觉编码器来提取图像特征,通常使用 CLIP 模型。
cd ~
ln -s /root/new_models/openai/clip-vit-large-patch14-336 .
# 若无本地路径,可从 HuggingFace 下载
# wget https://huggingface.co/openai/clip-vit-large-patch14-336/resolve/main/pytorch_model.bin
1.2.3 Image Projector 权重
这是连接视觉编码器和语言模型的桥梁。XTuner 提供了预训练好的迭代权重。
- Pretrain 阶段权重:用于后续微调的基础。
- Finetune 阶段权重:已进行过初步对齐的权重。
建议从 XTuner 官方仓库获取最新权重文件,确保格式兼容性。
1.3 数据准备
为了快速验证流程,我们可以采用过拟合(Overfitting)的方式准备少量数据。XTuner 提供了脚本用于重复生成训练样本。
~
git 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


