当前位置:AIGC资讯 > AIGC > 正文

DataWhale多模态赛事Task1

赛事链接:https://tianchi.aliyun.com/competition/entrance/532251/introduction?spm=a2c22.12281925.0.0.2f307137p8qZmp

赛事描述:在当下大数据、大模型时代,大数据是驱动大模型的能源。当前大模型的训练数据绝大部分来源于互联网上的信息,但随着大模型尺寸与性能逐渐提升,互联网上的海量数据也将逐渐使用殆尽,并且对于多模态大模型来说,这些海量资源在获取后,也需要极大的额外处理和人力标注才可以达到可用于训练大模型的水准。因此,如何借助已有的强大的大模型,在有限的计算资源下为新的模型训练流程高效合成优质的训练数据成为了一个新兴的值得关注的问题。“天池 Better Synth - 多模态大模型数据合成挑战赛”正是在这样的背景下产生,该比赛旨在鼓励参赛者探究合成数据对于多模态大模型训练的影响,以及促使参赛者追求高效的数据合成方法与策略,共同推进多模态大模型数据合成从 0-1 以及从 1-100 的前沿创新探索。
本次比赛关注于多模态大模型在图片理解任务上的能力,核心任务是在给定的种子数据集的基础上,通过高效的数据合成方法与模型生成出更优的数据,并在给定计算量的约束下,实现对图像理解多模态大模型的高效训练。

环境配置

流下贫穷的眼泪,在阿里云人工智能平台PAI,交互式建模(DSW),注意地址一定要选择在杭州,然后使用镜像地址:dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-training-algorithm/data-juicer-better-synth:0.0.1(不使用镜像,可以自己配,使用包里面的bash install.sh下载环境包,但可能出问题),a10 + 188G的内存,

下载模型和相关数据集

分别下载了Mini-Gemini (MGM-2B) 作为base模型,clip-vit-large-patch14-336和openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup作为CLIP(Contrastive Language-Image Pre-training)图像解码器,以及7b的BLIP(Bilingual Language-Image Pre-training)模型:blip2-opt-2___7b

它seed和fine-tune的数据集格式是这样的:

验证阶段基于公开测试基准的 TextVQA 和 MMBench 来进行:
MMbench通过指令,hint和图像让模型做选择题(包含各种类型的问题):

TextVQA则让模型根据图像回答问题:

数据处理

然后data juicer使用下载的BLIP模型生成对图像的描述:

训练模型

模型使用deepspeed的zero2算法来预训练和微调

# ------------- Pretrain ---------------
deepspeed $SCRIPT_DIR/training/mgm/train/train_mem.py \
    --deepspeed $SCRIPT_DIR/training/scripts/zero2_offload.json \
    --model_name_or_path $SCRIPT_DIR/training/model_zoo/LLM/gemma/gemma-2b-it \
    --version gemma \
    --data_path $PRETRAIN_DATASET_JSON \
    --image_folder $PRETRAIN_DATASET_IMAGE_PATH \
    --vision_tower $SCRIPT_DIR/training/model_zoo/OpenAI/clip-vit-large-patch14-336 \
    --vision_tower_aux $SCRIPT_DIR/training/model_zoo/OpenAI/openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup \
    --mm_projector_type mlp2x_gelu \
    --tune_mm_mlp_adapter True \
    --mm_vision_select_layer -2 \
    --mm_use_im_start_end False \
    --mm_use_im_patch_token False \
    --image_size_aux $AUX_SIZE \
    --bf16 True \
    --output_dir $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME \
    --num_train_epochs $NUM_TRAIN_EPOCHS \
    --per_device_train_batch_size $PRETRAIN_BATCH_SIZE_PER_GPU \
    --per_device_eval_batch_size 4 \
    --gradient_accumulation_steps $PRETRAIN_GRADIENT_ACCUMULATION_STEPS \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps $CKPT_SAVE_STEPS \
    --save_total_limit $TOTAL_SAVE_CKPT_LIMIT \
    --learning_rate 1e-3 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps $LOGGING_STEP \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --dataloader_num_workers $PRETRAIN_DATALOADER_NUM_WORKERS \
    --lazy_preprocess True \
    --report_to none \
    2>&1 | tee $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME/pretrain.log

mkdir -p $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME

#  ------------- Finetune ---------------
deepspeed $SCRIPT_DIR/training/mgm/train/train_mem.py \
    --deepspeed $SCRIPT_DIR/training/scripts/zero2_offload.json \
    --model_name_or_path $SCRIPT_DIR/training/model_zoo/LLM/gemma/gemma-2b-it \
    --version gemma \
    --data_path $SCRIPT_DIR/training/data/finetuning_stage_1_12k/mgm_instruction_stage_1_12k.json \
    --image_folder $SCRIPT_DIR/training/data/finetuning_stage_1_12k \
    --vision_tower $SCRIPT_DIR/training/model_zoo/OpenAI/clip-vit-large-patch14-336 \
    --vision_tower_aux $SCRIPT_DIR/training/model_zoo/OpenAI/openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup \
    --pretrain_mm_mlp_adapter $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME/mm_projector.bin \
    --mm_projector_type mlp2x_gelu \
    --mm_vision_select_layer -2 \
    --mm_use_im_start_end False \
    --mm_use_im_patch_token False \
    --image_aspect_ratio pad \
    --group_by_modality_length True \
    --image_size_aux $AUX_SIZE \
    --bf16 True \
    --output_dir $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME \
    --num_train_epochs $NUM_TRAIN_EPOCHS \
    --per_device_train_batch_size $FINETUNE_BATCH_SIZE_PER_GPU \
    --per_device_eval_batch_size 4 \
    --gradient_accumulation_steps $FINETUNE_GRADIENT_ACCUMULATION_STEPS \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps $CKPT_SAVE_STEPS \
    --save_total_limit $TOTAL_SAVE_CKPT_LIMIT \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps $LOGGING_STEP \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --dataloader_num_workers $FINETUNE_DATALOADER_NUM_WORKERS \
    --lazy_preprocess True \
    --report_to none \
    2>&1 | tee $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME/finetuning.log

开始预训练:

最后基本1.5左右

推理的脚本倒是没啥可说的,temperature设置的是0

结果

总结

文章概述了“天池Better Synth - 多模态大模型数据合成挑战赛”的背景、目标、环境配置、数据处理与模型训练过程,并简要介绍了比赛结果。以下是文章的主要总结:
### 赛事背景与目标
在大数据和大模型时代,互联网上的数据逐渐耗尽,且处理成本高昂。为了高效合成多模态大模型的优质训练数据,阿里云天池平台举办了“多模态大模型数据合成挑战赛”。该赛事旨在探究合成数据对多模态大模型训练的影响,并鼓励参赛者探索高效的数据合成方法与策略,推动该领域的创新与发展。
### 核心任务
- **环境配置**:使用阿里云人工智能平台PAI,推荐环境配置包括特定镜像(或自定义配置但不保证不出问题)、高性能计算资源(a10 + 188G内存)。
- **数据准备**:下载并使用了Mini-Gemini作为基底模型,多个CLIP图像解码器,以及BLIP双语语言图像预处理模型。数据集包括用于验证的TextVQA和MMBench。
- **数据处理**:利用下载的BLIP模型对图像进行描述生成,作为数据合成的基础。
- **训练模型**:
- **预训练**:使用deepspeed的zero2算法对Mini-Gemini模型进行预训练,结合多个视觉塔(Vision Tower)进行多模态训练。
- **微调**:在预训练基础上,对模型进行微调以适应特定任务(如TextVQA和问题回答),通过调整学习率、权重衰减等超参数以优化训练效果。
### 关键技术点
- **多模态大模型训练**:利用视觉与语言相结合的方式,提升模型在图像理解任务上的能力。
- **DeepSpeed与Zero2算法**:提高大规模模型训练时的内存效率和计算速度。
- **环境配置与计算资源优化**:通过合理配置计算资源(如高性能CPU和GPU),确保模型训练的高效进行。
### 实验结果
- 描述了模型训练的基本过程和最终推理设置(如temperature设置为0),但未具体展示训练效果或比赛成绩。
总之,此文章围绕天池挑战赛,详细介绍了多模态大模型数据合成的方法与流程,包括从环境配置、数据准备到模型训练的整个过程。通过此过程,参赛者可以探索高效的数据合成策略,提升多模态大模型的训练效果和在实际任务中的性能表现。

更新时间 2024-08-31