使用 Intel 技术加速 PyTorch 分布式微调

Hugging Face 已证明,在 Intel Xeon 可扩展 CPU 服务器集群上分布式运行 PyTorch 微调作业可以显著缩短训练时间,为迁移学习任务提供 GPU 训练的可行替代方案。通过利用 Intel Ice Lake 架构和优化的软件库,从一节点扩展到四节点时实现了最高 3 倍的训练加速。

通过 Intel Ice Lake 实现硬件加速

为了获得最佳性能,该设置使用基于 Ice Lake 架构的 Intel 服务器。此硬件支持可加速深度学习操作的特定功能:

  • Intel AVX-512:用于高性能计算的高级向量扩展。
  • Intel 向量神经网络指令(VNNI):专门设计用于加速神经网络推理和训练的指令。

这些功能在主要云提供商上均可使用,包括 Amazon EC2(M6i 和 C6i 实例)、Azure(Dv5、Dsv5、Ddv5、Ddsv5、Edv5 和 Edsv5 系列)以及 Google Cloud Platform(N2 Compute Engine VM)。

软件优化栈

为了充分利用 Intel CPU 的硬件能力,PyTorch 工作流程中集成了两个主要软件组件:

Intel Extension for PyTorch

Intel extension for PyTorch 通过使 PyTorch 能够利用 AVX-512 和 VNNI,为训练和推理提供开箱即用的加速。

Intel oneAPI Collective Communications Library (oneCCL)

分布式训练在大型模型交换状态信息时常常面临网络瓶颈。Intel oneAPI Collective Communications Library (oneCCL) 被用作 torch.distributed 的通信后端,以高效处理诸如 all-reduce 之类的通信模式,这对于在分布式训练过程中保持节点同步至关重要。

性能基准

使用在 MRPC 数据集(GLUE 基准的一部分)上微调的 BERT 模型,Hugging Face 测量了不同集群规模下的训练时间。基线是在单节点(Amazon EC2 c6i.16xlarge 实例)上建立的。

MRPC 数据集结果

集群规模 训练时间 加速比
1 节点 7 分 46 秒 基线
2 节点 4 分 39 秒 1.7x
4 节点 2 分 36 秒 3x

QQP 数据集结果

对于涉及超过 400,000 个训练样本的更大数据集的 Quora Question Pairs (QQP) 任务,加速效果保持一致:

集群规模 训练时间 加速比
1 节点 11 小时 22 分 基线
2 节点 6 小时 38 分 1.71x
4 节点 3 小时 51 分 2.95x

实施要求

设置分布式环境需要特定的配置步骤,以确保兼容性和性能:

  • 基础设施:主节点和工作节点之间配置了免密码 SSH 的相同实例,并且所有 TCP 端口对内部 oneCCL 通信开放。
  • 依赖匹配:PyTorch 和 Intel Extension for PyTorch 必须具有匹配的版本(例如,PyTorch 1.9.0 和 torch_ipex 1.9.0)。
  • 脚本修改:训练脚本必须更新以导入 torch_ccl,通过环境变量(如 PMI_RANK)处理本地排名,并为 CCL 后端配置主节点地址和端口。
  • 执行:使用 mpirun 启动作业以指定进程数和每节点的进程数。

Sources

相关