昇腾集群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现象呢?欢迎留言讨论!

目录
相关文章
|
Web App开发 机器学习/深度学习 语音技术
在ModelScope-FunASR中,语音识别系统中的声音活动检测
在ModelScope-FunASR中,语音识别系统中的声音活动检测【4月更文挑战第3天】
969 1
|
运维 Linux 网络安全
推荐几款SSH客户端
对于经常使用Linux服务器的,应该都对SSH比较熟悉吧!特别是做运维的,而对于做Linux或Android系统开发的,一般会在公司搭建一台性能强劲的服务器,然后大家一起在上面做开发。大家一般都是通过SSH客户端登录到服务器上进行开发。那接下来给大家推荐几款平时常用的SSH客户端。
|
存储 人工智能 对象存储
一文详解阿里云AI大基建
一文详解阿里云AI大基建
3043 2
|
8月前
|
存储 运维 监控
120_检查点管理:故障恢复 - 实现分布式保存机制
在大型语言模型(LLM)的训练过程中,检查点管理是确保训练稳定性和可靠性的关键环节。2025年,随着模型规模的不断扩大,从百亿参数到千亿参数,训练时间通常长达数周甚至数月,硬件故障、软件错误或网络中断等问题随时可能发生。有效的检查点管理机制不仅能够在故障发生时快速恢复训练,还能优化存储使用、提高训练效率,并支持实验管理和模型版本控制。
631 5
120_检查点管理:故障恢复 - 实现分布式保存机制
|
存储 JSON 数据格式
Python环境变量
Python环境变量
648 5
|
SQL 人工智能 数据可视化
数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式
数据项目复杂,涉及代码、数据、运行环境等多部分。随着AI发展,数据科学团队面临挑战。协作式数据文档(如阿里云DataV Note)成为提升效率的关键工具。它支持跨角色协同、异构数据处理、多语言分析及高效沟通,帮助创建知识库,实现可重现的数据科学过程,并通过一键分享报告促进数据驱动决策。未来,大模型AI将进一步增强其功能,如智能绘图、总结探索、NLP2SQL/Python和AutoReport,为数据分析带来更多可能。
878 142
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JSON Kubernetes 负载均衡
第一次看 config dump
前言各位,知道的越多,就越会发现自己的无知。在面对服务网格这样的新兴概念之时,就更是如此了。回想昨日,满头大汗地研究VirtualService和DestinationRule是干什么用的自己仿佛还近在眼前。然而,在搞明白了服务网格的基本概念之后,我却发现自己甚至坠落进更大的疑惑之中了。如果你看过了一些istio的基本知识与概念,你应该知道istio为每个数据面的Pod都注入了一个Sidecar,
第一次看 config dump
|
存储
【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)
**NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**
578 0
|
Kubernetes 监控 Cloud Native
阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
1963 2

热门文章

最新文章