Skip to content

Graph Bert 模型搭建 #187

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions