利用NCCL Inspector增强AI工作负载通信可观测性
在使用NVIDIA集体通信库(NCCL)运行依赖于集体操作(如AllReduce、AllGather和ReduceScatter)的深度学习训练或推理工作负载时,在实际运行过程中判断NCCL的性能表现可能颇具挑战。
本文介绍的NCCL Inspector分析器插件旨在解决此问题。它为分布式深度学习训练和推理工作负载提供了一种全面、低开销且可持续启用的性能可观测性方法。
什么是NCCL Inspector?
NCCL Inspector是一款性能分析和分析工具,可提供详细的、按通信器、按集体操作的性能和元数据日志记录。该工具包含两个主要步骤:数据收集和数据分析。
NCCL Inspector可以帮助回答以下各类问题:
- 作业内集体操作性能比较:在数据并行域与张量并行域中,AllReduce、AllGather、ReduceScatter和其他集体操作的性能表现如何?
- 作业间集体操作性能比较:昨天的网络拥塞是否导致集体操作性能不佳?这是否是计算性能下降的原因?
- 计算-网络性能关联:如果计算性能(TFLOPs)整体下降,是否由网络性能下降引起?
NCCL Inspector会定期将通信器中每个计算核心的集体操作带宽和持续时间记录到磁盘。作业完成后,这些性能数据会在作业的生命周期内被分析和关联起来,从而在多GPU作业的生命周期内表征NCCL集体操作的性能。
作为多GPU和多节点通信的关键组件,每个使用NCCL的框架都能受益于NCCL Inspector提供的详细可观测性。
NCCL Inspector利用NCCL 2.23中引入的插件接口,为生产环境工作负载提供持续的可观测性,同时最大限度地降低性能开销。
在数据收集步骤中,NCCL Inspector库指示NCCL其应发出哪些特定的集体操作事件。用户可以通过NCCL_PROFILER_PLUGIN环境变量加载该库(例如,深度学习框架)。然后,NCCL Inspector监听NCCL发出的已订阅事件,并为每个事件生成结构化的JSON输出,从而能够深入了解NCCL集体操作的性能特征。
作业完成后的分析和可视化通过NCCL代码库中提供的示例Python脚本生成和执行。此JSON输出随后被输入分析脚本和各种可观测性平台,以深入了解生产工作负载运行期间NCCL的性能。
NCCL Inspector的关键特性
使NCCL Inspector颇具实用价值的一些关键特性包括:
- 按通信器跟踪:NCCL Inspector为每个NCCL通信器维护独立的跟踪。这对于AI工作负载等复杂的分布式应用程序尤其有价值,在这些场景中,多个通信器可能用于不同的目的,例如并行域。
- 持续低开销:NCCL Inspector的低开销性能跟踪意味着可以在生产工作负载中启用它,提供对NCCL性能的“持续”可观测性,而不会造成显著的性能下降。
- 性能指标:NCCL Inspector计算并报告关键性能指标,包括:
- 算法带宽
- 总线带宽
- 执行时间(微秒)
- 消息大小和集体操作类型
- 网络技术无关性:NCCL Inspector利用插件接口与NCCL集成。它与NCCL支持的各种网络技术(RoCE、IB、EFA等)无关。
数据收集阶段
在数据收集阶段,NCCL Inspector通过几个环境变量进行初始化。
必需变量:
NCCL_PROFILER_PLUGIN:插件库二进制文件的路径。NCCL_INSPECTOR_ENABLE=1NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS:设置输出写入的时间间隔。
可选变量:
NCCL_INSPECTOR_DUMP_DIR:日志的输出目录。NCCL_INSPECTOR_DUMP_VERBOSE(可选):启用包含事件跟踪信息的详细输出。
使用示例(SLURM) 要启用NCCL Inspector并开始数据收集阶段,请在SLURM的SBATCH脚本中插入以下环境变量设置:
export NCCL_PROFILER_PLUGIN=/path/to/nccl/ext-profiler/inspector/libnccl-profiler-inspector.so
export NCCL_INSPECTOR_ENABLE=1
export NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS=500
export NCCL_INSPECTOR_DUMP_DIR=/path/to/logs/${SLURM_JOB_ID}/
srun your_nccl_application
示例输出格式
{
"header": {
"id": "0x7f8c496ae9f661", // 通信器ID
"rank": 2,
"n_ranks": 8,
"nnodes": 1
},
"metadata": {
"inspector_output_format_version": "v4.0",
"git_rev": "",
"rec_mechanism": "profiler_plugin",
"dump_timestamp_us": 1748030377748202,
"hostname": "hostname",
"pid": 1639453
},
"coll_perf": {
"coll": "AllReduce",
"coll_sn": 1407,
"coll_msg_size_bytes": 17179869184,
"coll_exec_time_us": 61974,
"coll_algobw_gbs": 277.210914,
"coll_busbw_gbs": 485.119099
}
}
详细输出
当使用 NCCL_INSPECTOR_DUMP_VERBOSE=1 启用详细模式时,每个核心的性能输出如下:
{
"header": {
"id": "0xe62dedaa97644a", // 通信器信息
"rank": 4, // 通信器ID
"n_ranks": 8,
"nnodes": 1
},
"metadata": {
"inspector_output_format_version": "v4.0",
"git_rev": "9019a1912-dirty",
"rec_mechanism": "nccl_profiler_interface",
"dump_timestamp_us": 1752867229276385,
"hostname": "hostname",
"pid": 438776
},
"coll_perf": {
"coll": "ReduceScatter",
"coll_sn": 1231,
"coll_msg_size_bytes": 2147483648,
"coll_exec_time_us": 41057,
"coll_timing_source": "kernel_gpu",
"coll_algobw_gbs": 418.439467,
"coll_busbw_gbs": 366.134533,
"event_trace_sn": {
"coll_start_sn": 1,
"coll_stop_sn": 2,
"kernel_events": [
{
"channel_id": 0,
"kernel_start_sn": 3,
"kernel_stop_sn": 48,
"kernel_record_sn": 47
}
]
},
"event_trace_ts": {
"coll_start_ts": 1752867229235059,
"coll_stop_ts": 1752867229235064,
"kernel_events": [
{
"channel_id": 0,
"kernel_start_ts": 1752867229235181,
"kernel_stop_ts": 1752867229275811,
"kernel_record_ts": 1752867229275811
}
]
}
}
}
数据分析阶段
NCCL Inspector包含一个示例性的综合性能分析和可视化工具,用于处理日志文件并生成详细的性能报告。性能摘要导出器工具提供了集体通信性能的丰富可视化和统计分析。
性能摘要导出器
这个独立的性能摘要导出器是一个基于Python的分析工具,位于 ext-profiler/inspector/exporter/example/。该工具执行以下任务:
- 处理多种格式的NCCL Inspector日志(.log、.log.gz、.jsonl、.jsonl.gz)。
- 将数据导出为Parquet格式以便高效处理。
- 为集体操作生成统计摘要。
- 创建可视化图表,包括散点图、直方图和箱线图。
- 对通信模式进行分类:
- 单核心
- 仅NVLink
- 仅HCA
- 混合模式
仪表板集成 某中心的团队已将NCCL Inspector的数据集成到仪表板中,可以提供每个SLURM作业的NCCL性能概览。
图1. 每作业集体操作性能与弹性仪表板的集成 图2. 按集体操作类型的性能,例如用于张量并行的仅NVLink集体操作性能
使用场景和应用
可以利用NCCL Inspector进行一系列应用和使用场景,包括性能分析、研发和生产监控。
- 性能分析:Inspector支持对集体通信性能进行详细分析,有助于识别分布式训练工作负载中的瓶颈和优化机会。
- 研究与开发:研究人员可以利用详细的事件跟踪和性能指标来开发新的通信模式和算法。
- 生产监控:Inspector的持续启用特性使其适用于生产工作负载的连续监控,提供随时间推移的通信性能洞察。
开始使用NCCL Inspector
NCCL Inspector为理解和优化分布式训练工作负载中的集体通信性能提供了一个强大的工具。其低开销设计使其适用于生产环境,而其详细的事件跟踪和性能指标则支持对通信模式进行深入分析。
要开始使用并了解更多关于NCCL及相关工具的信息,请访问某中心的NCCL GitHub代码库并探索某中心的Magnum IO文档。