重要提示
您正在查看 NeMo 2.0 文档。此版本对 API 和新的库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 中的所有功能移植到 2.0。 有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
BERT#
BERT(来自 Transformer 的双向编码器表示)是由 Google 于 2018 年开发的用于自然语言处理任务的预训练深度学习模型。与传统的从左到右或从右到左顺序读取文本的模型不同,BERT 同时从两个方向读取文本,捕捉来自单词两侧的上下文。这种双向方法使 BERT 能够更好地理解语言中的细微差别和含义,从而提高在问题解答、情感分析和语言推理等任务中的性能。
NeMo 2.0 预训练配方#
我们提供了使用 NeMo 2.0 和 NeMo-Run 预训练 BERT 模型(基本版 (110m) 和大型版 (330m))的配方。这些配方为 NeMo 2.0 中引入的 nemo.collections.llm api 函数之一配置了 run.Partial
。这些配方托管在 bert_110m 中,
注意
预训练配方对 data
参数使用 MockDataModule
。
您需要将 MockDataModule
替换为您自己的自定义数据集。
我们在下面提供了一个示例,说明如何调用默认配方并覆盖 data 参数
from nemo.collections import llm
pretrain = llm.bert_110m.pretrain_recipe(
name="bert_base_pretrain",
dir=f"/path/to/checkpoints",
num_nodes=2,
num_gpus_per_node=8,
bert_type="megatron",
)
# # To override the data argument
# dataloader = a_function_that_configures_your_custom_dataset(
# global_batch_size=global_batch_size,
# micro_batch_size=micro_batch_size,
# seq_length=pretrain.model.config.seq_length,
# )
# pretrain.data = dataloader
注意
配方中的配置是使用 NeMo-Run
run.Config
和run.Partial
配置对象完成的。请查看 NeMo-Run 文档 以了解有关其配置和执行系统的更多信息。bert_type
可以是huggingface
或megatron
。huggingface
指的是 huggingface/google-bert 上的模型架构,而megatron
指的是严格遵循 Megatron-LM 的模型架构。两者之间的主要区别在于 Megatron 在 MLP 和注意力模块之后使用 Pre-LayerNorm,而 HuggingFace 使用 Post-LayerNorm。
一旦您准备好最终配置,您就可以在任何 NeMo-Run 支持的执行器上执行它。最简单的是本地执行器,它只是在单独的进程中本地运行预训练。您可以按如下方式使用它
import nemo_run as run
run.run(pretrain, executor=run.LocalExecutor())
此外,您还可以按如下方式直接在同一个 Python 进程中运行它
run.run(pretrain, direct=True)
下面提供了我们目前支持或计划很快支持的预训练配方的完整列表,以供参考
配方 |
状态 |
---|---|
Hugging Face BERT-Base (110M) |
是 |
Hugging Face BERT-large (340M) |
是 |
Megatron BERT-Base (110M) |
是 |
Megatron BERT-large (340M) |
是 |