littlebot
Published on 2025-04-11 / 0 Visits
0

【源码】基于OneFlow和BERT的分布式预训练模型项目

项目简介

本项目是基于OneFlow计算框架和BERT预训练模型的分布式训练项目。利用大规模数据集对BERT模型进行预训练,并通过Fine-tuning在特定任务上进行微调,涵盖模型定义、数据加载、优化器构建以及分布式训练策略。

项目的主要特性和功能

  1. BERT模型训练:支持在Wikipedia和BookCorpus数据集上预训练BERT模型,在SQuAD数据集上进行Fine-tuning。
  2. 分布式训练:支持多机多卡混合并行训练,包含数据并行、模型并行和流水并行。
  3. 灵活的并行策略:提供intra_first和inter_first等并行策略,可依模型参数量和GPU资源灵活配置。
  4. OneFlow框架:借助OneFlow计算框架实现高效的分布式计算。
  5. 实验结果:提供详细实验环境和结果,展示不同并行策略下的训练性能。

安装使用步骤

假设用户已经下载了本项目的源码文件。 1. 安装OneFlowshell pip install oneflow 2. 准备数据集: - 下载Wikipedia和BookCorpus数据集用于预训练。 - 下载SQuAD数据集用于Fine-tuning。 3. 配置参数: - 根据需求修改配置文件,如config.yaml,设置参数如nproc_per_nodenode_rankmaster_addr等。参数说明如下: | 参数名 | 描述 | 示例 | |--------|------|------| | nproc_per_node | 每个节点的进程数目 | 3 | | node_rank | 节点的rank | 0 | | master_addr | master的IP地址 | cn1(可以使用域名) | | master_port | master端口 | 7788 | | num_hidden_layers | encoder layer的层数 | 24 | | num_attention_heads | attention的头数,默认每个头是64维 | 16 | | gpu_num_per_node | 每个节点使用的GPU数量 | 3 | | grad-acc-steps | 梯度累积 | 3 | | seq_length | 序列长度 | 128 | | train-global-batch-size | 全局batch_size | 24 | | learning_rate | 学习率 | 0.00005 | | nums_split | 模型切分数目 | 3 | | ofrecord_path | 训练数据集目录 | ../data/wiki_ofrecord_seq_len_128 | | strategy | 模型并行策略 | intra_first 或 inter_first | 4. 运行训练脚本shell ./run_ppl.sh ${node_rank}

分布式训练策略

  • intra_first:模型并行优先放置在节点内(机器内的多个GPU上,节点间数据并行)。
  • inter_first:模型并行优先放置在节点间(节点内数据并行)。

实验结果

| 并行策略 | 参数量 | GPU数量 | 单个step执行时间(s) | |----------|--------|---------|----------------------| | intra_first | 24层16头 | 双机双卡(4GPU) | 1.20 | | inter_first | 24层16头 | 双机双卡(4GPU) | 0.80 | | intra_first | 24层32头 | 三机三卡(9GPU) | 5.25 | | inter_first | 24层32头 | 三机三卡(9GPU) | 2.84 | | intra_first | 48层32头 | 四机四卡(16GPU) | 10.96 | | inter_first | 48层32头 | 四机四卡(16GPU) | 5.23 |

注意事项

  • 确保已正确安装OneFlow计算框架。
  • 根据实际需求修改配置文件和数据路径。
  • 在分布式环境中运行时,确保节点间的通信和网络连接正常。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】