使用 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_ipex1.9.0)。 - 脚本修改:训练脚本必须更新以导入
torch_ccl,通过环境变量(如PMI_RANK)处理本地排名,并为 CCL 后端配置主节点地址和端口。 - 执行:使用
mpirun启动作业以指定进程数和每节点的进程数。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch