数据分析

背景

在 AI 训练过程中,性能问题和故障是影响训练效率和成本的关键因素。尽管 sysTrace 能够采集多维度的性能数据,但这些原始数据本身并不能直接揭示训练过程中的问题。数据分析模块是 sysTrace 的核心智能组件,它通过先进的算法对采集到的各类数据进行深度分析,实现对训练性能的实时监控、异常检测和故障定位。

AI 训练面临的主要性能挑战包括:

  • 训练过程中的性能突然劣化(FailSlow),导致训练时间显著增加
  • 多卡/多节点训练环境下的性能不一致,存在"慢卡"问题
  • 缺乏自动化的异常检测和根因分析能力
  • 训练任务阻塞死等严重故障难以快速定位

数据分析模块的主要作用包括:

  • 实时监测训练性能指标,及时发现性能劣化和异常
  • 精确定位导致性能问题的具体节点、算子或系统资源
  • 提供量化的性能分析结果,支持故障根因诊断
  • 降低人工分析的复杂度和时间成本,提高问题解决效率

sysTrace 提供了两大核心分析算法:FailSlow 算法用于性能劣化感知,慢卡定界算法用于定位具体的性能瓶颈点。

FailSlow 算法

算法背景

FailSlow(性能劣化)是 AI 训练中常见的性能问题,表现为训练过程中某个或某些步骤的执行时间突然显著增加,导致整体训练效率下降。与传统的硬件故障不同,FailSlow 问题往往更加隐蔽,难以通过简单的监控指标直接发现。

FailSlow 算法是 sysTrace 针对这一痛点设计的核心算法,它通过对训练过程中每个 step 的执行时间进行实时监测和分析,能够:

  • 自动识别训练过程中的性能劣化点
  • 量化评估性能劣化的程度
  • 区分正常的性能波动和异常的性能劣化
  • 检测训练任务是否 hang 死

该算法采用滑动窗口和统计分析相结合的方式,能够适应不同训练任务的动态特性,有效避免误报和漏报。

参数配置

参数 类型 说明 默认值
training_log string 算法输入 torch 数据路径,以 "*.timeline" 结尾,取 0 卡即可 /home/workspace/hbdir/systrace/localhost.localdomain--00000.timeline
fail_slow_perception_path string 劣化感知算法输出结果,保存为 json 文件 /etc/systrace/result/fail_slow/fail_slow_perception_result_failSlow_1753099791.json
max_data_queue_steps int 缓存 step 数据最大队列 500
min_startup_detection_steps int 启动检测的最小 step 数量 10
task_stable_step int 任务初始训练时 step 稳定的数量 3
fail_slow_span_mins float 劣化感知算法的检测周期,单位 min 30
hang_times_mins_thr float 判断任务是否 hang 的阈值,单位 min 30
steps_window_size int 滑动窗口大小 5
k_sigma int bboxplot 算法的 ksigma 取值 3
anomaly_degree_thr float 检测值偏离均值的程度 0.2

执行算法

systrace-failslow --remote-hosts [ip] --ssh-port [port] --enable-fail-slow 

输出结果

感知结果字段表:

字段 类型 说明 默认值
alert_type string 劣化类型 performance_degradation
severity string 劣化告警等级 critical
timestamp int 检测到的劣化时间戳节点 1772269252025108
rank_id int 检测到劣化的卡号 0
description string 劣化告警描述 Performance degradation detected at step 25 at time 1772269252025108
detector_type string 检测器算法 SlidingWindowKSigmaRobust
degradation_type string 检测种类 rise
identified_index int 检测到的step 25
observed_value int 检测到的劣化的值 3239875791
mean float 窗口内的均值 1054789970.0
std float 窗口内的标准差 860609524.0659

输出样例:

{
  "alert_type": "performance_degradation",
  "severity": "critical",
  "timestamp": 1772269252025108,
  "rank_id": 0,
  "description": "Performance degradation detected at step 25 at time 1772269252025108",
  "details": {
    "detector_type": "SlidingWindowKSigmaRobust",
    "degradation_type": "rise",
    "identified_index": 25,
    "observed_value": 3239875791,
    "mean": 1054789970.0,
    "std": 860609524.0659
  }
}

慢卡定界算法

算法背景

在多卡或多节点分布式训练环境中,"慢卡"问题是导致训练效率下降的主要原因之一。由于硬件差异、资源竞争、网络拥塞等因素,不同节点或卡的训练速度可能出现不一致,最终导致整个训练任务被最慢的卡拖慢(木桶效应)。

慢卡定界算法是 sysTrace 提供的另一核心算法,它在 FailSlow 算法检测到性能劣化的基础上,进一步定位具体的性能瓶颈:

  • 识别出导致整体性能下降的具体卡或节点
  • 区分是计算慢、通信慢还是存储慢导致的性能问题
  • 提供详细的性能对比数据,支持根因分析
  • 适应不同的分布式训练框架和通信模式

该算法通过对各节点/卡的算子执行时间、通信延迟等指标进行对比分析,能够快速定位性能瓶颈,帮助用户有针对性地优化训练配置或硬件环境。

参数配置

model_config.json

model_config.json 文件(/etc/systrace/config目录下)是用于配置模型运行所需的参数,主要包含以下配置项:

配置项 类型 说明 默认值
with_fail_slow bool 配置启动慢节点检测性能劣化来源于性能劣化检测的时刻还是手动配置 false
slow_node_detection_range_times list 慢节点检测输入的时间范围 []
slow_node_detection_time_span_hours float 慢节点检测的时间长度,单位小时 0.5
slow_node_detection_path string 慢节点检测结果保存路径 "/etc/systrace/result/slow_node"
data_type string 算子数据的格式 "json"
root_path string 算子数据的输入路径 "/home/hbdir/systrace_failslow/data/baseline"
enable_detect_type dict 检测不同故障类型的开关 见下方说明
fail_slow_ops dict 检测不同故障类型对应的观测点 见下方说明
save_image string 时序数据保存的路径,用于 debug 算法效果 "image"
record_kpi bool 时序数据是否记录到检测结果中 false
use_plot bool 时序数据保存开关,用于 debug 算法效果 false
max_num_normal_results int 检测结果最大记录正常节点数据数量 16
look_back int 告警抑制,单位分钟 20
hccl_domain dict 通信域默认配置,格式为字典 {}
rank_table_json string rank_table 配置文件路径,用于 mindspore 通信域配置 "./rank_table.json"
debug_data bool debug 模式,会保存算子执行和算子下发的中间文件 false

enable_detect_type 配置说明:

{
  "enable_cal": true,           // 计算慢开关
  "enable_op_launch": false,     // 算子下发慢开关
  "enable_comm": false,          // 通信慢开关
  "enable_dataloader": false,    // 输入模型数据加载慢开关
  "enable_ckpt": false          // 模型保存慢开关
}

fail_slow_ops 配置说明:

{
  "cal_slow": "HcclAllGather",        // 计算慢对应的观测点
  "op_launch_slow": "HcclAllGather_launch", // 算子下发慢对应的观测点
  "comm_slow": "HcclBatchSendRecv",    // 通信慢对应的观测点
  "dataloader_slow": "Dataloader",     // 输入模型数据加载慢对应的观测点
  "ckpt_slow": "SaveCkpt"              // 模型保存慢对应的观测点
}

metric_config.json

metric_config.json 文件(/etc/systrace/config目录下)是用于配置所有指标的检测算法参数,每个指标独立配置。

支持的指标列表:

指标名称 指标类型 说明 对应故障类型
HcclAllreduce device 计算慢对应的观测点 计算慢
HcclAllGather device 计算慢对应的观测点 计算慢
HcclAllGather_launch host 算子下发慢对应的观测点 算子下发慢
HcclBatchSendRecv device 通信慢对应的观测点 通信慢
Dataloader host 输入模型数据加载慢对应的观测点 数据加载慢
SaveCkpt host 模型保存慢对应的观测点 模型保存慢

HcclAllGather 指标配置示例:

配置项 类型 说明
metric_type string 指标类型,取值 "device" 和 "host"
aggregation dict 指标聚合配置
priority int 检测优先级
alarm_filter_window_size int 告警过滤窗口大小,表示检测出的异常点连续个数
space_detector dict 节点间对比检测器配置,不配置为 "null"
time_detector dict 单节点时序异常检测配置,不配置为 "null"

aggregation 配置说明:

配置项 类型 说明
during_s int 聚合窗口大小,单位秒
funcs list 聚合方法配置

funcs 配置说明:

配置项 类型 说明
func string 聚合方法,可选值:"min"、"max"、"mean"、"percentile" 等
func_params dict 聚合方法配置参数,根据不同的聚合方法配置

space_detector 配置说明:

配置项 类型 说明
dist_metric string 节点间距离函数类型,可选值:"euclidean" 等
eps float DBSCAN 聚类参数的阈值,点间距离大于该值则为另一类
cv_threshold float 判断值偏离均值的程度,偏移过大则认为是异常点
min_samples int DBSCAN 最小成新簇的点数
window_size int 窗口大小,表示单次检测的窗口,不重叠
scaling bool 表示时间序列是否归一化
deviation_ratio_thresh float 异常序列偏离正常序列的检测倍数
type string 空间检测器类型,可选值:"SlidingWindowDBSCAN"、"OuterDataDetector"

time_detector 配置说明:

配置项 类型 说明
preprocess_eps float DBSCAN 预处理的阈值
preprocess_min_samples int DBSCAN 预处理的最小点数
type string 时间检测器类型,可选值:"TSDBSCANDetector"、"SlidingWindowKSigmaDetector"
n_sigma_method dict 当为 "SlidingWindowKSigmaDetector" 类型时的配置

n_sigma_method 配置说明:

配置项 类型 说明
type string SlidingWindowKSigmaDetector 采用的检测算法
training_window_size int 滑动窗口的最大值,超过该值,覆盖已有 value
min_update_window_size int 滑动窗口的最小更新值
min_std_val float 最小标准差,当标准差为 0 时,设置为最小标准差
bias float 边界基础上的偏置系数
abs_bias float 边界基础上的偏置值
nsigma_coefficient int Ksigma 的系数
detect_type string 检测边界类型,可选值:"lower_bound"、"upper_bound"、"bi_bound"
min_expert_lower_bound int/null 下边界最小专家阈值,null 表示不设置专家阈值
max_expert_lower_bound int/null 下边界最大专家阈值,null 表示不设置专家阈值
min_expert_upper_bound int/null 上边界最小专家阈值,null 表示不设置专家阈值
max_expert_upper_bound int/null 上边界最大专家阈值,null 表示不设置专家阈值

执行算法

systrace-failslow --remote-hosts [ip] --ssh-port [port] --enable-slow-node

注意: 算法执行前,需参考文档配置对应的数据路径

输出结果

慢卡定界算法输出字段表:

字段 类型 说明
objectId string 检测到的慢卡卡号
serverIp string 检测到的慢卡节点ip
deviceInfo string 检测到的慢卡卡号
kpiId string 检测用的算子名称
methodType string 检测的类型(空间还是时间)
kpiData list 检测的数值
relaIds list 相关联的rank卡号
omittedDevices list 忽略的设备列表
anomalyTimeRanges list 故障发生时间范围

输出样例:

{
  "objectId": "1",
  "serverIp": "x.x.x.x",
  "deviceInfo": "rank_1",
  "kpiId": "HcclAllreduce",
  "methodType": "SPACE",
  "kpiData": [],
  "relaIds": [0, 2, 3],
  "omittedDevices": [],
  "anomalyTimeRanges": [{
    "start": 1772265166453,
    "end": 1772265300654
  }]
}