# 12.InternVL 微调实践闯关任务
# 1.使用QLoRA进行微调模型,复现微调效果
# 1.1 环境准备
cd /root && mkdir -p model
# cp 模型
cp -r /root/share/new_models/OpenGVLab/InternVL2-2B /root/model/
conda create --name xtuner python=3.10 -y
# 激活虚拟环境(注意:后续的所有操作都需要在这个虚拟环境中进行)
conda activate xtuner
# 安装一些必要的库
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖
apt install libaio-dev
pip install transformers==4.39.3
pip install streamlit==1.36.0
# 创建一个目录,用来存放源代码
mkdir -p /root/InternLM/code && cd /root/InternLM/code
git clone -b v0.1.23 https://github.com/InternLM/XTuner
cd /root/InternLM/code/XTuner
pip install -e '.[deepspeed]'
pip install lmdeploy==0.5.3
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
通过命令验证xtuner help 是否安装成功。
# 1.2 数据集准备
## 首先让我们安装一下需要的包
pip install datasets matplotlib Pillow timm
## 让我们把数据集挪出来
cp -r /root/share/new_models/datasets/CLoT_cn_2000 /root/InternLM/datasets/
2
3
4
5
准备好数据集,先验证下。
from lmdeploy import pipeline
from lmdeploy.vl import load_image
pipe = pipeline('/root/model/InternVL2-2B')
image = load_image('/root/InternLM/007aPnLRgy1hb39z0im50j30ci0el0wm.jpg')
response = pipe(('请你根据这张图片,讲一个脑洞大开的梗', image))
print(response.text)
2
3
4
5
6
7
8
输入:
输出:
这张图片展示了一只猫咪,它看起来像是在“扮丑”,把头部和身体的一部分都覆盖了起来,看起来像是在模仿一个小丑的形象。这种“扮丑”的行为在猫咪中是一种常见的“恶搞”行为,通常用来逗主人开心或者吓唬其他猫咪。 这个梗的有趣之处在于,猫咪的面部表情和肢体动作非常夸张,显得非常滑稽。这种“恶搞”行为在猫咪中并不罕见,因为猫咪天生具有很高的模仿能力和社交性,能够模仿人类的行为和表情。 这个梗之所以有趣,是因为它利用了猫咪的这种天性,让猫咪的“恶搞”行为显得非常可爱和有趣。同时,这种“恶搞”行为也可以引起猫咪主人的笑声和互动,增加猫咪和主人之间的情感联系。 总的来说,这个梗利用了猫咪的天性,将猫咪的“恶搞”行为变得非常有趣和可爱,同时也能增进主人和猫咪之间的互动和感情。
# 1.3 模型微调
直接修改文件 /root/InternLM/code/XTuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py
微调命令:
cd XTuner
NPROC_PER_NODE=1
xtuner train /root/InternLM/code/XTuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py --work-dir /root/InternLM/work_dir/internvl_ft_run_8_filter --deepspeed deepspeed_zero1
模型微调需要等待一段时间,请耐心等待。微调完成之后合并模型。
python3 xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_qlora_finetune.py /root/InternLM/work_dir/internvl_ft_run_8_filter/iter_3000.pth /root/InternLM/InternVL2-2B/
A100 30%,batch size训练会报显存不足,可以batch size调成1. 时间大概8个小时。
09/01 08:41:00 - mmengine - INFO - Exp name: internvl_v2_internlm2_2b_qlora_finetune_20240901_004922
09/01 08:41:00 - mmengine - INFO - Iter(train) [12000/12000] lr: 3.6422e-13 eta: 0:00:00 time: 2.2640 data_time: 0.0114 memory: 10496 loss: 0.0327
09/01 08:41:00 - mmengine - INFO - Saving checkpoint at 12000 iterations
2
3
更换模型,重新执行test_lmdeploy.py
输入:
输出:
刚才不是说要被尿布了吗...
换其他的发现也回答的五花八门。