四期 从零入门多模态大模型数据合成

#ai夏令营 #datawhale #夏令营

Task1 环境配置,跑通baseline

任务目标
  • 赛事环境配置 & 跑通baseline
  • 多模态大模型训练脚本
  • 熟悉data-juicer
任务流程
服务器租用

在autoDL上租用实例进行训练

  • 使用单卡120G内存的实例规格(配置成功的是这一个方案)
    在这里插入图片描述
  • 使用双卡,每张卡80G内存的实例规格(未尝试)
    在这里插入图片描述
基础环境配置

由于我们选取了社区镜像,所以机子里面的conda是有一套配置好的环境dj

conda activate dj
pip show flash-attn

查看关键的flash-attn包是否存在,输出包的信息即说明环境配置正确

若后续发生错误,则需检查环境完整性

cd ~/autodl-tmp/better_synth_baseline_autoDL
bash install.sh
模型数据集下载

这个就按照步骤在终端写以下指令

cd better_synth_baseline_autoDL
# 下载部分模型和数据
bash download.sh
# 下载BLIP 模型
python download_blip.py

最终查看是否出现报错以及是否存在model文件夹

数据处理
dj-process --config solution/image_captioning.yaml

Data-Juicer的核心是其包含超过80个高度系统化且可复用的算子(operators),这些算子构成了强大的数据处理工具箱,允许用户灵活地对数据进行清洗、生成、分析与转换。值得注意的是,它支持通过配置文件实现流程自动化,减少了手动编码的需求,大大提升了效率。此外,采用高效的并行处理框架,如Aliyun-PAI、Ray、Slurm和CUDA,Data-Juicer优化了资源利用,加快了数据处理速度,降低了计算成本。

项目中通过data-juicer为数据集中的图片生成一段描述,可以通过下图看出来
在这里插入图片描述

模型训练 & 推理测评

这一步的shell代码也在train_mgm_2b_stage_1.sh的后半段,可以简单看一下

# train model
PRETRAIN_NAME=MGM-2B-Pretrain-$EXP_NAME
FINETUNE_NAME=MGM-2B-Finetune-$EXP_NAME
AUX_SIZE=768

NUM_TRAIN_EPOCHS=1
PRETRAIN_SAMPLE_NUM=200000

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

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

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

# inference for submission
# TextVQA
echo "Infer on TextVQA..."
bash $SCRIPT_DIR/eval/textvqa.sh $FINETUNE_NAME $INFER_CUDA_IDX
# MMBench
echo "Infer on MMBench..."
bash $SCRIPT_DIR/eval/mmbench.sh $FINETUNE_NAME "mmbench_dev_20230712" $INFER_CUDA_IDX

# copy this script to output
cp $0 $SCRIPT_DIR/../output/train.sh

# info
echo "Training and Inference done."
echo "Training checkpoints are stored in output/training_dirs/$FINETUNE_NAME."
echo "Inference results are stored in output/eval_results/$FINETUNE_NAME."

$SCRIPT_DIR也就当前我们所在位置,toolkit目录下,所以需要

cd better_synth_baseline_autoDL/toolkit

上面这一段代码其实就是对数据集输入、训练策略、模型、输出位置进行了一个指定,最终我们可以在MGM-2B-Finetune-defaultMGM-2B-Pretrain-default获得咱们这一次训练的结果

构建zip文件
  • solution文件夹
  • 存放评估后的结果文件夹:output/eval_results
  • 训练的sh文件:train.sh
  • finetuning过程的日志文件:MGM-2B-Finetune-default/finetuning.log
  • pretrain过程的日志文件:MGM-2B-Pretrain-default/pretrain.log

代码如下:

# 方案一
cd submit

cp -r /root/autodl-tmp/better_synth_baseline_autoDL/solution .

cp -r /root/autodl-tmp/better_synth_baseline_autoDL/output/eval_results output/

cp -r /root/autodl-tmp/better_synth_baseline_autoDL/output/train.sh output/

cp /root/autodl-tmp/better_synth_baseline_autoDL/output/training_dirs/MGM-2B-Finetune-default/finetuning.log output/training_dirs/MGM-2B-Finetune-image_recaption/

cp /root/autodl-tmp/better_synth_baseline_autoDL/output/training_dirs/MGM-2B-Pretrain-default/pretrain.log output/training_dirs/MGM-2B-Pretrain-image_recaption/

zip -r submit.zip solution output

# 方案二
cd better_synth_baseline_autoDL

zip -r submit.zip solution
 
zip -r submit.zip output/eval_results 
 
zip submit.zip output/train.sh

zip submit.zip output/training_dirs/MGM-2B-Pretrain-default/pretrain.log

zip submit.zip output/training_dirs/MGM-2B-Finetune-default/finetuning.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值