重要提示

您正在查看 NeMo 2.0 文档。此版本对 API 和新的库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

Llama Embedding#

Llama Embedding 模型是 Llama 的变体,旨在生成固定大小的句子嵌入。与最初为文本生成、翻译和摘要等 NLP 任务设计的原始 Llama 模型不同,Llama Embedding 模型微调 Llama 模型以生成整个句子的有意义的密集表示。这是通过用双向注意力机制替换因果掩码机制来实现的。这些嵌入可用于句子相似度、聚类和信息检索等任务,在这些任务中,比较句子级别的含义是关键。Llama Embedding 模型通过支持使用余弦相似度或其他距离度量快速、可扩展地比较句子来提高效率。

NeMo 2.0 微调配方#

注意

微调配方使用 SpecterDataModule 作为 data 参数。您可以将 SpecterDataModule 替换为您自定义的数据集。

或者,您可以使用 CustomRetrievalDataModule 加载您自己的数据集。详细信息在后面的章节中提供。

要导入 Hugging Face 模型并将其转换为 NeMo 2.0 格式,请运行以下命令(此操作只需执行一次)

from nemo.collections import llm
llm.import_ckpt(model=llm.LlamaEmbeddingModel(llm.Llama32EmbeddingConfig1B()), source='hf://meta-llama/Llama-3.2-1B')

我们在下面提供了一个示例,说明如何调用默认配方并覆盖数据参数

from nemo.collections import llm

recipe = llm.recipes.llama_embedding_1b.finetune_recipe(
    name="llama_embed_model_finetuning",
    resume_path="path/to/original/ckpt"
    num_nodes=1,
    num_gpus_per_node=8,
)

# # To override the data argument
# dataloader = a_function_that_configures_your_custom_dataset(
#     gbs=gbs,
#     mbs=mbs,
#     seq_length=recipe.model.config.seq_length,
# )
# recipe.data = dataloader

注意

配方中的配置是使用 NeMo-Run run.Configrun.Partial 配置对象完成的。请查看 NeMo-Run 文档,以了解有关其配置和执行系统的更多信息。

我们提供了一个专门为 RAG 训练定制的数据集类。要加载您自定义的数据集,请提供一个带有 querypos_doc_keyneg_doc_key 的 .json 文件,如下所示

from nemo.collections import llm


dataloader = run.Config(
    llm.CustomRetrievalDataModule,
    data_root='path/to/json/data',
    dataset_identifier='identifier to store the dataset',
    seq_length=sequence_length,
    micro_batch_size=micro_batch_size,
    global_batch_size=global_batch_size,
    tokenizer=tokenizer,
    num_workers=num_dataloader_workers,
    dataset_kwargs=model.get_dataset_kwargs(),
)
# # To override the data argument
recipe.data = dataloader

一旦您的最终配置准备就绪,您就可以在任何 NeMo-Run 支持的执行器上执行它。最简单的选择是本地执行器,它在单独的进程中本地运行预训练。您可以按如下方式使用它

import nemo_run as run

run.run(recipe, executor=run.LocalExecutor())

此外,您还可以直接在同一个 Python 进程中运行它,如下所示

run.run(recipe, direct=True)

训练完成后,您可以选择使用以下脚本将模型转换为 Hugging Face 模型

from pathlib import Path
llm.export_ckpt(
      path = Path('path/to/finetuned/ckpt'),
      target='hf',
      output_path=Path('path/to/converted/hf/ckpt'),
)

配方

状态

Llama3.2 1B Embedding 模型