昇腾集群PFC现象分析

简介: 负责集群运维的同学可能都遇到过PFC现象,那么PFC到底是啥?产生原因是什么?这篇文章提供了一些分析。

一、PFC产生原因

负责集群运维的同学可能都遇到过PFC现象,那么PFC到底是啥?产生原因是什么?这篇文章提供了一些分析。

首先,参考官网文档的说法:

PFC(Priority-based Flow Control)的含义是基于优先级的流量控制,它是目前应用最广泛的能够有效避免丢包的 流量控制技术,是 智能无损网络的基础。使能了PFC功能的队列,我们称之为无损队列。当下游设备的无损队列发生拥塞时,下游设备会通知上游设备会停止发送该队列的流量,从而实现零丢包传输。

我们来通过一个例子来理解一下。如下图所示,图中画出了一个昇腾集群中的部分AI服务器和交换机(switch),交换机的作用是实现不同服务器之间的通信(大多是在分布式训练任务中)。比如说server 1、server 2和server 3可以通过switch 1进行通信,server 2和server 3可以通过switch 2进行通信。每个switch的收、发带宽都是固定的,而且都有一定的缓存空间。为啥需要缓存呢?因为有可能多个server同时发送流量过来,但是这些流量之和超过了switch的带宽,所以需要先放行部分流量,然后缓存剩下的。而且为了防止缓存超载,要设置一个水线,缓存超过这个水线,就会报警了,也就会触发下面所说的PFC现象了。


AI集群示例

现在假设switch 1 的入口带宽为1.5M,缓存空间为1.5M,缓存水线为1M。假如某一时刻,server 1、server 2同时向switch 1 发送数据,server 1的数据大小为1.3M,server 2发送的数据大小为1.2M,那么switch 1可以让server 1或者server 2 的数据先通过(例如server 1先过),然后缓存另一个。由于缓存的数据大小超过了switch 1的水线,所以此时switch 1会向server 2发送一个反压信号,告诉server 2不要再发数据来啦!但是当switch 1的缓存数据低于水线之后,它又会给server 2发个消息说:我OK啦,可以发消息啦!

所以说,反压信号包含2类,一类是stop,一类是continue。

同理,服务器侧的NPU也会有PFC信号,因为NPU可能会同时接收多个switch发送过来的消息。

二、PFC原因排查

出现PFC现象后,会有两种结果,一种是对集群的性能产生了影响,甚至导致集群不可用;还有一种情况就是对性能没有影响。

我们先讨论后一种情况,这种情况很可能是并行通信过程中常见的“多打一”场景,也就是服务器同时收到多个交换机发送的数据或者交换机同时收到多个服务器发送过来的消息。我们可以利用mindstudio insight来判断是否存在这种情况,下面通过一个例子来解释。

假如我们现在有一份多机多卡的profiling,我们使用mindstudio insight把它加载进来,然后查看timeline和“通信”子界面的通信算子的时序,从而判断是否有“多打一”的情况。

2.1 服务器侧NPU可能出现PFC的场景

NPU侧出现“多打一”,是因为同时收到了多个交换机发送过来的数据,所以我们可以观察每个卡的HCCL timeline,看看是否有多个跨机通信域的通信算子同时执行。注意,这里强调“跨机”是因为只有跨机的通信才会用到交换机。跨机通信域一般包括pipeline并行、数据并行等,具体哪些通信域是跨机的,还需要根据实际的并行配置进行判断。

Mindstudio insight timeline

如上图所示,红框截图就是1号卡的通信域的算子执行时序,每个卡有多个通信域,因为这个卡可能同时参与了多种并行,蓝框的每个plane反馈的也是通信行为,只是它反馈的是task粒度,Group xx communication 反馈的是算子粒度。我们点击绿框中的标记就可以把这一行置顶。所以我们可以把1号卡的多个跨机通信域的算子执行序置顶,这样就可以看到哪些算子存在并发行为。那么有同学问了,我怎么知道哪些 communication group是跨机通信域呢?1,版本开发的同学正在做一个需求,就是显示每个communication group对应哪些卡,这样我们就可以知道是不是跨机通信域了,比如说4机32卡的集群,[0, 8, 16, 24]组成的一个通信域就是跨机的(0号卡属于1号服务器,8卡属于2号服务器,16卡属于3号服务器,24卡属于4号服务器);2,在这个需求做出来之前,我们可以通过分析这个group里面的通信算子类别判断它对应的是什么通信域:)。

置顶后的通信域算子执行时序

上图是把1号卡的不同通信域算子执行序置顶后的结果,我们可以把时间轴拉开,看看不同的跨机通信域的通信算子(reveice过程)是否存在并发状态,如果有,那么很可能会导致服务器侧出现PFC现象!

2.2 交换机可能出现PFC的场景

交换机出现“多打一”,是因为同时有多个跨机通信行为使用了同一个交换机进行数据交换。有2种情况会导致这种行为发生,一种是上面举例的[0, 8, 16, 24]组成的通信域中,多个卡同时向同一个交换机发送数据;另一种是多个跨机通信域中的多个卡,同时向同一个交换机发送数据。

对于前一种情况,我们可以如下打开mindstudio的通信界面,选择一个跨机通信域(下面的示例不一定是跨机通信域,只是为了演示),然后查看有没有多个卡存在并发通信算子(send过程)。

mindstudio insight “通信”界面

对于后一种情况,我们需要再次使用timeline,在已知哪些卡对应于同一个交换机的情况下(怎么知道这个信息?后续再补充,知道的朋友可以在评论区补充),把这些卡的communication group都置顶进行比较分析,观察是否有通信算子(send过程)的并发行为。

好的,到这里告一段落,主要介绍了如何使用mindstudio insight分析可能产生PFC的场景。

--------------------------

大家有没有遇到过PFC现象呢?欢迎留言讨论!

目录
相关文章
|
8月前
|
人工智能 Kubernetes 安全
最新!云上openclaw“养虾”服务指南来了
阿里云推出OpenClaw“云上养虾”全栈指南:轻量服务器一键部署、PAI平台智能开发、Agentbay企业托管、MobileClaw安卓版及ACS沙箱环境,覆盖个人、开发者与企业需求,安全、便捷、实用。
2505 10
|
10月前
|
人工智能 专有云 索引
Qwen3-Pro重磅发布!基于阿里云APG服务器的专属优化模型,性能翻倍
近日,阿里云专有云团队联合通义实验室推出针对阿里云APG服务器的专属优化模型Qwen3-Pro:对比Qwen3-VL-235B(开源版)模型效果持平、性能翻倍
1040 0
|
运维 Prometheus 监控
基于阿里云可观测产品构建企业级告警体系的通用路径与最佳实践
本文围绕企业级告警体系构建展开,探讨了监控与告警在系统稳定性中的重要作用。通过梳理监控对象、分析指标、采集数据及配置规则等环节,提出告警体系建设的通用流程,并针对多平台告警、误报、告警风暴等问题提供解决思路。结合阿里云可观测产品,分享了某电商企业的实践案例,展示了如何通过标签规范、日志标准和统一管理平台实现高效告警处置,为构建全面且实用的告警体系提供了参考指南。
1638 1
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
10月前
|
大数据 测试技术 C++
CN2线路与普通线路区别详解:一文看懂核心差异
在跨境网络访问、服务器部署等场景中,“CN2线路”和“普通线路”是经常被提及的两个概念。对于企业开展跨境业务、个人追求稳定网络体验而言,了解二者的区别至关重要。本文将从概念定义、核心性能、适用场景等多个维度,全面解析CN2线路与普通线路的差异,帮助你根据自身需求做出合适选择。
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 Kubernetes 应用服务中间件
Ingress-Nginx使用指南上篇
关于Ingress-Nginx在Kubernetes中的使用指南,涵盖了从基础安装到高级特性配置的详细步骤和实战案例。
5973 3
Ingress-Nginx使用指南上篇
|
机器学习/深度学习 PyTorch 算法框架/工具
数据平衡与采样:使用 DataLoader 解决类别不平衡问题
【8月更文第29天】在机器学习项目中,类别不平衡问题非常常见,特别是在二分类或多分类任务中。当数据集中某个类别的样本远少于其他类别时,模型可能会偏向于预测样本数较多的类别,导致少数类别的预测性能较差。为了解决这个问题,可以采用不同的策略来平衡数据集,包括过采样(oversampling)、欠采样(undersampling)以及合成样本生成等方法。本文将介绍如何利用 PyTorch 的 `DataLoader` 来处理类别不平衡问题,并给出具体的代码示例。
3600 2