academic-budget-bert

academic-budget-bert

学术预算下的BERT模型高效训练方案

该项目提供一套脚本,用于在有限计算资源和时间预算下预训练和微调BERT类模型。基于DeepSpeed和Transformers库,项目实现了时间感知学习率调度和混合精度训练等优化技术。此外,还包含数据预处理、检查点保存和验证调度等功能,并提供训练命令生成工具。这些方法使研究人员能在学术预算限制内高效训练大型语言模型。

BERT预训练微调深度学习自然语言处理Github开源项目

项目终止

Intel 将不再维护此项目。 此项目已被确定存在已知的安全漏洞。 Intel 已停止对该项目的开发和贡献,包括但不限于维护、错误修复、新版本发布或更新。 Intel 不再接受此项目的补丁。

在有限的计算/时间(学术)预算下训练 BERT

本仓库包含了在有限时间和计算预算下预训练和微调 BERT 类模型的脚本。 代码基于以下论文中提出的工作:

Peter Izsak, Moshe Berchansky, Omer Levy, 如何在学术预算内训练 BERT (EMNLP 2021)。

安装

预训练和微调脚本基于 Deepspeed 和 HuggingFace Transformers 库。

初步安装

我们建议创建一个包含 Python 3.6+、PyTorch 和 apex 的虚拟环境。

安装要求

pip install -r requirements.txt

我们建议运行 Deepspeed 的工具 ds_report 并验证 Deepspeed 组件是否可以编译(JIT)。

数据集

dataset 目录包含了用于预处理我们在实验中使用的数据集(维基百科、Bookcorpus)的脚本。详细信息请参阅专门的 README

预训练

预训练脚本: run_pretraining.py

查看所有可能的预训练参数: python run_pretraining.py -h

我们强烈建议查看我们在库中提供的各种训练功能

使用我们论文中提出的最佳配置进行训练的示例(24层/1024H/基于时间的学习率调度/fp16):
deepspeed run_pretraining.py \ --model_type bert-mlm --tokenizer_name bert-large-uncased \ --hidden_act gelu \ --hidden_size 1024 \ --num_hidden_layers 24 \ --num_attention_heads 16 \ --intermediate_size 4096 \ --hidden_dropout_prob 0.1 \ --attention_probs_dropout_prob 0.1 \ --encoder_ln_mode pre-ln \ --lr 1e-3 \ --train_batch_size 4096 \ --train_micro_batch_size_per_gpu 32 \ --lr_schedule time \ --curve linear \ --warmup_proportion 0.06 \ --gradient_clipping 0.0 \ --optimizer_type adamw \ --weight_decay 0.01 \ --adam_beta1 0.9 \ --adam_beta2 0.98 \ --adam_eps 1e-6 \ --total_training_time 24.0 \ --early_exit_time_marker 24.0 \ --dataset_path <数据集路径> \ --output_dir /tmp/training-out \ --print_steps 100 \ --num_epochs_between_checkpoints 10000 \ --job_name pretraining_experiment \ --project_name budget-bert-pretraining \ --validation_epochs 3 \ --validation_epochs_begin 1 \ --validation_epochs_end 1 \ --validation_begin_proportion 0.05 \ --validation_end_proportion 0.01 \ --validation_micro_batch 16 \ --deepspeed \ --data_loader_type dist \ --do_validation \ --use_early_stopping \ --early_stop_time 180 \ --early_stop_eval_loss 6 \ --seed 42 \ --fp16

基于时间的训练

通过定义 --total_training_time=24.0 (例如24小时),可以将预训练限制在基于时间的值内。

基于时间的学习率调度

学习率可以根据配置的总训练时间进行调度变化。参数 --total_training_time 控制分配给训练器运行的总时间,必须指定此参数才能使用基于时间的学习率调度。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/c99e785c-7fbe-49a7-bc2f-30b26270ad75.png" alt="基于时间的学习率调度" width="450"/> </p> 要选择基于时间的学习率调度,请定义`--lr_schedule time`,并为衰减曲线定义形状(例如,如图所示的`--curve=linear`)。学习率的预热阶段通过指定一个比例(`--warmup_proportion`)来定义,该比例占训练会话可用时间预算的一部分(由`--total_training_time`定义)。例如,对于24小时的训练会话,`warmup_proportion=0.1`将占24小时的10%,即2.4小时(或144分钟)达到峰值学习率。然后学习率将被调度在时间预算结束时达到0。我们参考提供的图表作为示例。

检查点和微调检查点

可以启用两种类型的检查点:

  • 训练检查点 - 保存模型权重、优化器状态和训练参数。由--num_epochs_between_checkpoints定义。
  • 微调检查点 - 保存模型权重和配置,以便稍后用于微调。由--finetune_time_markers定义。

finetune_time_markers可以通过提供整体训练进度的时间标记列表来分配训练时间预算中的多个点。例如,--finetune_time_markers=0.5将在达到训练时间预算的50%时保存一个微调检查点。对于多个微调检查点,使用逗号而不带空格,如0.5,0.6,0.9

验证调度

使用--do_validation在预训练时启用验证

使用--validation_epochs=<num>控制验证运行之间的epoch数

要控制开始和结束时的验证运行次数(运行次数多于validation_epochs),使用validation_begin_proportionvalidation_end_proportion指定时间比例,并使用validation_epochs_beginvalidation_epochs_end相应地控制自定义值。

混合精度训练

通过添加--fp16支持混合精度。使用--fp16_backend=ds来使用Deepspeed的混合精度后端,使用--fp16_backend=apex来使用apex--fp16_opt控制优化级别)。

微调

使用run_glue.py对保存的检查点在GLUE任务上进行微调。

微调脚本与Huggingface提供的脚本相同,只是增加了我们的模型。

有关所有可能的预训练参数,请参见:python run_glue.py -h

MRPC微调示例:
python run_glue.py \ --model_name_or_path <模型路径> \ --task_name MRPC \ --max_seq_length 128 \ --output_dir /tmp/finetuning \ --overwrite_output_dir \ --do_train --do_eval \ --evaluation_strategy steps \ --per_device_train_batch_size 32 --gradient_accumulation_steps 1 \ --per_device_eval_batch_size 32 \ --learning_rate 5e-5 \ --weight_decay 0.01 \ --eval_steps 50 --evaluation_strategy steps \ --max_grad_norm 1.0 \ --num_train_epochs 5 \ --lr_scheduler_type polynomial \ --warmup_steps 50

生成预训练命令

我们提供了一个有用的脚本,通过使用python generate_training_commands.py来生成多个(或单个)预训练命令。

python generate_training_commands.py -h --param_file PARAM_FILE 超参数和配置yaml --job_name JOB_NAME 作业名称 --init_cmd INIT_CMD 初始化命令(deepspeed或直接python)

必须定义一个参数yaml,其中包含两个主要键:hyperparameters,其中参数值定义为可能值列表,以及default_parameters作为默认值。每个生成的命令将是hyperparameters部分中指定的各种参数的可能组合。

示例:

hyperparameters: param1: [val1, val2] param2: [val1, val2] default_parameters: param3: 0.0

将生成:

deepspeed run_pretraining.py --param1=val1 --param2=val1 --param3=0.0 deepspeed run_pretraining.py --param1=val1 --param2=val2 --param3=0.0 deepspeed run_pretraining.py --param1=val2 --param2=val1 --param3=0.0 deepspeed run_pretraining.py --param1=val2 --param2=val2 --param3=0.0

引用

如果你觉得这篇论文或这段代码有用,请引用这篇论文:

@inproceedings{izsak-etal-2021-train,
    标题 = "如何在学术预算内训练BERT",
    作者 = "Izsak, Peter 和
      Berchansky, Moshe 和
      Levy, Omer",
    会议论文集 = "2021年自然语言处理实证方法会议论文集",
    月份 = 11月,
    年份 = "2021",
    出版社 = "计算语言学协会",
    网址 = "https://aclanthology.org/2021.emnlp-main.831",
}

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多