跑通baseline过程
环境配置和工具安装
首先在autodl下选择一个北京B区,120G内存,可扩容的主机,选择社区镜像:
之后开启实例,下载开发套件
conda activate dj
cd autodl-tmp/
git clone https://www.modelscope.cn/datasets/Datawhale/better_synth_baseline_autoDL.git
安装基础工具
apt update
apt install axel zip file
pip install modelscope
下载模型和数据集
cd better_synth_baseline_autoDL
bash download.sh # 需要50分钟
运行python download_blip.py下载BLIP模型
数据处理和合成
运行如下命令
conda activate dj
cd autodl-tmp/better_synth_baseline_autoDL
dj-process --config ./image_split_10.yaml
dj-process --config ./image_captioning_10.yaml
模型训练和推理测评
bash train_mgm_2b_stage_one_card.sh # 需要3小时
打包提交zip
终端中执行如下命令,之后下载submit.zip进行提交即可
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-Pretrain-*/pretrain.log output/training_dirs/MGM-2B-Pretrain-image_recaption/
cp /root/autodl-tmp/better_synth_baseline_autoDL/output/training_dirs/MGM-2B-Finetune-*/finetuning.log output/training_dirs/MGM-2B-Finetune-image_recaption/
zip -r submit.zip solution output
相关知识点
详细介绍
1. MGM-2B
MGM-2B是一种多模态生成模型,具备处理图像和文本信息的能力,常用于任务如图像描述生成、图像再标注、视觉问答等。MGM-2B基于大型Transformer架构,能有效建模图像与文本之间的复杂关系。该模型通常通过预训练和微调两个阶段来提升其在特定任务中的表现。
- 架构:MGM-2B基于Transformer的架构,通过多层自注意力机制来处理输入的图像和文本数据。
- 任务:适用于多模态任务,如图像标注、文本生成、视觉问答等。
- 训练策略:MGM-2B通常在大规模的多模态数据集上进行预训练,然后在特定的任务上进行微调,以优化模型在该任务中的性能。
2. BLIP (Bootstrapping Language-Image Pre-training)
BLIP是一种专注于图像和文本联合学习的多模态模型。它能够将图像输入转化为文本描述,也可以生成与文本相关的图像。BLIP通过大规模数据集的预训练,展示了在视觉问答、图像描述生成等任务中的强大性能。
- 任务:图像描述生成、视觉问答、跨模态检索等。
- 架构:BLIP采用Transformer架构,结合了图像编码器和文本编码器,用于处理和生成多模态数据。
- 特点:BLIP能够在没有大量标注数据的情况下,通过自监督学习提升多模态任务的性能。
3. ModelScope
ModelScope是由阿里巴巴达摩院开发的开源平台,提供了一系列预训练模型、数据集和工具,支持多个AI任务,如自然语言处理、计算机视觉、语音识别等。通过ModelScope,用户可以方便地调用和集成各种预训练模型,应用于不同的任务场景。
- 功能:提供模型调用、模型训练、数据处理等功能。
- 支持的任务:NLP、CV、多模态、语音等多种AI任务。
- 优势:ModelScope封装了复杂的训练和推理过程,降低了用户使用AI技术的门槛。
4. Axel
Axel是一个轻量级的命令行下载工具,支持多线程下载,可以显著提高下载速度。它特别适合用于下载大文件或需要多线程并行处理的场景。
- 特点:多线程下载、断点续传、简单易用。
- 用途:Axel广泛用于在Linux环境中下载大文件,尤其是在需要快速获取大数据集或模型文件的场景中。
代码解释
train_mgm_2b_stage_1.sh
该脚本是一个用于训练和推理MGM-2B模型的Bash脚本,包含了环境设置、预处理、训练、微调和推理的完整流程。
#!/bin/bash
- 声明该脚本是使用Bash执行的。
export CUDA_VISIBLE_DEVICES=0
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
- CUDA_VISIBLE_DEVICES:指定使用的GPU设备编号。
- NCCL_P2P_DISABLE和NCCL_IB_DISABLE:用于禁用NCCL的P2P和InfiniBand支持,可能用于解决特定的通信问题。
EXP_NAME=default
PRETRAIN_DATASET=../output/image_captioning_output/res_10k.jsonl
PRETRAIN_DATASET_IMAGE_PATH=../input/pretrain_stage_1_10k
- EXP_NAME:实验名称,用于标识不同的训练实验。
- PRETRAIN_DATASET和PRETRAIN_DATASET_IMAGE_PATH:指定预训练阶段使用的数据集和图像路径。
PRETRAIN_BATCH_SIZE_PER_GPU=4
PRETRAIN_GRADIENT_ACCUMULATION_STEPS=64
- PRETRAIN_BATCH_SIZE_PER_GPU:每个GPU的批次大小。
- PRETRAIN_GRADIENT_ACCUMULATION_STEPS:梯度累积步数,用于在内存受限时模拟更大的批次大小。
PRETRAIN_PASS=`python $SCRIPT_DIR/training/preprocess/check_global_batch_size.py $PRETRAIN_BATCH_SIZE_PER_GPU $PRETRAIN_GRADIENT_ACCUMULATION_STEPS 256`
- 使用Python脚本检查预训练阶段的全局批次大小是否正确,即
PRETRAIN_BATCH_SIZE_PER_GPU * PRETRAIN_GRADIENT_ACCUMULATION_STEPS
是否等于256。
python $SCRIPT_DIR/data-juicer/tools/multimodal/data_juicer_format_to_target_format/dj_to_llava.py $SAMPLED_PRETRAIN_DATASET $PRETRAIN_DATASET_JSON --image_special_token "<__dj__image>" --restore_questions True --original_llava_ds_path $ORIGINAL_DATASET_ALL
- 将数据集从
dj
格式转换为llava
格式,并在图像标记中添加特殊令牌。
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 \
...
- 使用DeepSpeed启动训练,指定模型路径、版本、数据路径、图像文件夹、训练参数等。DeepSpeed是一种优化大规模模型训练的工具,能显著提高训练效率。
bash $SCRIPT_DIR/eval/textvqa.sh $FINETUNE_NAME $INFER_CUDA_IDX
- 执行推理任务,例如在TextVQA(视觉问答)数据集上进行推理。
cp $0 $SCRIPT_DIR/../output/train.sh
- 将当前脚本复制到输出目录,便于记录和复现实验。