XTuner 微调 Llama3 图片多模态
来源:互联网
时间:2026-08-03 14:11:08
好的,作为一名在AI模型训练与部署领域深耕多年的技术博主,我将为你重写这篇关于Llama3-LLaVA模型操作的教程,使其读起来更像是我亲手写就的深度分享。
---
在多模态大模型的实践过程中,有一系列标准化的操作流程需要掌握。下面我们围绕几个关键步骤展开说明,每一步都配有详细解读,希望能帮你建立起从环境准备到模型推理的完整认知。
首先,要做的是把必要的代码仓库拉到本地。这就像我们开工前要准备好工具。
```bash
cd ~
git clone https://github.com/SmartFlowAI/Llama3-Tutorial
```
这里需要解释一下`git clone`这个命令到底在做什么。它本质上是从远程仓库复制一份完整的代码和历史记录到你本地机器上。具体来说:
- **`git clone`**:这是Git的一个子命令,专门负责从远程仓库下载项目。
- **后面的URL**:指明了你要克隆的仓库地址。对于这个例子,就是GitHub上SmartFlowAI组织下的“Llama3-Tutorial”项目。
接下来是模型文件的准备。为了避免把动辄几十GB的模型文件直接复制到工作目录,更推荐的做法是创建“软链接”,相当于一个快捷方式。这样既节省了磁盘空间,又能让程序顺利找到模型。
```bash
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct .
```
这里创建了一个名为“Meta-Llama-3-8B-Instruct”的符号链接,它指向了共享路径下的原始模型文件。`-s`选项就代表这是个符号链接,而最后的点`.`,表示将链接创建在当前目录(也就是`~/model`)下。
同样的道理,我们还需要把多模态模型里用到的视觉编码器也拿过来。
```bash
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/openai/clip-vit-large-patch14-336 .
```
以及一个关键的、微调好的LLaVA权重文件。
```bash
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/xtuner/llama3-lla va-iter_2181.pth .
```
第一步算是准备完毕了。接下来是数据处理环节。我们还需要另一个重要的教程仓库来获取数据预处理脚本。
```bash
cd ~
git clone https://github.com/InternLM/tutorial -b camp2
```
这条命令和之前类似,不同的是增加了一个`-b camp2`参数。这表示我们只克隆“camp2”这个特定分支上的内容,而不是整个仓库的所有分支。这在想针对某个特定版本或任务时非常有用。
拿到脚本后,就可以用它来扩展我们的训练数据了。
```bash
python ~/tutorial/xtuner/lla va/lla va_data/repeat.py
-i ~/tutorial/xtuner/lla va/lla va_data/unique_data.json
-o ~/tutorial/xtuner/lla va/lla va_data/repeated_data.json
-n 200
```
运行这个Python脚本的主要目的是数据增强。它读取一个原始数据文件(`-i`),然后将每条数据复制指定次数(`-n 200`),最后输出到新的文件(`-o`)中。通过这种方式,我们用简单的重复来增加训练数据量,让模型有更多机会学习。
万事俱备,接下来就是最核心的环节:模型训练。训练命令如下:
```bash
xtuner train ~/Llama3-Tutorial/configs/llama3-lla va/lla va_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py
--work-dir ~/llama3_lla va_pth
--deepspeed deepspeed_zero2
```
这条命令通过`xtuner`工具启动训练。`xtuner train`后面的长路径,就是训练配置文件的所在位置,它定义了模型结构、学习率、LoRA参数等所有关键设置。我们通过`--work-dir`指定了训练日志和模型权重的存放目录。最后的`--deepspeed deepspeed_zero2`则是一个很有用的优化选项,它启用了DeepSpeed的ZeRO-2优化策略来训练,能显著减少显存占用,让大模型的训练变得更加可行。
训练完成后,我们生成的模型权重是PyTorch格式的(.pth文件)。为了能更方便地使用Hugging Face生态进行部署、推理或微调,需要将它转换成Hugging Face支持的格式。为此,需要依次转换预训练和微调两个阶段的模型文件。
```bash
xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-lla va/lla va_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py
~/model/llama3-lla va-iter_2181.pth
~/llama3_lla va_pth/pretrain_iter_2181_hf
xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-lla va/lla va_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py
~/llama3_lla va_pth/iter_1200.pth
~/llama3_lla va_pth/iter_1200_hf
```
可以看到,`xtuner convert pth_to_hf`这个命令结构很清晰。它需要你提供三个信息:1)模型配置文件;2)原始的.pth模型权重路径;3)转换后Hugging Face格式权重的保存路径。执行完这两条命令后,我们就会得到两个重要的Hugging Face模型目录:一个是预训练阶段的`pretrain_iter_2181_hf`,另一个是微调阶段的`iter_1200_hf`。
最后一步,就是用训练好的模型来玩一下了。这里有一个有趣的地方,我们可以分别启动使用预训练权重和微调权重的对话系统,对比看看效果。
```bash
export MKL_SERVICE_FORCE_INTEL=1
xtuner chat /root/model/Meta-Llama-3-8B-Instruct
--visual-encoder /root/model/clip-vit-large-patch14-336
--lla va /root/llama3_lla va_pth/pretrain_iter_2181_hf
--prompt-template llama3_chat
--image /root/tutorial/xtuner/lla va/lla va_data/test_img/oph.jpg
```
启动命令前先设置`MKL_SERVICE_FORCE_INTEL=1`环境变量,这主要是为了确保在一些环境下MKL(Intel数学核心函数库)调用的稳定性。`xtuner chat`后面跟着的参数同样都很关键:
- **基础LLM**:`/root/model/Meta-Llama-3-8B-Instruct`,定义了模型的底层语言能力。
- **视觉编码器**:`--visual-encoder`,告诉模型应该如何理解和提取图像特征。
- **LLaVA权重**:`--lla va`,指向我们刚才转换好的Hugging Face模型,这是将语言模型和视觉编码器融合起来的关键部分。
- **对话模板**:`--prompt-template llama3_chat`,定义了输入输出的格式,确保对话能够按照预期进行。
- **待处理图片**:`--image`,指明要分析的目标图片。
你可以用同样的方式启动微调后的模型,看看它在特定任务上是否表现得更出色。
```bash
export MKL_SERVICE_FORCE_INTEL=1
xtuner chat /root/model/Meta-Llama-3-8B-Instruct
--visual-encoder /root/model/clip-vit-large-patch14-336
--lla va /root/llama3_lla va_pth/iter_1200_hf
--prompt-template llama3_chat
--image /root/tutorial/xtuner/lla va/lla va_data/test_img/oph.jpg
```
至此,从环境搭建到数据准备,再到模型训练、格式转换和最终对话推理的完整流程,我们已经走了一遍。在实际操作中,你只需要根据实际路径替换其中的参数,就能复现或迁移这套流程了。 -
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名