Skip to content

Graph Bert 模型搭建 #187

@L1aoXingyu

Description

@L1aoXingyu

在本 issue 中主要记录 Graph Bert 模型搭建的流程以及中间的结果,搭建过程主要分为4步:

  • 模型结构
  • 模型训练流程
  • 下游任务的 finetune 测试指标
  • README 以及相关文档和工具代码

模型结构的正确性验证

模型结构的正确性验证中主要包括下面两个步骤:

  • Graph 载入 Lazy 模型,在相同输入时,对齐输出结果和 loss (廖星宇)
  • Eager, Graph 和 Lazy 模型使用相同的初始化,关掉模型中的随机性(Dropout) 和数据读取的随机性(random shuffle),关掉 lr scheduler,使用 SGD 进行 1000 轮 loss 对齐 (廖星宇)

使用 dataset/bert_regression_test/0/part-0,训练配置如下

batch size: 32
iter_num: 1000
lr: 1e-3
optimizer: SGD, momentum=0.9
scheduler: None
oneflow commit: ba36de99c

1000 轮 loss 曲线

lazy_eager_graph_loss

从上面的结果来看,eager, graph 和 lazy 在相同的数据集上训练 1000 轮,loss 曲线近似重合,可以认为三种方式的结果已经对齐。

模型结构的正确性验证 double check(程鹏)

目前看来lazy和graph版本几乎可以对齐,但是lazy和eager版本还是有差距

实验配置

  • 采用相同的模型初始化(load from lazy),关掉dataloader中的随机元素,关掉dropout
batch size: 32
iter_num: 1000
lr: 5e-4
scheduler: None
optimizer:SGD, momentum=0.9

模型训练流程的正确性验证

模型的训练流程主要包括下三个流程

  • 完成模型训练所需依赖,在单卡上进行 1000 轮 loss 对齐 Lazy 结果
    • 完成 AdamW with weight_decay_excludes (廖星宇)
      lazy_graph_adamw_loss
    • 完成 polynominal lr scheduler (程鹏)
    • 完成 warmup lr scheduler (程鹏)
      • polynomial_scheduler+warmuplr, 在sgd上可以完美对齐,但是在adam和adamw上有细微偏差。
        lazy_graph_sgd
        lazy_graph_adamw
        lazy_graph_adam
    • 完成 AMP(程鹏)
      • polynomial_scheduler+warmuplr+amp
        lazy_graph_sgd_amp
    • 完成 clip gradient (程鹏)
    • 完成 gradient accumulation
    • 完成 Graph consistent 多卡
    • 完成 eager DDP 多卡
    • LAMB optimizer
  • 使用 8 卡进行模型训练
  • 进行多卡训练性能测试

下游任务 finetune 测试指标验证

下游任务的精度验证主要分为下面三个过程:

  • 载入 train 好的 Lazy 模型权重,进行下游任务 finetune,在 SQuAD 上进行精度验证 (廖星宇)

  • 根据 TensorFlow Bert 官方实现加入所有下游任务的评测 (廖星宇)
    Lazy Bert 使用不同的 pretrain model 结果如下

    • 使用 tf pretrain model 得到的结果 {"exact_match": 81.7123935666982, "f1": 89.07152353706256}
    • 使用 of pretrain model 得到的结果 {"exact_match": 73.50993377483444, "f1": 82.1944788581551}

    Graph Bert 使用不同的 pretrain model 结果如下

    • 使用 tf pretrain model 得到的结果 {"exact_match": 82.57332071901608, "f1": 89.63355726606137}
    • 使用 of pretrain model 得到的结果 {"exact_match": 73.30179754020814, "f1": 82.10048936661447}

    在 tf 官方实现中需要对齐的精度为 {"exact_match": 80.71901608325449, "f1": 88.4073447260652},在使用和 tf 相同的 pretrain model 进行训练可以认为已经对齐了 SQuAD 的精度,of pretrain model 的问题等待后续 check

  • 载入 train 好的 graph 模型权重,进行下游任务 finetune,在 SQuAD 上进行精度验证

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions