记一次VideoLLaMA2部署与微调

记录一次VideoLLaMA2部署与微调过程。由于Videollama2的训练数据集为英文数据集,对中文视频理解较差,因为课设的主题是对中文视频进行总结,所以我们用中文图片视频数据集对模型进行微调,记录如下。模型的部署和微调都是从0开始,如有错误之处欢迎指正

服务器环境

平台:SCNet超算互联网,链接:超算互联网 (scnet.cn)

部署环境:RTX4090 24GB

  • pytorch=2.2.0
  • python=3.10
  • ubuntu=22.04
  • cuda=12.1

其他参考官方要求:GitHub - DAMO-NLP-SG/VideoLLaMA2: VideoLLaMA 2: Advancing Spatial-Temporal Modeling and Audio Understanding in Video-LLMs

模型版本

Videollama2-7B

Visual Encoder:clip-vit-large-patch14-336

Language Decoder:Mistral-7B-Instruct-v0.2

模型下载

进入Videollama2官方链接,找到自己需要的模型,进入对应的huggingface页面进行下载

进入对应的页面,例如clip-vit-large-patch14-336

将里面的文件全部下载下来,存入一个对应的文件夹中(最好以模型的名字进行命名的文件夹),我创建了一个存放所有模型的文件夹命名为videollama2,然后将下载的模型文件存入对应命名的文件夹之后,再统一存放在这个文件夹里。

做好这些之后,将这个文件夹上传超算互联网平台,创建NoteBook实例,接下来是环境配置。

环境配置

添加国内源(可选,此处是清华源,未验证是否有效)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes

pip install --upgrade pip  # enable PEP 660 support
pip install -e .
pip install flash-attn==2.5.8 --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple

可能在安装flash-attn时会出现报错,无法安装,可以多尝试几次。之后再

pip install -r requirements.txt

在安装过程中,会出现一些报错,上网搜索解决即可。如出现:ImportError: libGL.so.1: cannot open shared object file: No such file or directory

运行
sudo apt-get update
sudo apt-get install libgl1-mesa-glx

 模型部署

环境配置完成之后,还需要修改配置文件中的模型路径

在Videollama2 huggingface模型文件夹中(我的是Videollama-7B)有一个config.json文件,将里面的"_name_or_path"和"mm_vision_tower"部分的路径进行更改,改成你的模型路径。模型部署准备部分完成了。

在 Videollama2-main文件夹的gradio_web_server_adhoc.py文件中,也要将model_path的路径进行更改,换成你的Videollama-7B文件夹对应的路径。最后把gradio_web_server_adhoc.py的最后一行改为demo.launch(share=True),避免出现网页无法访问的问题。之后在终端中运行即可。

模型微调部分

首先是数据集要求。

 你需要在videollama2-main文件夹中创建一个dataset文件夹,里面的内容如上图。

custom.json文件为训练内容,如下图

id内容可以任意,图片对应的键可以为:“video”也可以为:“image”,路径对应,就我训练的情况而言,内容必须一张图片和一段视频成一组,按照图中的格式,图片和视频的内容不需要有关联。

模型训练

我花在这部分的时间是最久的,前面只需要2天左右就可以完成,这部分花了我一个多星期。

首先在videollama2-main文件夹中找到scripts\custom文件夹,这里面为训练的脚本文件,我选择的是finetune.sh脚本,将里面的内容进行修改

文件中的
--node_rank $RANK \
    /root/private_data/videollama2/VideoLLaMA2-main/videollama2/train.py \
 --model_path /root/private_data/videollama2/videollama2-7B \
 --vision_tower /root/private_data/videollama2/clip-vit-large-patch14 \

 --data_path   ${DATA_DIR}/custom_sft/custom.json \
 --data_folder ${DATA_DIR}/custom_sft/ \
部分改成对应模型实际路径,我都用的绝对路径。

--pretrain_mm_mlp_adapter部分用到了一个.bin文件,需要到对应的base模型下载对应的.bin文件,我的是videollama2-7B,我需要进入到videollama2-7B-base中下载mm_projector1.bin文件,放入自己的文件夹中,填入对应的路径。
我的是--pretrain_mm_mlp_adapter /root/private_data/videollama2/videollama2-7B/mm_projector1.bin \

 此外,在运行时,会出现找不到模型文件的import报错,是因为训练部分的python文件导入层级错误的问题,需要结合实际进行更改。更改完这些之后,就是运行脚本进行训练,我用了两张A800来进行训练的,需要进行分布式训练,我是单机多卡进行训练,需要对应修改脚本中的内容

ARG_WORLD_SIZE=1  # 机器数量,单机用1
ARG_NPROC_PER_NODE=2  # 使用GPU数量

训练参数部分根据实际情况进行更改,这是我的修改

# 训练参数
GLOBAL_BATCH_SIZE=8
LOCAL_BATCH_SIZE=4

 更改完成这些之后,正常的话运行脚本会出现训练进度,如图

 训练完成之后会出现一个新的文件夹,部分内容如下

然后按照部署的步骤来即可。

---------------------------------------------------------------------------------------------------

训练过程中还出现了许多其他的错误 ,由于记录时间比较久远找不到之前报错的内容了,没有写在文章里了。后续有机会再补充。

文章参考:

VideoLLaMA2部署 && huggingface命令的使用_video llama 2-优快云博客

GitHub - DAMO-NLP-SG/VideoLLaMA2: VideoLLaMA 2: Advancing Spatial-Temporal Modeling and Audio Understanding in Video-LLMs

                                                                                                                                                                                                                                                                                                                                           

### 部署微调 DeepSeek #### 部署 DeepSeek-R1 模型 为了成功部署 DeepSeek-R1 模型,建议遵循官方提供的详细指南。该模型支持多种环境下的安装配置,特别是对于初学者非常友好[^2]。 在准备阶段,确保已准备好合适的硬件资源以及必要的软件依赖项。通常情况下,在服务器上运行此模型需要具备一定计算能力的 GPU 设备来加速处理速度。完成前期准备工作之后,可以按照如下命令通过 pip 安装所需的 Python 库: ```bash pip install deepspeed ``` 这一步骤能够简化后续训练过程中涉及的大规模并行运算操作[^3]。 #### 微调 DeepSeek-R1 模型 关于为何要对预训练好的 DeepSeek-R1 进行微调,主要是因为特定应用场景下可能存在不同于通用场景的数据分布特点。通过对少量领域内样本数据的学习调整权重参数,可以使模型更好地适应具体任务需求,从而提高性能表现[^1]。 当执行微调时,推荐采用 Hugging Face Transformers 结合 Deepspeed 来优化训练流程。下面是一个简单的例子展示如何设置 `TrainingArguments` 参数来进行高效分布式训练: ```python from transformers import TrainingArguments, Trainer training_args = TrainingArguments( output_dir='./results', evaluation_strategy="epoch", per_device_train_batch_size=8, per_device_eval_batch_size=8, num_train_epochs=3, weight_decay=0.01, logging_dir='./logs', deepspeed="./configs/deepspeed_config.json" ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=test_dataset ) ``` 上述代码片段展示了利用 Deepspeed 实现更高效的内存管理和更快的速度提升方式之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值