你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在高性能计算(HPC)和人工智能(AI)领域,优化虚拟机(VM)的性能至关重要。 Azure 提供了一套工具和技术,以确保 HPC 和 AI 工作负载在其平台上高效运行。 此优化的两个关键方面是固定进程和线程,以及 MPI 进程的最佳放置。
本文提供了有关如何在 Azure VM 上增强 HPC 和 AI 工作负载性能的详细指导。 它旨在介绍进程和线程固定、MPI 进程的最佳放置以及使用 Azure 工具(如 checkapppinning.py)来实现这些优化的重要性。 此外,它还介绍了 MPI 进程放置、性能指标收集的策略,以及针对不同 MPI 实现的建议,以确保在 Azure 的 HPC 专用 VM 上高效有效地执行 HPC 和 AI 应用程序。
协助优化 Azure HPC/AI VM 进程/线程绑定的工具
若要最大程度地提高 HPC 应用程序的性能,必须跨 VM 均匀分配进程和线程,并利用所有套接字、NUMA 域和 L3 缓存。 此分布可确保优化内存带宽和浮点性能。 在混合并行应用程序中,每个进程都有多个线程。 为了最大化数据共享和重用,最好将进程及其线程保留在同一 L3 缓存上。
Azure 提供了一款名为 Check App Pinning 的工具,以帮助完成此过程。 它有助于查看 VM CPU 拓扑、检查并行应用程序进程和线程的运行位置,并生成最佳 MPI 和 Slurm 计划程序进程相关性参数。 使用此工具,确保其 HPC/AI 应用程序以最佳方式在 Azure HPC 专用 VM 上运行。
示例:使用工具
- 查看 VM CPU 拓扑
# python check_app_pinning.py --view-topology
- 检查进程和线程放置
# python check_app_pinning.py --check-placement
- 生成相关性参数
# python check_app_pinning.py --generate-affinity
利用此工具,可以为 Azure 上的 HPC 和 AI 工作负载实现更好的性能,确保应用程序高效高效地运行。
Azure HB 系列 VM 的最佳 MPI 进程位置
对于 MPI 应用程序,最佳的进程绑定可能会带来显著的性能改进,特别是对于资源不足的系统。 引入 AMDs Chiplet 设计增加了此过程的复杂性。 在 Chiplet 设计中,AMD 将多个较小的 CPU 集成在一起,以提供一个拥有 64 核的插座。 若要最大程度地提高性能,必须平衡每个核心的 L3 缓存和内存带宽量。
Azure HB 系列 VM(如 HB60rs 和 HBv2)附带多个 NUMA 域和核心。 例如,HB60rs VM 具有 60 个 AMD Naples 核心,每个套接字包含 8 个 NUMA 域。 在订阅 VM 时,需要在核心之间平衡 L3 缓存和内存带宽。 可以通过选择每个节点的适当核心数并使用特定的 MPI 进程放置策略来实现此目的。
示例:MPI 进程布局
- 选择每个节点的核心数
# mpirun -np 60 --map-by ppr:8:node --bind-to core my_mpi_application
- 跨 NUMA 域均匀分配 MPI 进程
# mpirun -np 60 --map-by ppr:8:node:pe=8 --bind-to numa my_mpi_application
性能指标集合
收集性能指标对于了解和优化 HPC 和 AI 工作负载的性能至关重要。 Azure 提供了多种用于收集这些指标的工具和方法。
示例:收集性能指标
使用 Azure Monitor:
- 设置 Azure Monitor 以收集 CPU 使用率、内存使用情况和网络带宽等指标。
- 创建 Log Analytics 工作区并配置诊断设置,以将指标发送到工作区。
使用 PerfCollect:
- 在 VM 上安装 PerfCollect
# wget https://aka.ms/perfcollect -O perfcollect # chmod +x perfcollect # sudo ./perfcollect install
- 开始收集指标
# sudo ./perfcollect start mysession
- 停止收集指标并生成报表
# sudo ./perfcollect stop mysession
MPI 实现
不同的 MPI 实现可以在 Azure HPC/AI VM 上具有不同的性能特征。 常见的 MPI 实现包括 OpenMPI、MPICH 和 Intel MPI。 每个实现都有其优势,可以根据特定的工作负荷和 VM 配置以不同的方式执行。
有关 MPI 设置和进程固定的建议
- OpenMPI
- 使用 --bind-to 和 --map-by 选项来控制进程位置。示例如下:
# mpirun -np 60 --bind-to core --map-by ppr:8:node my_mpi_application
- MPICH
- 使用HYDRA_BIND和HYDRA_RANK环境变量来控制进程放置示例:
# export HYDRA_BIND=core # export HYDRA_RANK=8 # mpiexec -np 60 my_mpi_application
- Intel MPI
- 使用I_MPI_PIN和I_MPI_PIN_DOMAIN环境变量来控制进程放置。 示例:
# export I_MPI_PIN=1 # export I_MPI_PIN_DOMAIN=socket # mpirun -np 60 my_mpi_application
遵循这些建议并使用 Azure 提供的工具和技术,可以优化其 HPC 和 AI 工作负载的性能,确保 Azure HPC 专业 VM 上的高效执行。