你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

H 系列和 N 系列 VM 的已知问题

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

本文尝试列出使用 H 系列N 系列 HPC 和 GPU VM 时最常见的问题及其解决方案。

Standard_HB120rs_v3 上的缓存拓扑

lstopo 显示 Standard_HB120rs_v3 VM 大小上不正确的缓存拓扑。 它可能显示每个 NUMA 只有 32 MB L3。 但是实际上,每个 NUMA 按照预期确实有 120 MB L3,因为对于整个 VM,与其他受限核心 HBv3 VM 大小一样,可使用 480 MB 的 L3。 这是显示正确值时出现的显示错误,不会影响工作负载。

qp0 访问限制

若要防止可能导致安全漏洞的低级别硬件访问,来宾 VM 将无法访问队列对 0。 这只会影响通常与 ConnectX InfiniBand NIC 的管理相关的操作,以及运行一些 InfiniBand 诊断(如 ibdiagnet),而不会影响最终用户应用程序。

Ubuntu 上的 MOFED 安装

在内核版本为 5.4.0-1039-azure #42 及更高版本的基于 Ubuntu-18.04 的市场 VM 映像上,某些早期 Mellanox OFED 不兼容,这会导致在某些情况下 VM 启动时间增加长达 30 分钟。 Mellanox OFED 版本 5.2-1.0.4.0 和 5.2-2.2.0.0 均存在此问题。 可通过 Mellanox OFED 5.3-1.0.0.1 解决此问题。 如果需要使用不兼容的 OFED,一种解决方案是使用 Canonical:UbuntuServer:18_04-lts-gen2:18.04.202101290 市场 VM 映像或更低版本,而不是更新内核。

HB、HC、HBv2、HBv3 和 NDv2 上的加速网络

Azure 加速网络目前在支持 RDMA 和 InfiniBand 和启用了 SR-IOV 的 VM 大小 HBHCHBv2HBv3NDv2 上提供。 此功能现在允许在 Azure 以太网上增强吞吐量(最多 30 Gbps)和延迟。 尽管这不同于 InfiniBand 网络上的 RDMA 功能,但在 InfiniBand 上运行作业时,此功能的一些平台更改可能会影响某些 MPI 实现的行为。 具体来说,某些 VM 上的 InfiniBand 接口的名称可能略有不同(mlx5_1,而不是之前的 mlx5_0)。 这可能需要调整 MPI 命令行,尤其是在使用 UCX 接口(通常与 OpenMPI 和 HPC-X 一起使用)时。

目前最简单的解决方案是在 CentOS-HPC VM 映像上使用最新的 HPC-X,在此映像中,我们相应地重命名 InfiniBand 和加速网络接口,或者运行 脚本 来重命名 InfiniBand 接口。

有关详细信息,请阅读此 TechCommunity 文章,其中提供了有关如何解决任何观察到的问题的说明。

非 SR-IOV VM 上的 InfiniBand 驱动程序安装

目前 H16r、H16mr 和 NC24r 未启用 SR-IOV。 有关 InfiniBand 堆栈分流的详细信息,请参阅 Azure VM 大小 - HPC。 可在启用了 SR-IOV 的 VM 上通过 OFED 驱动程序配置 InfiniBand,而非 SR-IOV VM 需要 ND 驱动程序。 此 IB 支持在 CentOS、RHEL 和 Ubuntu 上根据情况提供。

在 H 系列和 N 系列 VM 上,Ubuntu 中的 cloud-init 存在重复 MAC

Ubuntu VM 映像上的 cloud-init 在尝试打开 IB 接口时出现已知问题。 在 VM 重新启动或泛化后尝试创建 VM 映像时可能出现此情况。 VM 启动日志可能会显示错误,如下所示:

“Starting Network Service...RuntimeError: duplicate mac found! both 'eth1' and 'ib0' have mac”.

这是一个已知问题,即“Ubuntu 上的 cloud-init 存在重复 MAC”。 这将在更新的内核中得到解决。 如果遇到此问题,解决方法是:

  1. 部署 (Ubuntu 18.04) 市场 VM 映像
  2. 安装必要的软件包以启用 IB(说明见此处
  3. 编辑 waagent.conf 以更改 EnableRDMA=y
  4. 禁用云 cloud-init 中的网络
    echo network: {config: disabled} | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
    
  5. 编辑 netplan 的网络配置文件(由 cloud-init 生成)以删除 MAC
    sudo bash -c "cat > /etc/netplan/50-cloud-init.yaml" <<'EOF'
    network:
      ethernets:
        eth0:
          dhcp4: true
      version: 2
    EOF
    

HB 系列 VM 上的 DRAM

HB 系列 VM 此时只能向来宾 VM 公开 228 GB 的 RAM。 同样,在 HBv2 上是 458 GB,在 HBv3 虚拟机上是 448 GB。 这是因为 Azure 虚拟机监控程序的已知限制阻止将页面分配给为来宾 VM 保留的 AMD CCX 的本地 DRAM(NUMA 域)。

GSS 代理

GSS 代理在 CentOS/RHEL 7.5 中有一个已知 bug,在与 NFS 一起使用时,会表现为显著的性能和响应性损失。 这可以通过以下方式来缓解:

sed -i 's/GSS_USE_PROXY="yes"/GSS_USE_PROXY="no"/g' /etc/sysconfig/nfs

清理缓存

在 HPC 系统上,在任务完成后,在下一个用户被分配到相同节点之前,清理内存通常很有用。 在 Linux 中运行应用程序后,你可能会发现,尽管没有运行任何应用程序,但可用内存减少了,而缓冲区内存增加了。

清理前的命令提示符屏幕截图

使用 numactl -H 将显示哪些 NUMAnode 的内存进行了缓冲(可能全部)。 在 Linux 中,用户可以通过三种方式清理缓存,以将缓冲或缓存的内存恢复到“可用”。 需要有 root 权限或 sudo 权限。

echo 1 > /proc/sys/vm/drop_caches [frees page-cache]
echo 2 > /proc/sys/vm/drop_caches [frees slab objects e.g. dentries, inodes]
echo 3 > /proc/sys/vm/drop_caches [cleans page-cache and slab objects]

清理后的命令提示符屏幕截图

内核警告

在 Linux 下启动 HB 系列 VM 时,可能会忽略以下内核警告消息。 这是因为 Azure 虚拟机监控程序的一个已知限制,将在一段时间内解决此问题。

[  0.004000] WARNING: CPU: 4 PID: 0 at arch/x86/kernel/smpboot.c:376 topology_sane.isra.3+0x80/0x90
[  0.004000] sched: CPU #4's llc-sibling CPU #0 is not on the same node! [node: 1 != 0]. Ignoring dependency.
[  0.004000] Modules linked in:
[  0.004000] CPU: 4 PID: 0 Comm: swapper/4 Not tainted 3.10.0-957.el7.x86_64 #1
[  0.004000] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090007 05/18/2018
[  0.004000] Call Trace:
[  0.004000] [<ffffffffb8361dc1>] dump_stack+0x19/0x1b
[  0.004000] [<ffffffffb7c97648>] __warn+0xd8/0x100
[  0.004000] [<ffffffffb7c976cf>] warn_slowpath_fmt+0x5f/0x80
[  0.004000] [<ffffffffb7c02b34>] ? calibrate_delay+0x3e4/0x8b0
[  0.004000] [<ffffffffb7c574c0>] topology_sane.isra.3+0x80/0x90
[  0.004000] [<ffffffffb7c57782>] set_cpu_sibling_map+0x172/0x5b0
[  0.004000] [<ffffffffb7c57ce1>] start_secondary+0x121/0x270
[  0.004000] [<ffffffffb7c000d5>] start_cpu+0x5/0x14
[  0.004000] ---[ end trace 73fc0e0825d4ca1f ]---

后续步骤