Press "Enter" to skip to content

Optimum+ONNX Runtime – 为您的Hugging Face模型提供更简单、更快速的训练

介绍

语言、视觉和语音中基于Transformer的模型正变得更大,以支持复杂的多模态用例。增加模型大小直接影响训练这些模型所需的资源,并随着大小的增加而扩展。Hugging Face和微软的ONNX Runtime团队正在合作,共同构建细调大型语言、语音和视觉模型的先进技术。Hugging Face的Optimum库通过与ONNX Runtime的集成来进行训练,为许多流行的Hugging Face模型提供了一个开放的解决方案,可以将训练时间提高35%或更多。我们介绍了Hugging Face Optimum和ONNX Runtime训练生态系统的详细信息,并通过性能数据突出了使用Optimum库的好处。

性能结果

下图显示了使用ONNX Runtime和DeepSpeed ZeRO Stage 1进行训练时,Hugging Face模型在Optimum下的加速效果,从39%加速到130%。性能测量是在选择的Hugging Face模型上进行的,基准运行使用PyTorch,第二次运行仅使用ONNX Runtime进行训练,最后一次运行使用ONNX Runtime + DeepSpeed ZeRO Stage 1,显示出最大的增益。基准PyTorch运行使用的优化器是AdamW优化器,ORT训练运行使用融合Adam优化器。这些运行是在具有8个GPU的单个Nvidia A100节点上执行的。

Optimum+ONNX Runtime - 为您的Hugging Face模型提供更简单、更快速的训练 四海 第1张

有关打开Optimum进行训练加速的配置设置的更多详细信息,请参阅此处。这些运行使用的版本信息如下:

PyTorch: 1.14.0.dev20221103+cu116; ORT: 1.14.0.dev20221103001+cu116; DeepSpeed: 0.6.6; HuggingFace: 4.24.0.dev0; Optimum: 1.4.1.dev0; Cuda: 11.6.2

Optimum库

Hugging Face是一个快速发展的开放社区和平台,旨在实现机器学习的民主化。我们将模态从自然语言处理扩展到音频和视觉,并现在覆盖了机器学习的各种用例,以满足我们社区的需求,这是Transformers库成功之后的成果。现在在Hugging Face Hub上,有超过12万个免费且可访问的模型检查点,用于各种机器学习任务,还有1.8万个数据集和2万个机器学习演示应用程序。然而,将Transformer模型扩展到生产环境仍然是该行业面临的挑战。尽管准确性很高,但基于Transformer的模型的训练和推理可能耗时且昂贵。

为了满足这些需求,Hugging Face构建了两个开源库:AccelerateOptimum。🤗 Accelerate专注于开箱即用的分布式训练,而🤗 Optimum作为Transformer的扩展,通过利用用户目标硬件的最大效率来加速模型的训练和推理。Optimum集成了诸如ONNX Runtime和Intel的Habana Gaudi等机器学习加速器,因此用户可以在训练和推理中获得明显的加速效果。此外,Optimum无缝集成了其他Hugging Face的工具,并继承了与Transformers相同的易用性。开发人员可以轻松地调整他们的工作,以实现更低的延迟和更少的计算资源。

ONNX Runtime训练

ONNX Runtime通过加速大型模型的训练,使吞吐量提高了40%,如果与DeepSpeed合并使用,则提高了130%。ONNX Runtime已经作为Optimum的一部分进行了集成,并通过Hugging Face的Optimum训练框架实现了更快的训练速度。

ONNX Runtime训练通过多个内存和计算优化来实现这种吞吐量改进。内存优化使ONNX Runtime能够最大化批处理大小,并高效利用可用内存,而计算优化则加快了训练时间。这些优化包括但不限于高效的内存规划、内核优化、Adam优化器的多张量应用(将应用于模型所有参数的逐元素更新批处理为一个或几个内核启动)、FP16优化器(消除了许多设备到主机内存的复制)、混合精度训练以及节点融合和节点消除等图优化。ONNX Runtime训练支持NVIDIA和AMD GPU,并支持自定义运算符的可扩展性。

简而言之,它使AI开发人员能够充分利用他们熟悉的生态系统,如PyTorch和Hugging Face,并在所选择的目标设备上使用ONNX Runtime的加速,从而节省时间和资源。

在Optimum中使用ONNX Runtime进行训练

Optimum提供了一个扩展Transformers中的Trainer的ORTTrainer API,以使用ONNX Runtime作为加速的后端。ORTTrainer是一个易于使用的API,包含了功能完备的训练循环和评估循环。它支持超参数搜索、混合精度训练和多GPU分布式训练等特性。ORTTrainer使得AI开发者可以在训练Transformers模型时组合ONNX Runtime和其他第三方加速技术,进一步加速训练并发挥硬件的最佳性能。例如,开发者可以将ONNX Runtime训练与Transformers的Trainer中集成的分布式数据并行和混合精度训练相结合。此外,ORTTrainer还可以方便地与DeepSpeed ZeRO-1结合使用,通过分区优化器状态来节省内存。在预训练或微调完成后,开发者可以将训练好的PyTorch模型保存下来,或者使用Optimum为ONNX Runtime实现的API将其转换为ONNX格式,以便于推理部署。与Trainer一样,ORTTrainer与Hugging Face Hub完全集成:训练完成后,用户可以将模型检查点上传到他们的Hugging Face Hub账户中。

那么具体来说,用户应该如何使用Optimum来利用ONNX Runtime加速训练呢?如果您已经在使用Trainer,您只需要调整少量代码即可享受上述所有改进的好处。主要需要进行两个替换。首先,将Trainer替换为ORTTrainer,然后将TrainingArguments替换为ORTTrainingArguments,后者包含了训练和评估过程中训练器将使用的所有超参数。ORTTrainingArguments扩展了TrainingArguments,以应用ONNX Runtime提供的一些额外参数。例如,用户可以应用融合的Adam优化器以获得额外的性能提升。以下是一个示例:

-from transformers import Trainer, TrainingArguments
+from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments

# 步骤1:定义训练参数
-training_args = TrainingArguments(
+training_args = ORTTrainingArguments(
    output_dir="保存文件夹的路径/",
-   optim = "adamw_hf",
+   optim = "adamw_ort_fused",
    ...
)

# 步骤2:创建您的ONNX Runtime训练器
-trainer = Trainer(
+trainer = ORTTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
+   feature="序列分类",
    ...
)

# 步骤3:使用ONNX Runtime进行训练!🤗
trainer.train()

展望未来

Hugging Face团队正在努力开源更多的大型模型,并通过训练和推理的加速工具降低用户使用这些模型的门槛。我们正在与ONNX Runtime训练团队合作,为更新和更大的模型架构(包括Whisper和Stable Diffusion)带来更多的训练优化。微软还将其最先进的训练加速技术打包在Azure Container for PyTorch中。这是一个轻量级的精选环境,包括DeepSpeed和ONNX Runtime,可以提高使用PyTorch进行训练的AI开发者的生产力。除了大型模型训练,ONNX Runtime训练团队还在为在边缘学习提供新的解决方案而努力-在内存和功耗受限的设备上进行训练。

入门指南

我们邀请您点击下面的链接,了解更多关于Optimum ONNX Runtime Training和您的Hugging Face模型的信息,并开始使用。

  • Optimum ONNX Runtime Training文档
  • Optimum ONNX Runtime Training示例
  • Optimum Github仓库
  • ONNX Runtime Training示例
  • ONNX Runtime Training Github仓库
  • ONNX Runtime
  • DeepSpeed和ZeRO教程
  • Azure Container for PyTorch

🏎感谢阅读!如果您有任何问题,请随时通过Github或论坛与我们联系。您也可以在Twitter或LinkedIn上与我联系。

Leave a Reply

Your email address will not be published. Required fields are marked *