当前位置:   article > 正文

Llama3小白自学路(三、llama3图片能力微调)_llama 3 最小模型 训练

llama 3 最小模型 训练

写在前面:

前部分依旧是技术流的教程copy及相关笔记。但说实话,在复现这一部分中,遇到了很多问题,后面的QA我会把遇到的进行记录。

课程背景是XTuner 团队放出了基于 Llama3-8B 的 LLaVA 模型。然后机智流带领我们基于 Llama3-8B-Instruct 和 XTuner 团队预训练好的 Image Projector 微调多模态图文理解模型 LLaVA。

LLaVA模型,即文本单模型LLM和训练出来的Image Projector的组合。

LLaVA构建
训练阶段LLM+(文本与图像的问答对)----(显卡)---->Image Projector
测试阶段Image Projector + LLM + 输入图像 ----(显卡)---->输出文字

这里附上机智流的Llama3教程链接:

机智流Llama3超级课堂

1、环境配置

同上一章节(下载好模型、权重以及必要的依赖)

  1. # 创建镜像并下载依赖
  2. conda create -n llama3 python=3.10
  3. conda activate llama3
  4. conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
  5. # 安装git
  6. mkdir -p ~/model
  7. cd ~/model
  8. apt install git git-lfs -y
  9. # 获取权重模型
  10. git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct
  11. # 下载llama3的机智流的教程工具包,里面有一些数据集和web的展示程序
  12. cd ~
  13. git clone https://github.com/SmartFlowAI/Llama3-Tutorial
  14. # 安装XTuner
  15. cd ~
  16. git clone -b v0.1.18 https://github.com/InternLM/XTuner
  17. cd XTuner
  18. pip install -e .

2、模型训练

训练Image Projector文件的过程主要有2个阶段:Pretrain和Finetune。

1)Pretrain阶段:

预训练阶段,此阶段会使用大量的(图片+文本标签)进行训练,使得LLM具有简单的理解图像能力。

但这只是预训练部分,所以对于用户的提问,只会回答图片的标题。

其阶段对硬件的要求很高,对于贫民的咱来说,主要还是进行Finetune微调阶段。

2)Finetune阶段

微调阶段,在这一阶段,会使用(图片+复杂文本),对预训练模型进一步训练。

为了快速学习,我这里还是使用的机智流的图片例子,后续会新出章节记录训练数据的构建至自定义模型的训练。

(1)查看并复制配置文件
  1. # 查询xtuner内置配置文件
  2. xtuner list-cfg -p llava_internlm2_chat_1_8b
  3. # 拷贝配置文件到当前目录
  4. xtuner copy-cfg \
  5. llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune \
  6. /root/tutorial/xtuner/llava
(2)修改配置文件

说其是配置文件,实际是训练的python代码,在其中修改相应的参数。

vi编辑修改文件llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy.py。

  1. # Model(模型的路径,前一个是llm模型的地址,后一个是clip图文表征模型的地址,用于图文转换)
  2. - llm_name_or_path = 'internlm/internlm2-chat-1_8b'
  3. + llm_name_or_path = '/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b'
  4. - visual_encoder_name_or_path = 'openai/clip-vit-large-patch14-336'
  5. + visual_encoder_name_or_path = '/root/share/new_models/openai/clip-vit-large-patch14-336'
  6. # Specify the pretrained pth(预训练模型的地址)
  7. - pretrained_pth = './work_dirs/llava_internlm2_chat_1_8b_clip_vit_large_p14_336_e1_gpu8_pretrain/iter_2181.pth' # noqa: E501
  8. + pretrained_pth = '/root/share/new_models/xtuner/iter_2181.pth'
  9. # Data(数据源信息)
  10. # data_root:训练数据目录
  11. # data_path:训练数据文件名
  12. # image_folder:镜像文件夹路径
  13. - data_root = './data/llava_data/'
  14. + data_root = '/root/tutorial/xtuner/llava/llava_data/'
  15. - data_path = data_root + 'LLaVA-Instruct-150K/llava_v1_5_mix665k.json'
  16. + data_path = data_root + 'repeated_data.json'
  17. - image_folder = data_root + 'llava_images'
  18. + image_folder = data_root
  19. # Scheduler & Optimizer(每次训练批次数目)
  20. # 这里不宜过大,除非对显卡有自信,不然容易爆显存
  21. - batch_size = 16 # per_device
  22. + batch_size = 1 # per_device
  23. # evaluation_inputs(训练过程中会根据给定的问题进行评估,便于观察训练状态)
  24. - evaluation_inputs = ['请描述一下这张图片','Please describe this picture']
  25. + evaluation_inputs = ['Please describe this picture','What is the equipment in the image?']
(3)训练模型
  1. cd /root/tutorial/xtuner/llava/
  2. xtuner train /root/tutorial/xtuner/llava/llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy.py --deepspeed deepspeed_zero2

训练语句中,train后面为训练的一键式脚本py文件,即执行这个脚本。

这里使用了XTuner中的优化技术deepSpeed ZaRO来降低显卡消耗。

3)性能对比:

使用机智流的测试图像为下:

(1)Finetune之前
  1. # 解决小bug
  2. export MKL_SERVICE_FORCE_INTEL=1
  3. export MKL_THREADING_LAYER=GNU
  4. # pth转huggingface
  5. xtuner convert pth_to_hf \
  6. llava_internlm2_chat_1_8b_clip_vit_large_p14_336_e1_gpu8_pretrain \
  7. /root/share/new_models/xtuner/iter_2181.pth \
  8. /root/tutorial/xtuner/llava/llava_data/iter_2181_hf
  9. # 启动!
  10. xtuner chat /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b \
  11. --visual-encoder /root/share/new_models/openai/clip-vit-large-patch14-336 \
  12. --llava /root/tutorial/xtuner/llava/llava_data/iter_2181_hf \
  13. --prompt-template internlm2_chat \
  14. --image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg

参数说明:

前两行是设置环境变量,主要是防止pytorch做分布式训练时出现bug。(貌似只要设置一行就可以)。

xtuner convert pth_to_hf ${配置文件地址(也就是上面的py文件)} ${权重文件地址} ${转换后模型的保存地址}

除此之外,还可以添加两个额外的参数:

fp32代表以f32精度开启,默认为fp16
max-shard-size{GB}代表每个权重文件最大大小,默认2GB

xtuner chat为简单的模型对话指令,上述命令的参数含义为:

visual-encoder编码器地址,这里是指定了clip的模型路径
llava转换后的模型路径
prompt-template提示词模板,如果指定错误可能会导致模型无法正确回复
image指定分析的图片

执行上面的命令,并输入相应的问题,可以得到下面的输出:

(2)Finetune之后
  1. # 解决小bug
  2. export MKL_SERVICE_FORCE_INTEL=1
  3. export MKL_THREADING_LAYER=GNU
  4. # pth转huggingface
  5. xtuner convert pth_to_hf \
  6. /root/tutorial/xtuner/llava/llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy.py \
  7. /root/tutorial/xtuner/llava/work_dirs/llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy/iter_1200.pth \
  8. /root/tutorial/xtuner/llava/llava_data/iter_1200_hf
  9. # 启动!
  10. xtuner chat /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b \
  11. --visual-encoder /root/share/new_models/openai/clip-vit-large-patch14-336 \
  12. --llava /root/tutorial/xtuner/llava/llava_data/iter_1200_hf \
  13. --prompt-template internlm2_chat \
  14. --image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg

执行上面的命令,并输入相应的问题,可以得到下面的输出:

和前面微调相比,微调后的模型在回答问题时更加详细全面。

依旧挖坑,后续补章节自己训练数据并描述自定义图片。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/878556
推荐阅读
相关标签
  

闽ICP备14008679号