Fork me on GitHub

英伟达大模型训练框架NeMo在AI领域的综合应用与优势总结

以下文章来源于 https://zhuanlan.zhihu.com/p/684599501

导读 本文将分享英伟达针对 Speech AI 和大模型开发的训练框架 NeMo。

本次分享主要分为 5 个部分:

  1. NeMo 框架介绍

  2. 使用 NeMo 处理 ASR 和 TTS 任务

  3. NeMo 对 NLP 和 LLM 的支持

  4. 总结

  5. 问答环节

分享嘉宾|齐家兴博士 NVIDIA 解决方案架构师

编辑整理|吕晶

内容校对|李瑶

出品社区|DataFun


01NeMo 框架介绍



NVIDIA NeMo 是基于 PyTorch 和 PyTorch Lightning 的一个开源训练框架,源代码完全公开在 GitHub 上。NeMo 的主要目标是使 AI 开发者能够快速构建对话式 AI 模型并开发相关应用。

NeMo 工具包主要包括 ASR、NLP 和 TTS 三个领域的模型和功能特性。我们提取了这三个模块的特性,并在 PyTorch 框架中实现了良好的功能提升,这些提升已经集成到 NeMo 的 Core 部分。

  • NeMo Core

NeMo Core 模块为 ASR、NLP 和 TTS 等应用提供了通用、便捷且易于使用的构建方式,使 AI 开发者能够迅速进行模型构建和训练。无论是模型构建,还是与训练过程相关的分布式训练、checkpoint 保存以及训练参数设置等,都集成在 NeMo Core 模块中。

  • NeMo Collection

基于 NeMo Core 的通用设计,我们针对对话式 AI 的三个方向 ASR、NLP 和 TTS,分别进行了模型和训练功能的集成,称为 NeMo Collection,每个 collection 都包含与特定领域相关的模块和模型。

  • NeMo Megatron

除了针对不同领域的集合(collection),NeMo 还在 NLP 领域特别支持大模型的相关训练。以前,英伟达有一个流行的大模型训练框架叫做 Megatron LM,后来我们将其中与大模型并行训练相关的技术迁移到了 NeMo 中,即 NeMo Megatron 模块。使得在 NeMo 中进行大模型相关训练更加方便。

  • 可高效使用 GPU

除了对 Speech AI 相关模型和训练过程的支持,NeMo 还对英伟达 GPU 在整个训练过程中进行了优化。这样在使用 NeMo 进行训练时,可以在英伟达 GPU 上高效地进行训练,大幅缩短整个模型训练的时间。

NeMo 是一个开源工具包,大家可以直接在 GitHub 上查看 NeMo 的开发文档和代码。以上是对 NeMo 的概述,接下来将介绍在 NeMo 中针对 ASR 和 TTS 模型的训练过程。

02使用 NeMo 处理 ASR 和 TTS 任务

1. ASR 训练

NeMo 的主要开发目标之一是使 ASR 训练变得非常容易。主要包括三个步骤。



首先是数据集的准备。因为 ASR 训练通常涉及大量音频数据,用户只需准备相关数据集,并提供一个符合 NeMo 格式的数据集 manifest 文件即可。在这个 manifest 文件中,用户需要指定每条数据的音频文件路径以及对应的文本。有了这个 jsonl 格式的数据集文件后,用户就可以通过 NeMo 的配置文件指定训练过程中的相关配置参数。

上图中绿色方框展示了 NeMo 中使用的配置文件示例,主要需要指定训练、验证和测试数据集,批处理大小、优化器、GPU 数量、训练时长和数据精度等参数,以及保存 checkpoint 的位置和方法等。这些通常是训练过程中需要指定的参数。

准备好数据集的 jsonl 文件和相应的配置文件后,就可以在 NeMo 中进行 ASR 训练了。在 NeMo 的 example 文件夹下,提供了 ASR 的训练脚本,例如 speech to text 的 CTC 模型训练脚本。只需在命令行中运行这个脚本并配置相应的配置文件即可。

总的来说,在 NeMo 中进行 ASR 训练非常简单,已经为大家准备好了相应的训练脚本,只需配置数据集和配置文件即可。



在 NeMo 中,针对语音方面,不仅提供了丰富的 ASR 模型训练示例供大家直接使用,还准备了许多其他与 ASR 或语音相关的任务的训练脚本,使大家能够轻松地使用 NeMo 进行各种语音处理任务,包括语音预训练、VAD 检测、语音翻译以及语音分类等。与 ASR 训练过程类似,只需在 NeMo 的示例文件夹中找到相应的语音处理任务的训练脚本,准备好数据集,进行配置文件的设置,就可以开始语音任务的训练。

除了提供现成的 ASR 和其他语音处理任务的训练脚本,为了进一步方便大家进行 ASR 或其他语音任务的开发,NeMo 中还增加了对预训练 ASR 模型的支持。



这样可以直接在 NeMo 中加载这些预训练好的 ASR 模型进行进一步的微调,或者在某些情况下进行推理应用。这些预训练模型保存在 NVIDIA GPU Cloud 上,用户可以在 NVIDIA GPU Cloud 网站上注册账号,然后在 NeMo 中下载和使用这些模型。英伟达为用户提供了许多预训练好的 ASR 模型:

  • 涵盖多种语言:英语、法语、意大利语、西班牙语、中文、德语等。
  • 不同的模型结构:囊括了业界流行的各种 ASR 模型结构,如 Fastconformer、Squeezeformer,以及一些 CTC、Transducer、不同的损失函数等等。
  • 预训练语音任务:除了 ASR 模型,英伟达还在 NGC 上为用户提供了其他一些语音任务(语音分类任务、说话人识别任务等)的预训练 checkpoint,用户可以直接下载并使用。

英伟达提供的这些开源 ASR 模型在 NeMo 中可以直接使用,并且它们都展现出非常出色的语音识别效果。



这张图中截取了最新的 HuggingFace Audio Open ASR Leaderboard 上的结果。

通过这张表,大家可以发现排名前几位的 ASR 模型中有数个来自英伟达,它们采用了不同的结构和损失函数,例如 Fastconformer、Conformer、CTC 和 Transducer,代表了模型的多样性。

无论采用何种模型结构和损失函数,这些模型在 Leaderboard 上都取得了非常好的性能,包括平均词错误率(WER)和实时率(RTF)。因此,欢迎大家使用 NeMo 框架,从英伟达的 NGC 上下载这些预训练 ASR 模型,在 NeMo 中进行进一步的微调或推理应用。



业界一些最新的 ASR 模型,NeMo 中都提供了支持,例如常见的 Conformer 和最新的 Fastconformer、Squeezeformer 等模型结构,在 NeMo 中都有现成的模型配置和相应的预训练 checkpoint 供下载使用。

在解码器和损失函数方面,NeMo 实现了常见的算法,包括 CTC、RNNT、Transduser 等,还包括 CTC 和 RNN transducer 混合的损失计算。此外,针对传统的 CTC,NeMo 提出了多种变种实现方式,其中一些更适用于流式语音识别,能够提高识别精度和流式识别效果。

对于英伟达最新的 ASR 研究成果,NeMo 也提供了支持。这里介绍两个最新的研究成果。

首先是 Multi-blank Transducer 算法,相对于传统的 Transducer 算法,引入了一个能够代表多个 blank 的新符号,通过这个符号可以表示语音中多个帧的空白帧。这种表示方式可以显著提升推理时的计算速度,并可在多个测试集上提高识别精度。

另一个是 Token and Duration Transducers 算法,它是针对传统的 RNN transducer 的一种改进方法,可以同时预测每一帧的 token 和 duration。这种方式,通过额外的 duration 信息,可以提升 transducer 解码的速度,并提供更准确的识别精度。

对于这两项新的英伟达在 ASR 方面的研究工作感兴趣的同学,可以详细阅读这两篇工作,相应的代码实现也可以在 NeMo 中找到。欢迎大家在 NeMo 中尝试这两个来自英伟达的最新 ASR 的研究成果。

NeMo 中还提供了一些 ASR 训练过程中可能用到的工具,其中值得一提的一个工具是 Speech Data Explorer。



Speech Data Explorer 的主要作用是方便用户对其语音训练数据进行分析和理解。可以对整个数据集的文本信息进行统计,生成音频频谱的直方图。并且可以对其音频数据集进行详细分析,包括观察其视图形状、频谱信息,并带有一个音频播放器,用户可以通过该音频播放器聆听该音频的实际声音。同时,还可以对训练结果进行分析。使用 NeMo 进行模型训练时,在训练过程中可能会生成一些测试结果文件。这些结果文件也可以通过 Speech Data Explorer 导入,使用户能够方便地对模型训练过程中的结果进行分析,包括计算识别错误率,显示识别结果等。

2. 对 TTS 任务的支持



通常,TTS 模型的训练涉及多个模块,如上图右侧图所示,其中包括文本归一化模块、G2P 模块(将文本转换为发音单元或音素)以及频谱生成和波形生成模块。

NeMo 对 TTS 整个训练 pipeline 的各个模块都提供了良好的支持:

  • 模型:NeMo 支持业界常见的频谱生成模型,如 FastPitch、RAD-TTS 模型和 Tacotron2 模型。
  • 声码器:NeMo 支持 Hifi-GAIN 模型、UnivNet 模型和 WaveGlow 模型。
  • 开源模型:在 NeMo 中还有一些由其他开发者贡献的开源模型实现,其中包括端到端模型 VITS,它结合了频谱生成和声码器两种模型的共同训练,以实现更好的音频生成效果。
  • 预训练模型:NeMo 还在英伟达的 NGC 上为用户提前准备了一些预训练的 checkpoint,用户可以直接在 NeMo 中加载并用于推理或进一步调优。

03NeMo 对 NLP 和 LLM 的支持

NeMo 支持多种 NLP 训练任务和 LLM 训练。尤其是大模型训练相关的功能在今年有了很大的改进。



支持的 NLP 任务包括:机器翻译、标点模型、标记分类,以及意图和槽位识别等。

支持大模型训练:引入了高效的模型并行方法、分布式优化实现、混合精度等特性,以提高在 GPU 上训练大模型的效率,以及支持微调功能。

1. 3D 模型并行训练

为了高效训练大模型,我们提供了一种 3D 模型并行的方法。



所谓的 3D 指的是三个不同维度的并行:Tensor Parallelism、Pipeline Parallelism 和 Sequence Parallelism。通过这些不同的模型并行方式,可以在多个 GPU 上加载大型模型,实现更大规模的 LLM 训练。通过这种高效且特殊优化的实现,即使在使用成百上千的 GPU 进行大型模型训练时,NeMo 也能保持高效的训练效率。

在使用 NeMo 进行大型模型训练时,训练效率能够实现近似于线性的并行效率提升。



在进行大型模型训练时,训练所需的时间与使用的 GPU 数量成反比。无论是训练较小的 5B 模型还是最大的 175B 模型,其在成百个 GPU 上的模型并行效率都非常高,训练时间基本上与使用的 GPU 数量成反比。也就是说,当 GPU 数量翻倍时,NeMo 可以确保达到训练时间减半的效果。这展示了 NeMo 在针对大型模型训练方面的高效算法和实现。

2. NeMo 中的预训练大模型

在 NeMo 中,提供了预训练的大模型,使用户能够在一些场景中直接在这些预训练好的大模型的 checkpoint 上进行进一步地使用或微调等工作。



目前,在 NeMo 中,开源了一系列不同阶段训练手段产生的 8B 大小的大模型,包括 Nemotron 8B 不同版本的模型。这些版本包括从预训练而来的基础模型,经过指令微调的 SFT 模型,以及经过强化学习对齐人类偏好的版本。此外,还有通过我们英伟达提出的 SteerLM 对齐方法对齐的版本。我们还提供了 QA 版本的模型,以进行额外的优化。

这一系列 8B 的 checkpoint 都是在包含大约 3.5T token 的大规模数据上训练得到的,训练数据涵盖了约 53 种人类语言和约 37 种编程语言。这些 8B 的模型都可以从英伟达的 NGC 网站或 HuggingFace 上下载获取。



NeMo 中还提供了一个名为"Llama2-70B-SteerLM-Chat"的开源模型。这个模型基于开源的 Llama2-70B 模型,在其基础上使用了英伟达提出的 SteerLM 的对齐方式,进行了基于人类反馈的进一步微调。

通过 SteerLM 的对齐微调,我们发现相对于原始的 Llama2-70B CHAT 模型,它在 MT-Bench Leaderboard 上取得了更高的分数,表现更好。这个模型也已经开源,可以在 HuggingFace 上找到,您可以从 HuggingFace 下载并加载到 NeMo 中使用,或者直接在英伟达的 AI Playground 网站上在线试用。

关于 SteerLM 对齐算法的详细信息,可以参考相应的论文。SteerLM 是一种比强化学习更简单且更易用的对齐方法。

3. NeMo 中的微调方法



在 NeMo 中还提供了许多用于大型模型微调的方法。目前在业界,大型模型微调的方法可以从简单到复杂大致分为四类:

  • 最简单的是直接进行 few-shot 或系统消息的 Prompt Engineering。
  • 稍微进一步的是 Prompt Tuning 或 PTuning 的方法,它们会对 Prompt 进行额外的学习。
  • 更复杂一些的是 Parameter Efficient Fine-Tuning 的方法,即只对模型新增的一小部分额外权重进行微调,包括各种 Adapters 方法或 LoRA 都属于这种微调。
  • 更进一步的是,为了取得更好的效果,对整个模型进行全参数微调,包括 SFT、强化学习等。

这些从简单到复杂的大型模型微调方法,目前在 NeMo 中都有很好的支持,可以在NeMo 中加载开源的 Pre-trained checkpoint,并根据具体场景进行进一步的微调。

4. NeMo Aligner

前面提到的是一些比较简单的微调方法,可以直接在 NeMo 中完成,但对于一些较为复杂的大模型微调方法,在 NeMo 中提供了额外的支持,并整合到了 NeMo Aligner 中。



在 NeMo Aligner 中,实现了包括强化学习等较为复杂的全参数模型微调方法。通过 NeMo Aligner,我们设计了高效但稍微复杂的训练模式,该训练模式能够确保在成百甚至上千个 GPU 上实现相对高效的微调计算效率。结合我们在预训练时尝试过的一些模型并行方法,包括 tensor 并行或 pipeline 并行等,通过 NeMo Aligner,我们提供了对这些方法的良好支持。

目前,NeMo Aligner 仍处于早期版本,其中的微调功能将不断增加。您可以专门前往 NeMo Aligner 的 GitHub 仓库,尝试使用这些更高级或更复杂的大模型微调方法。

5. 端到端的大模型开发 - NeMo Framework

刚才提到的无论是 NeMo 还是 NeMo Aligner,都是专注于大模型训练的功能支持。如果我们考虑的更多,整个训练的流程实际上还包括一些前后处理的步骤,包括数据处理、模型推理监控等等。NVIDIA 提供了相应的工具,助力端到端的大模型开发。这些功能当前都集成在 NeMo Framework 框架中。



NeMo Framework 不仅包含模型训练,还包括预训练时的数据处理、训练后的推理加速以及在部署时监控模型输出等等。相较于 NeMo,NeMo Framework 提供了一个更加全面、更加完整的大模型开发全流程的支持。您可以访问 NeMo Framework 的网站申请试用。除了对大模型的支持之外,NeMo Framework 还包含对一些流行的多模态模型的支持,包括 Stable Diffusion、Vision Transformer 等等。当前,对于多模态的支持仍处于早期访问阶段。

04总结

简要总结一下 NVIDIA 的 NeMo 框架。



NVIDIA NeMo 是一个基于 PyTorch 的开源框架,专注于语音人工智能和大型模型的训练。NeMo 框架提供了多项功能,方便用户快速构建、训练以及进行对话式人工智能模型的微调。在 NeMo 中,为自动语音识别(ASR)和文本到语音合成(TTS)提供了业界流行的多个模型和相应的算法支持。此外,还提供了许多预训练的 checkpoint,方便用户直接下载和使用。

NeMo 框架专注于支持大模型的大规模训练。通过 NeMo Megatron,确保即使在数百甚至上千个 GPU 上,大模型的训练过程仍然能够高效进行。此外,NVIDIA 还开源了一系列大小为 8B 的大模型。同时,针对开源的 Llama2-70B 模型,提供了一个额外的对齐版本,用户可以在 NVIDIA GPU Cloud(NGC)或 HuggingFace 上下载并尝试使用。另外,还提供了 NeMo Aligner 工具包,和端到端大模型训练框架 NeMo Framework。

以上就是本次分享的内容,谢谢大家。

05问答环节

Q1:Device 和 Epoch 如何设置大小更合适?

A1:Device 主要是在训练时设置所使用的 GPU 数量。通常情况下,我们希望充分利用所有可用的 GPU,以加快训练进程。而 Epoch 的选择可能更多地取决于数据集的大小和模型的规模。通常,我们会设置一个初始较大的 Epoch 值,然后在训练过程中通过监控训练损失或验证精度来进行调整。当模型训练趋于收敛时,可以提前结束训练。

Q2:安装使用 NeMo 的方式都有哪些?

A2:NeMo 目前是在 GitHub 上以开源形式提供的,因此可以直接在 GitHub 上下载源代码并进行使用。此外,我们还提供了一个 Python 包,可以通过运行 pip install NeMo 来直接安装 NeMo 包。另外,英伟达还提供了一些预先配置好的 Docker 镜像,可以在 NGC 上直接下载这些 NeMo 的 Docker 镜像,这样使用起来也更加方便。

Q3:对电脑的配置要求是多少

A3:因为 NeMo 主要是基于 Pytorch 和 Pytorch Lightning 底层的这个框架去上层进行上层封装的,所以在一般的英伟达的 GPU 上都是可以去支持的。并没有其他的过多要求。

Q4:ASR 和 TTS 框架都能用新的数据微调,那模型框架能修改吗?

A4:不管是 ASR 还是 TTS,您都可以使用英伟达提供的一些预训练模型,然后在您的新数据上进行微调。此外,如果您希望进行模型框架的更改,也是支持的,不过这个过程可能会稍微复杂一些。您可能需要在代码层面手动修改模型的结构,以实现对模型框架的修改。

Q5:NeMo 目前是否适用所有的语言类 NLP 类模型,覆盖的百分比大概多少?

A5:百分比可能不太容易精确计算,但是 NeMo 框架中支持行业内一些主要的云端模型。在语音领域,包括各种 Conformer 模型以及不同的损失函数如 CTC 和 transducer 等,都得到了支持。对于自然语言处理(NLP),NeMo 框架在传统的 NLP 模型上也提供了良好的支持,包括语音翻译、BERT、Transformer等。

Q6:LLM 模型训练有 baseline 实验的 pipeline 吗?

A6:可以参阅 NeMo Framework,在那里面有一个比较完整的针对大模型的baseline 的 pipeline,从数据的处理一直到后续的训练,以及它达到的 loss 情况,还有训练效率的情况等等,在 NeMo Framework 中都可以获取到。

以上就是本次分享的内容,谢谢大家。




本文地址:https://www.6aiq.com/article/1709374201551
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出