Oneflow-Inc / libai

LiBai(李白): A Toolbox for Large-Scale Distributed Parallel Training
https://libai.readthedocs.io
Apache License 2.0
390 stars 55 forks source link

MT5和T5的区别 #468

Closed MikeDean2367 closed 1 year ago

MikeDean2367 commented 1 year ago

你好,projects文件下的MT5和T5的区别是什么?如果我需要训练MT5,建议使用哪个代码为基准?

xiezipeng-ML commented 1 year ago

你好,projects文件下的MT5和T5的区别是什么?如果我需要训练MT5,建议使用哪个代码为基准?

建议使用projects/MT5

MikeDean2367 commented 1 year ago

你好,projects文件下的MT5和T5的区别是什么?如果我需要训练MT5,建议使用哪个代码为基准?

建议使用projects/MT5

非常感谢你的回复。我在阅读MT5文件时发现了以下的问题:

  1. libai/projects/MT5/configs/mt5_pretrain.py文件中使用的dataloader和tokenization来自libai/configs/common/data/t5_dataset.py文件,该文件中的tokenization使用的是BertTokenizer,而不是T5Tokenizer;
  2. 上面提到的dataloader实例化的类型在libai/libai/data/datasets/t5_dataset.py文件中的T5Dataset类,该类中存在cls_id mask_id等成员变量,当我将第1点中的BertTokenizer更换成T5Tokenizer时(并将vocab_file更换为huggingface中的spiece.model),若保持T5Dataset类不变,则会报错,因为T5的vocab中并不存在[CLS] [SEP] [MASK]特殊token。我将上面对应的成员变量删除后,发现在该类的getitem中存在build_training_sample函数的调用,该函数又调用了其他相关的函数,且都存在对于[CLS] [SEP] [MASK]的操作。

那么对于dataloader,我是否需要重新构建?还是说projects/T5中的dataloader可以借鉴?(T5中的dataloader使用的collate_fn位于libai/projects/T5/datasets/dataset.py文件中,在其call中返回的时候存在loss_mask,不太清楚这个是干什么作用的)

xiezipeng-ML commented 1 year ago

你好,projects文件下的MT5和T5的区别是什么?如果我需要训练MT5,建议使用哪个代码为基准?

建议使用projects/MT5

非常感谢你的回复。我在阅读MT5文件时发现了以下的问题:

  1. libai/projects/MT5/configs/mt5_pretrain.py文件中使用的dataloader和tokenization来自libai/configs/common/data/t5_dataset.py文件,该文件中的tokenization使用的是BertTokenizer,而不是T5Tokenizer;
  2. 上面提到的dataloader实例化的类型在libai/libai/data/datasets/t5_dataset.py文件中的T5Dataset类,该类中存在cls_id mask_id等成员变量,当我将第1点中的BertTokenizer更换成T5Tokenizer时(并将vocab_file更换为huggingface中的spiece.model),若保持T5Dataset类不变,则会报错,因为T5的vocab中并不存在[CLS] [SEP] [MASK]特殊token。我将上面对应的成员变量删除后,发现在该类的getitem中存在build_training_sample函数的调用,该函数又调用了其他相关的函数,且都存在对于[CLS] [SEP] [MASK]的操作。

那么对于dataloader,我是否需要重新构建?还是说projects/T5中的dataloader可以借鉴?(T5中的dataloader使用的collate_fn位于libai/projects/T5/datasets/dataset.py文件中,在其call中返回的时候存在loss_mask,不太清楚这个是干什么作用的)

你好,可以把T5Tokenzier兼容到T5Dataset中去,可以参考其他projects自己写一下,比较简单,我们的训练代码是和megatron保持一致的,所以使用了BertTokenizer,或者等待我们后续支持一下

MikeDean2367 commented 1 year ago

你好,projects文件下的MT5和T5的区别是什么?如果我需要训练MT5,建议使用哪个代码为基准?

建议使用projects/MT5

非常感谢你的回复。我在阅读MT5文件时发现了以下的问题:

  1. libai/projects/MT5/configs/mt5_pretrain.py文件中使用的dataloader和tokenization来自libai/configs/common/data/t5_dataset.py文件,该文件中的tokenization使用的是BertTokenizer,而不是T5Tokenizer;
  2. 上面提到的dataloader实例化的类型在libai/libai/data/datasets/t5_dataset.py文件中的T5Dataset类,该类中存在cls_id mask_id等成员变量,当我将第1点中的BertTokenizer更换成T5Tokenizer时(并将vocab_file更换为huggingface中的spiece.model),若保持T5Dataset类不变,则会报错,因为T5的vocab中并不存在[CLS] [SEP] [MASK]特殊token。我将上面对应的成员变量删除后,发现在该类的getitem中存在build_training_sample函数的调用,该函数又调用了其他相关的函数,且都存在对于[CLS] [SEP] [MASK]的操作。

那么对于dataloader,我是否需要重新构建?还是说projects/T5中的dataloader可以借鉴?(T5中的dataloader使用的collate_fn位于libai/projects/T5/datasets/dataset.py文件中,在其call中返回的时候存在loss_mask,不太清楚这个是干什么作用的)

你好,可以把T5Tokenzier兼容到T5Dataset中去,可以参考其他projects自己写一下,比较简单,我们的训练代码是和megatron保持一致的,所以使用了BertTokenizer,或者等待我们后续支持一下

好的,非常感谢,我先自己参考写一下