(6)山东大学项目创新实训第十二周——调整模型参数,微调VisualGLM 6B模型

一、分析模型参数,确定可调整的参数

在微调脚本中,有多处参数可以调整以优化训练过程和模型性能。以下是各个参数的详细说明及其可能的调整方向:

可调参数
  1. NUM_WORKERSNUM_GPUS_PER_WORKER:

    • NUM_WORKERS: 训练使用的工作节点数。默认设置为1,可以根据可用资源增加以进行多节点训练。
    • NUM_GPUS_PER_WORKER: 每个节点的GPU数量。根据实际硬件配置调整。
  2. MP_SIZE:

    模型并行大小。默认设置为1,可以在大模型训练时增加以分布计算负载。
  3. MODEL_ARGS:

    • --max_source_length: 最大输入长度。根据任务需求调整,例如增加以处理更长的输入。
    • --max_target_length: 最大输出长度。根据任务需求调整,例如增加以生成更长的输出。
    • --lora_rank: LoRA的秩。增加或减少该值以控制微调的灵活性和计算量。
    • --layer_range: 选择进行LoRA微调的层范围。调整以选择不同的层进行微调。
    • --pre_seq_len: 前缀序列长度。根据任务需要调整以影响模型的上下文理解能力。
  4. NCCL 配置:

    • NCCL_DEBUG: NCCL的调试信息级别,可以设置为infowarnerror等。
    • NCCL_IB_DISABLE: 是否禁用NCCL的IB。设置为0表示启用,1表示禁用。
    • NCCL_NET_GDR_LEVEL: GDR级别。根据硬件配置和性能需求调整。
  5. 训练和验证数据路径:

    train_dataeval_data: 训练和验证数据的路径。确保路径正确并包含合适的数据格式。
  6. GPT 训练选项:

    • --train-iters: 训练迭代次数。根据数据量和任务复杂度调整。
    • --lr-decay-style: 学习率衰减样式。可选择cosinelinear等。
    • --warmup: 预热比例。调整以控制学习率预热阶段的长度。
    • --save-interval: 保存间隔。根据训练时间和需要调整保存频率。
    • --eval-interval: 评估间隔。根据需要调整评估频率。
    • --split: 数据拆分比例。根据数据集情况调整。
    • --eval-iters: 评估迭代次数。调整以控制评估数据量。
    • --eval-batch-size: 评估批次大小。根据显存大小和评估速度调整。
    • --zero-stage: ZeRO优化阶段。调整以控制显存优化策略。
    • --lr: 学习率。根据任务和模型收敛速度调整。
    • --batch-size: 训练批次大小。根据显存大小和数据量调整。
    • --use_lora: 是否启用LoRA微调。根据需要启用或禁用。

二、调参记录

1.增加迭代次数和评估频率

训练迭代次数和评估频率是控制训练过程和模型评估的关键参数。调整这些参数可以提高模型的最终性能和评估的频率。训练迭代次数(--train-iters默认值为500,可以将其增加到1000以提高模型的训练时间和最终性能。增加训练迭代次数可以让模型有更多机会学习数据,但会增加训练时间。

评估频率(--eval-interval):默认值为10000,可以将其调整为500以增加评估的频率。增加评估频率可以更频繁地监控模型的性能变化,及时发现训练中的问题。

--train-iters 500 \
--eval-interval 300 \
2.修改微调层范围和LoRA秩:

微调层范围和LoRA秩是控制微调灵活性和计算复杂度的关键参数。调整这些参数可以影响模型的微调效果和计算资源需求。微调层默认层范围可能是0和14,可以将其扩展为更多的层,以提高微调的灵活性和细致程度。

默认秩为10,可以将其调整为8以减少计算复杂度和显存占用。较低的LoRA秩可以减少训练时间和资源需求,但可能会影响模型性能。

--layer_range 0 2 4 6 8 10 12 14 \
--lora_rank 8 \
3.调整批次大小和学习率

批次大小和学习率是影响模型训练过程和性能的关键参数。调整这些参数可以显著改善模型的收敛速度和最终性能。较大的批次大小可以提高训练的稳定性,减少噪声,但需要更多的显存。
学习率默认值为0.0001,可以将其调整为0.00005以使模型训练更稳定。较小的学习率可以减少训练过程中的波动,有助于模型更好地收敛,但可能需要更多的训练迭代。

--batch-size 16 \
--lr 0.00005 \

将以上所有调整策略综合应用到微调脚本中,可以如下进行配置:

#! /bin/bash

NUM_WORKERS=1
NUM_GPUS_PER_WORKER=8
MP_SIZE=1

script_path=$(realpath $0)
script_dir=$(dirname $script_path)
main_dir=$(dirname $script_dir)
MODEL_TYPE="visualglm-6b"
MODEL_ARGS="--max_source_length 64 \
    --max_target_length 256 \
    --lora_rank 8 \
    --layer_range 0 2 4 6 8 10 12 14 \
    --pre_seq_len 4"

OPTIONS_NCCL="NCCL_DEBUG=info NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2"
HOST_FILE_PATH="hostfile"
HOST_FILE_PATH="hostfile_single"

train_data="./own_data/output.json"
eval_data="./own_data/output.json"

gpt_options=" \
       --experiment-name finetune-$MODEL_TYPE \
       --model-parallel-size ${MP_SIZE} \
       --mode finetune \
       --train-iters 1000 \
       --resume-dataloader \
       $MODEL_ARGS \
       --train-data ${train_data} \
       --valid-data ${eval_data} \
       --distributed-backend nccl \
       --lr-decay-style cosine \
       --warmup .02 \
       --checkpoint-activations \
       --save-interval 100 \
       --eval-interval 500 \
       --save './checkpoints' \
       --split 1 \
       --eval-iters 10 \
       --eval-batch-size 8 \
       --zero-stage 1 \
       --lr 0.00005 \
       --batch-size 16 \
       --skip-init \
       --fp16 \
       --use_lora
"

run_cmd="${OPTIONS_NCCL} deepspeed --master_port 16666 --hostfile ${HOST_FILE_PATH} finetune_visualglm.py ${gpt_options}"
echo ${run_cmd}
eval ${run_cmd}

set +x

三、调参结果

将上述参数进行控制变量法调试,进行模型微调和推理,通过对比同张图片的回答来评估模型的效果。对于同张图片,
微调前的回答:

微调后的回答:

我们数据集的普遍labels:

可以看到,通过更改模型参数,微调后的模型回答的模式更接近数据集的labels,但是它仍缺乏景点识别的准确性,无法正确识别图像中的文字。这一缺陷是由于模型本身的局限性,官方也指出了VisualGLM 6B目前处于v1阶段,图像描述事实性/模型幻觉问题,图像细节信息捕捉不足,以及一些来自语言模型的局限性。尽管模型在训练的各个阶段都尽力确保数据的合规性和准确性,但由于 VisualGLM-6B 模型规模较小,且模型受概率随机性因素影响,无法保证输出内容的准确性,且模型易被误导。
 

四、局限性

本项目正处于V1版本视觉和语言模型的参数、计算量都较小,我们总结了如下主要存在的改进方向:

  • 图像描述事实性/模型幻觉问题。在生成图像长描述的时候,距离图像较远时,语言模型的将占主导,有一定可能根据上下文生成并不存在于图像的内容。
  • 属性错配问题。在多物体的场景中,部分物体的某些属性,经常被错误安插到其他物体上。
  • 分辨率问题。本项目使用了224*224的分辨率,也是视觉模型中最为常用的尺寸;然而为了进行更细粒度的理解,更大的分辨率和计算量是必要的。
  • 由于数据等方面原因,模型暂时不具有中文ocr的能力(英文ocr能力有一些),我们会在后续版本中增加这个能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值