共计 3942 个字符,预计需要花费 10 分钟才能阅读完成。
介绍
基于语言、视觉和语音的 Transformer 模型越来越大,以反对终端用户简单的多模态用例。减少模型大小间接影响训练这些模型所需的资源,并随着模型大小的减少而扩大它们。Hugging Face 和微软的 ONNX Runtime 团队正在一起致力,在微调大型语言、语音和视觉模型方面获得提高。Hugging Face 的 🤗 Optimum 库,通过和 ONNX Runtime 的集成进行训练,为许多风行的 Hugging Face 模型提供了一个凋谢的解决方案, 能够将训练工夫缩短 35% 或更多 。咱们展示了 Hugging Face Optimum 和 ONNX Runtime Training 生态系统的细节,性能数据突出了应用 Optimum 库的益处。
性能测试后果
上面的图表表明,当 应用 ONNX Runtime 和 DeepSpeed ZeRO Stage 1 进行训练时,用 Optimum 的 Hugging Face 模型的减速 从 39% 进步到 130%。性能测试的基准运行是在选定的 Hugging Face PyTorch 模型上进行的,第二次运行是只用 ONNX Runtime 训练,最初一次运行是 ONNX Runtime + DeepSpeed ZeRO Stage 1,图中显示了最大的收益。基线 PyTorch 运行所用的优化器是 AdamW Optimizer,ORT 训练用的优化器是 Fused Adam Optimizer。这些运行是在带有 8 个 GPU 的单个 NVIDIA A100 节点上执行的。
更多对于开启 🤗 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 库 的胜利,咱们将模态从 NLP 扩大到音频和视觉,当初涵盖了跨机器学习的用例,以满足咱们社区的需要。当初在 Hugging Face Hub 上,有超过 12 万个收费和可拜访的模型 checkpoints 用于各种机器学习工作,1.8 万个数据集和 2 万个机器学习演示利用。然而,将 Transformer 模型扩大到生产中依然是工业界的一个挑战。只管准确性很高,但基于 Transformer 的模型的训练和推理可能耗时且低廉。
为了满足这些需要,Hugging Face 构建了两个开源库: 🤗 Accelerate 和 🤗 Optimum。🤗 Accelerate 专一于开箱即用的分布式训练,而 🤗 Optimum 作为 Transformer 的扩大,通过利用用户指标硬件的最大效率来减速模型训练和推理。Optimum 集成了机器学习加速器如 ONNX Runtime,和业余的硬件如 英特尔的 Habana Gaudi,因而用户能够从训练和推理的显著减速中受害。此外,🤗 Optimum 无缝集成了其余 Hugging Face 的工具,同时继承了 Transformer 的易用性。开发人员能够轻松地调整他们的工作,以更少的计算能力实现更低的提早。
ONNX Runtime 训练
ONNX Runtime 减速 大型模型训练,独自应用时将吞吐量进步 40%,与 DeepSpeed 组合后将吞吐量进步 130%,用于风行的基于 Hugging Face Transformer 的模型。ONNX Runtime 曾经集成为 🤗 Optimum 的一部分,并通过 Hugging Face 的 🤗 Optimum 训练框架实现更快的训练。
ONNX Runtime Training 通过一些内存和计算优化实现了这样的吞吐量改良。内存优化使 ONNX Runtime 可能最大化批大小并无效利用可用的内存,而计算优化则放慢了训练工夫。这些优化包含但不限于,高效的内存布局,内核优化,实用于 Adam 优化器的多张量利用 (将利用于所有模型参数的按元素更新分批到一个或几个内核启动中),FP16 优化器 (打消了大量用于主机内存拷贝的设施),混合精度训练和图优化,如节点交融和节点打消。ONNX Runtime Training 反对 NVIDIA 和 AMD GPU,并提供自定义操作的可扩展性。
简而言之,它使 AI 开发人员可能充分利用他们相熟的生态系统,如 PyTorch 和 Hugging Face,并在他们抉择的指标设施上应用 ONNX Runtime 进行减速,以节省时间和资源。
Optimum 中的 ONNX Runtime Training
Optimum 提供了一个 ORTTrainer
API,它扩大了 Transformer 中的 Trainer
,以应用 ONNX Runtime 作为后端进行减速。ORTTrainer
是一个易于应用的 API,蕴含残缺的训练循环和评估循环。它反对像超参数搜寻、混合精度训练和多 GPU 分布式训练等性能。ORTTrainer
使 AI 开发人员在训练 Transformer 模型时可能组合 ONNX Runtime 和其余第三方减速技术,这有助于进一步减速训练,并充分发挥硬件的作用。例如,开发人员能够将 ONNX Runtime Training 与 Transformer 训练器中集成的分布式数据并行和混合精度训练相结合。此外,ORTTrainer
使你能够轻松地将 DeepSpeed ZeRO-1 和 ONNX Runtime Training 组合,通过对优化器状态进行分区来节俭内存。在实现预训练或微调后,开发人员能够保留已训练的 PyTorch 模型,或应用 🤗 Optimum 实现的 API 将其转为 ONNX 格局,以简化推理的部署。和 Trainer
一样,ORTTrainer
与 Hugging Face Hub 齐全集成: 训练完结后,用户能够将他们的模型 checkpoints 上传到 Hugging Face Hub 账户。
因而具体来说,用户应该如何利用 ONNX Runtime 减速进行训练?如果你曾经在应用 Trainer
,你只须要批改几行代码就能够从下面提到的所有改良中受害。次要有两个替换须要利用。首先,将 Trainer
替换为 ORTTrainer
,而后将 TrainingArguments
替换为 ORTTrainingArguments
,其中蕴含训练器将用于训练和评估的所有超参数。ORTTrainingArguments
扩大了 TrainingArguments
,以利用 ONNX Runtime 受权的一些额定参数。例如,用户能够应用 Fused Adam 优化器来取得额定的性能收益。上面是一个例子:
-from transformers import Trainer, TrainingArguments
+from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments
# Step 1: Define training arguments
-training_args = TrainingArguments(
+training_args = ORTTrainingArguments(
output_dir="path/to/save/folder/",
- optim = "adamw_hf",
+ optim = "adamw_ort_fused",
...
)
# Step 2: Create your ONNX Runtime Trainer
-trainer = Trainer(
+trainer = ORTTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
+ feature="sequence-classification",
...
)
# Step 3: Use ONNX Runtime for training!🤗
trainer.train()
展望未来
Hugging Face 团队正在开源更多的大型模型,并通过训练和推理的减速工具以升高用户从模型中获益的门槛。咱们正在与 ONNX Runtime Training 团队单干,为更新和更大的模型架构带来更多的训练优化,包含 Whisper 和 Stable Diffusion。微软还将其最先进的训练减速技术打包在 PyTorch 的 Azure 容器 中。这是一个轻量级的精心营造的环境,包含 DeepSpeed 和 ONNX Runtime,以进步 AI 开发者应用 PyTorch 训练的生产力。除了大型模型训练外,ONNX Runtime Training 团队还在为边缘学习构建新的解决方案——在内存和电源受限的设施上进行训练。
筹备开始
咱们邀请你查看上面的链接,以理解更多对于 Hugging Face 模型的 Optimum ONNX Runtime Training,并开始应用。
- Optimum ONNX Runtime Training 文档
- Optimum ONNX Runtime Training 示例
- Optimum Github 仓库
- ONNX Runtime Training 示例
- ONNX Runtime Training Github 仓库
- ONNX Runtime
- DeepSpeed 和 ZeRO 教程
- PyTorch 的 Azure 容器
感激浏览!如果你有任何问题,请通过 Github 或 论坛 随时分割咱们。你也能够在 Twitter 或 LinkedIn 上分割我。
原文: https://hf.co/blog/optimum-onnxruntime-training
作者: Jingya、Kshama Pawar (guest)、Vincent Wang (guest)、Zhijiang Xu (guest)
译者: AIboy1993 (李旭东)
审校、排版: zhongdongy (阿东)