如何用学术预算训练BERT模型

Ray

学术预算下的BERT模型训练

在自然语言处理领域,像BERT这样的大型语言模型已经被广泛应用。然而,预训练这些模型通常被认为是只有少数资金充足的工业实验室才能承担得起的奢侈。那么,如何在更有限的预算下训练这样的模型呢?本文将介绍一种在24小时内使用单个低端深度学习服务器预训练掩码语言模型的方法。

项目背景

本文介绍的方法基于Peter Izsak、Moshe Berchansky和Omer Levy在EMNLP 2021会议上发表的论文《How to Train BERT with an Academic Budget》。该项目的代码已在GitHub上开源,可以在IntelLabs/academic-budget-bert仓库中找到。

核心理念

这种训练方法的核心在于通过软件优化、设计选择和超参数调优的组合,在原始预训练成本的一小部分下生成与BERT-base在GLUE任务上具有竞争力的模型。主要包括以下几个方面:

  1. 时间预算训练
  2. 基于时间的学习率调度
  3. 混合精度训练
  4. 验证调度优化
  5. 检查点设置

实现细节

预训练脚本

预训练使用run_pretraining.py脚本进行。以下是使用论文中最佳配置进行训练的示例命令:

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 <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小时内完成。这种基于时间的训练方法允许研究人员更好地控制训练过程,特别是在计算资源有限的情况下。

基于时间的学习率调度

学习率调度示意图

学习率可以根据配置的总训练时间进行调度变化。使用--lr_schedule time来选择基于时间的学习率调度,并通过--curve=linear定义退火曲线的形状。学习率的预热阶段由--warmup_proportion指定,它表示训练会话中可用时间预算的比例。

例如,对于24小时的训练会话,warmup_proportion=0.1将占用24小时的10%,即2.4小时(或144分钟)来达到峰值学习率。之后,学习率将按计划在时间预算结束时降至0。

检查点设置

系统支持两种类型的检查点:

  1. 训练检查点:保存模型权重、优化器状态和训练参数。通过--num_epochs_between_checkpoints定义。
  2. 微调检查点:保存模型权重和配置,以便后续进行微调。通过--finetune_time_markers定义。

finetune_time_markers可以通过提供整体训练进度的时间标记列表来分配训练时间预算中的多个点。例如,--finetune_time_markers=0.5将在达到50%的训练时间预算时保存一个微调检查点。

验证调度

通过--do_validation启用预训练期间的验证。使用--validation_epochs=<num>控制验证运行之间的周期数。为了控制开始和结束时的验证运行量,可以使用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任务的微调。以下是在MRPC任务上进行微调的示例命令:

python run_glue.py \
  --model_name_or_path <path to model> \
  --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

结论

通过这种方法,研究人员可以在有限的计算资源和时间预算下训练出与BERT-base性能相当的模型。这不仅大大降低了预训练的成本,也为更多的研究团队提供了探索和改进大型语言模型的机会。

该方法的成功证明,通过精心的优化和设计,即使在资源受限的情况下,也能够实现高质量的模型训练。这对于推动自然语言处理技术在学术界和小型研究团队中的发展具有重要意义。

引用建议

如果您发现这篇论文或相关代码对您的研究有帮助,请考虑引用以下论文:

@inproceedings{izsak-etal-2021-train,
    title = "How to Train {BERT} with an Academic Budget",
    author = "Izsak, Peter  and
      Berchansky, Moshe  and
      Levy, Omer",
    booktitle = "Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing",
    month = nov,
    year = "2021",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2021.emnlp-main.831",
}

通过这种方法,研究人员可以在有限的资源下探索和改进大型语言模型,为自然语言处理领域的进步做出贡献。🚀💡

avatar
0
0
0
相关项目
Project Cover

网易有道速读

网易有道速读使用先进AI技术,助力用户快速提取、定位和汇总文档信息,提供论文阅读、翻译和Q&A等一站式服务,以提高文档处理和学习效率。适用于学术研究与日常学习,帮助用户高效理解信息和积累知识。

Project Cover

contrastors

contrastors 是一个高效的对比学习工具包,支持多GPU和大批量训练优化。支持通过Huggingface快速加载常见模型如BERT和GPTNeoX,适用于处理复杂的语言和视觉嵌入任务。

Project Cover

AnglE

AnglE框架可通过多样化的模型策略和损失函数,进行基于BERT和LLM模型的句子嵌入训练和推理,已在众多语义相似度任务中表现卓越。

Project Cover

spacy-transformers

spacy-transformers通过Hugging Face的transformers实现预训练模型如BERT、XLNet和GPT-2的集成,提升spaCy的功能。支持多任务学习、转换器输出自动对齐等,兼容Python 3.6以上版本,需要PyTorch v1.5+和spaCy v3.0+。

Project Cover

FasterTransformer

FasterTransformer不仅支持多框架集成,还针对NVIDIA新一代GPU优化了编解码性能,极大提升了操作效率和处理速度。包含模型支持、性能对比及API演示的详细文档,有助于用户深入了解并有效使用FasterTransformer。

Project Cover

text-embeddings-inference

Text Embeddings Inference 为文本嵌入模型提供高效的推理服务,支持多种模型配置,适合AI及深度学习需求。快速部署和卓越的服务器级性能使其成为企业和研究机构面对大规模文本处理和复杂查询时的理想选择,支持包括 [BERT](https://link-to-bert) 和 [RoBERTa](https://link-to-roberta) 在内的多种模型,并兼容 Docker 和完备的 API 文档。

Project Cover

vits_chinese

vits_chinese项目引入了BERT和VITS技术,通过隐藏的韵律嵌入和自然语言特性,显著提高了文本到语音合成的音质和自然度。此项目不只适于高质量音频生成,也提供模块化蒸馏加速和在线演示,便利学习和开发人员的应用。

Project Cover

UER-py

UER-py是一个为自然语言处理任务设计的预训练和微调工具包,支持多种预训练模型以优化下游任务表现。项目强调模块化设计,并提供可扩展接口,支持单GPU及多GPU配置。

Project Cover

nlp-recipes

该资源库提供构建NLP系统的示例和最佳实践,重点关注最新的深度学习方法和常见场景,如文本分类、命名实体识别和文本摘要。支持多语言,特别是利用预训练模型应对不同语言任务。内容基于与客户的合作经验,旨在简化开发过程,帮助数据科学家和工程师快速部署AI解决方案。

最新项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号