五一超级课堂---Llama3-Tutorial(Llama 3 超级课堂)---第三节llama 3图片理解能力微调(xtuner+llava版)

课程文档:

https://github.com/SmartFlowAI/Llama3-Tutorial

课程视频:

https://space.bilibili.com/3546636263360696/channel/collectiondetail?sid=2892740\&spm_id_from=333.788.0.0

操作平台:

https://studio.intern-ai.org.cn/console/

请参照第一节课完成环境配置和webdemo部署以及源码拉取和安装

https://blog.csdn.net/haidizym/article/details/138378194

bash 复制代码
conda activate llama3
cd ~
git clone https://github.com/SmartFlowAI/Llama3-Tutorial

#模型准备--InternStudio
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct .
#模型准备--非 InternStudio
#mkdir -p ~/model
#cd ~/model
#git lfs install
#git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct
#准备 openai/clip-vit-large-patch14-336,权重,即 Visual Encoder 权重,非 InternStudio,可以访问 https://huggingface.co/openai/clip-vit-large-patch14-336 以进行下载。
ln -s /root/share/new_models/openai/clip-vit-large-patch14-336 .
#准备 Image Projector 权重
ln -s /root/share/new_models/xtuner/llama3-llava-iter_2181.pth .

#数据准备,按照 https://github.com/InternLM/Tutorial/blob/camp2/xtuner/llava/xtuner_llava.md 中的教程来准备微调数据。
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

#模型微调,算力不够,可以考虑把deepspeed zero2换成deepspeed zero2 offload
#xtuner train ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py --work-dir ~/llama3_llava_pth --deepspeed deepspeed_zero2_offload
xtuner train ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py --work-dir ~/llama3_llava_pth --deepspeed deepspeed_zero2
#模型转换
xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py \
  ~/model/llama3-llava-iter_2181.pth \
  ~/llama3_llava_pth/pretrain_iter_2181_hf

xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py \
  ~/llama3_llava_pth/iter_1200.pth \
  ~/llama3_llava_pth/iter_1200_hf

#Pretrain 模型,问题1:Describe this image. 问题2:What is the equipment in the image?
export MKL_SERVICE_FORCE_INTEL=1
xtuner chat /root/model/Meta-Llama-3-8B-Instruct \
  --visual-encoder /root/model/clip-vit-large-patch14-336 \
  --llava /root/llama3_llava_pth/pretrain_iter_2181_hf \
  --prompt-template llama3_chat \
  --image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg

#Finetune 后 模型,问题1:Describe this image. 问题2:What is the equipment in the image?
export MKL_SERVICE_FORCE_INTEL=1
xtuner chat /root/model/Meta-Llama-3-8B-Instruct \
  --visual-encoder /root/model/clip-vit-large-patch14-336 \
  --llava /root/llama3_llava_pth/iter_1200_hf \
  --prompt-template llama3_chat \
  --image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg
注释1

"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"

这段代码是一个Python脚本,路径为~/tutorial/xtuner/llava/llava_data/repeat.py。它的作用是读取一个JSON文件~/tutorial/xtuner/llava/llava_data/unique_data.json,然后将其中的数据重复200次,并将结果保存到另一个JSON文件~/tutorial/xtuner/llava/llava_data/repeated_data.json中。

具体参数说明如下:

  • -i:指定输入文件的路径,即要重复的原始数据的JSON文件路径。
  • -o:指定输出文件的路径,即重复后的数据要保存到的JSON文件路径。
  • -n:指定重复的次数,这里设置为200次。

所以,这段代码的作用是将unique_data.json文件中的数据重复200次,然后将结果保存到repeated_data.json文件中。

注释2

"llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py --work-dir ~/llama3_llava_pth --deepspeed deepspeed_zero2"

这段代码是在运行一个Python脚本llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py,这个脚本的路径是相对于当前工作目录的(可能是相对于用户的主目录或当前工作目录)。指定了一些参数来配置脚本的行为。下面是对参数的解释:

  • --work-dir ~/llama3_llava_pth:指定了工作目录的路径,即脚本执行时的工作目录。这个路径是用户主目录下的llama3_llava_pth目录。

  • --deepspeed deepspeed_zero2:使用DeepSpeed进行加速训练的参数配置。deepspeed_zero2可能是DeepSpeed的配置文件或者某种模式的标识,具体的含义需要参考DeepSpeed的文档或者脚本的说明。

所以,这段代码的作用是在指定的工作目录下执行llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py脚本,并使用DeepSpeed进行加速训练。

注释3

"xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py

~/model/llama3-llava-iter_2181.pth

~/llama3_llava_pth/pretrain_iter_2181_hf"

这段代码是在运行一个名为xtuner的命令行工具,执行了其中的一个子命令convert,并提供了一系列参数。下面是对参数的解释:

  • pth_to_hf:这是xtuner工具的子命令,指示将PyTorch模型(.pth文件)转换为Hugging Face Transformers库所需的格式。

  • ~/Llama3-Tutorial/configs/llama3-llava/llava_llama3_8b_instruct_qlora_clip_vit_large_p14_336_lora_e1_finetune.py:指定了一个配置文件的路径,该配置文件描述了模型结构和训练参数等信息,用于指导模型转换。

  • ~/model/llama3-llava-iter_2181.pth:指定了要转换的PyTorch模型的路径,这里是llama3-llava-iter_2181.pth文件。

  • ~/llama3_llava_pth/pretrain_iter_2181_hf:指定了输出路径,即转换后的模型将保存到pretrain_iter_2181_hf目录中,用于后续在Hugging Face Transformers库中加载和使用。

所以,这段代码的作用是使用xtuner工具将PyTorch模型llama3-llava-iter_2181.pth转换为Hugging Face Transformers库所需的格式,并根据提供的配置文件进行适当的转换。

注释4

"export MKL_SERVICE_FORCE_INTEL=1

xtuner chat /root/model/Meta-Llama-3-8B-Instruct

--visual-encoder /root/model/clip-vit-large-patch14-336

--llava /root/llama3_llava_pth/pretrain_iter_2181_hf

--prompt-template llama3_chat

--image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg"

这段代码是一系列命令行操作,其中涉及了环境变量的设置和一个名为xtuner的工具的使用,提供了一些参数。下面是对代码的注释:

  • export MKL_SERVICE_FORCE_INTEL=1:这是一个环境变量设置命令,将MKL(Math Kernel Library)服务强制指定为Intel实现。这通常用于优化数值计算的性能。

  • xtuner chat /root/model/Meta-Llama-3-8B-Instruct:这是一个使用xtuner工具的命令,其中chatxtuner工具的一个子命令。它用于启动一个交互式会话,该会话基于给定的模型进行对话。

  • --visual-encoder /root/model/clip-vit-large-patch14-336:指定了视觉编码器的模型路径,用于处理图像输入。这里使用了一个模型路径clip-vit-large-patch14-336

  • --llava /root/llama3_llava_pth/pretrain_iter_2181_hf:指定了LLAVA(LLAMA Visual-Text Attention)模型的路径,该模型经过了预训练并转换为Hugging Face Transformers库所需的格式。这个路径是pretrain_iter_2181_hf

  • --prompt-template llama3_chat:指定了对话的模板名称,用于生成对话的起始提示。

  • --image /root/tutorial/xtuner/llava/llava_data/test_img/oph.jpg:指定了一个图像文件的路径,该图像将作为对话的一部分输入到模型中。

所以,这段代码的作用是启动一个交互式会话,使用给定的视觉编码器模型和LLAVA模型,以及指定的对话模板和图像文件进行对话。

截图


使用不了加速

ImportError: deepspeed is not installed properly, please check.

之前安装xtuner时候是不是没有 pip install -e .[all]

重新安装xtuner用 pip install -e .[all]

重新安装xtuner用 pip install -e .[all],并且把deepspeed_zero2换成deepspeed_zero2_offload后,终于可以开始训练了

近6个小时的等待,终于快好了,今天不知道怎么这么慢,不用offload就out of memory,用offload就只能以时间换空间了,

庆祝漫长的等待!!!

模型转换
在这里插入图片描述

oom问题

①使用https://github.com/SmartFlowAI/Llama3-Tutorial/blob/main/tools/internstudio_quant_web_demo.py,原来是 streamlit run internstudio_web_demo.py xxxx,现在是 streamlit run internstudio_quant_web_demo.py xxxxx

②添加指令--device cpu,以使用cpu运行指令;

③添加指令--deepspeed deepspeed_zero2,或者--deepspeed deepspeed_zero2_offload(在配置环境时须在xtuner目录下执行指令pip install '.[all]')

相关推荐
Guofu_Liao8 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
AI_小站17 小时前
RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
人工智能·程序人生·langchain·kubernetes·llama·知识库·rag
Guofu_Liao17 小时前
Llama模型文件介绍
人工智能·llama
Donvink21 小时前
多模态大语言模型——《动手学大模型》实践教程第六章
人工智能·深度学习·语言模型·自然语言处理·llama
Donvink1 天前
大模型安全和越狱攻击——《动手学大模型》实践教程第五章
深度学习·安全·语言模型·llama
Donvink1 天前
大模型智能体安全——《动手学大模型》实践教程第七章
深度学习·安全·语言模型·prompt·llama
慢热型网友.1 天前
【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2
llama
机器学习是魔鬼1 天前
LLaMA-Factory 上手即用教程
llama·模型训练·ai功能岛·矩池云
Galeoto1 天前
fine tuning with llama-factory
llama
Struart_R2 天前
LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读
语言模型·llama·多模态·三维生成·自回归