本指南介绍了如何启用、停用和管理集体通信分析器 (CoMMA) 库。CoMMA 会收集 Google Cloud 服务的 NCCL 遥测数据。如需详细了解 CoMMA,请参阅 集体通信分析器 (CoMMA)。
启用 CoMMA
如果您使用包含 NCCL gIB 插件的映像,则 CoMMA 会预安装并启用。如需查看这些映像的列表,请参阅 已启用 CoMMA 的映像。
安装选项
如果您未使用任何这些映像,并且想要安装 CoMMA,请使用以下方法之一。
| 安装方法 | 支持的机器类型 |
|---|---|
| NCCL Google 基础架构软件包 (gIB) 映像 (建议用于较新的机器类型) | A4X Max、A4X、A4 High 和 A3 Ultra |
| CoMMA 安装程序映像 | A4X、A4 High 和 A3 Ultra |
| 从源代码构建 (较旧的机器类型需要此方法) | A3 Mega、A3 High、A3 Edge、A2 Ultra、A2 Standard 和挂接了 GPU 的 N1 |
安装 CoMMA
如需安装 CoMMA,请选择以下选项之一:
NCCL gIB 映像
如需使用 NCCL gIB 映像安装 CoMMA,请运行以下命令。
docker run --rm --name nccl-gib-installer --volume /usr/local/gib:/var/lib/gib \ us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/nccl-plugin-gib install \ --install-nccl
CoMMA 安装程序映像
您可以在独立 Docker 映像中获取 CoMMA 二进制文件。您可以使用 CoMMA Docker 映像 us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer 作为 initContainers,将 CoMMA 二进制文件安装到工作负载容器中。
该容器会将二进制文件存储在 /artifacts 目录中。
如需使用 CoMMA 安装程序映像,请完成以下步骤:
通过将以下代码段添加到
initContainers中,将 CoMMA 安装到工作负载中:- name: profiler-plugin-installer image: us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer:latest imagePullPolicy: Always volumeMounts: - name: nccl-plugin-volume mountPath: /usr/local/nccl-plugin command: - /bin/sh - -c - | set -ex rm -rf /usr/local/nccl-plugin/lib64/libnccl-profiler.so cp /artifacts/libnccl_profiler.so /usr/local/nccl-plugin/lib64/libnccl-profiler.so # GPUViz is a dependency of telemetry insights such as straggler detection rm -rf /usr/local/nccl-plugin/lib64/libGPUViz.so cp /artifacts/libGPUViz.so /usr/local/nccl-plugin/lib64/
YAML 配置代码段指定了用于安装 CoMMA 的容器。
该代码段指定了安装程序容器映像、其拉取政策以及插件的卷装载。
应将相同的卷装载装载到工作负载容器,并将
<mount-path>/lib64添加到LD_LIBRARY_PATH。
command 部分会运行 shell 脚本来移除任何现有的分析器库。然后,它会将新的分析器库复制到指定的插件目录中。
该脚本可确保安装正确版本的分析器插件并准备就绪,以供使用。
从源代码构建
如需从源代码构建 CoMMA 库,请安装以下软件:
- Rust 编程语言,编译器和 Cargo 需要此语言。 可以使用 rustup 或系统软件包安装此语言
Libclang-dev,bindgen需要此语言。CMake版本 3.10 或更高版本
如需从源代码构建,请完成以下步骤:
克隆代码库及其子模块。
git clone --recurse-submodules https://github.com/google/CoMMA
使用 Cargo 编译二进制文件。
cargo build --release
Cargo 会将二进制文件保存在
target/release/libnccl_profiler.so中。使用以下方法之一启用 NCCL 以加载 CoMMA 库:
- 将已编译的
libnccl_profiler.so复制到LD_LIBRARY_PATH中的目录。将其重命名为libnccl-profiler.so(使用连字符而不是下划线)。 - 或者,设置
NCCL_PROFILER_PLUGIN环境变量以指定.so文件的路径。
- 将已编译的
验证安装或启用
如需验证 NCCL 是否加载了 CoMMA 库,请查看 NCCL 日志:
- 启用 NCCL 调试日志记录。通过设置
NCCL_DEBUG=INFO环境变量来启用日志记录。您还可以指定更详细的调试级别。 如需了解更多调试选项,请参阅 NVIDIA 文档中的NCCL_DEBUG部分。 - 指定
INIT子系统进行调试。通过设置NCCL_DEBUG_SUBSYS=INIT环境变量来指定INIT。您还可以指定其他子系统。如需了解更多子系统选项,请参阅NCCL_DEBUG_SUBSYS部分。 - 在 NCCL 日志中找到与以下内容类似的行:
NCCL INFO PROFILER/Plugin: Plugin name set by env to PATH_TO_PROFILER_PLUGIN
停用 CoMMA
如果 CoMMA 已安装,请在运行工作负载之前设置 NCCL_TELEMETRY_MODE=0 CoMMA 环境变量,以防止其收集 NCCL 遥测数据。如需设置 CoMMA 环境
变量,请参阅 设置环境变量。
如需在停用 CoMMA 后重新启用它,请按以下步骤操作:
将
NCCL_TELEMETRY_MODE环境变量设置为非零值;例如,如需使用默认模式,请指定NCCL_TELEMETRY_MODE=3。如需查看完整选项列表,请参阅
NCCL_TELEMETRY_MODE配置选项 表中的。
配置和查看 CoMMA NCCL 遥测数据
如果在您的环境中启用了 CoMMA,您可以通过设置数据粒度级别来配置其收集的遥测数据类型。本部分介绍了如何设置数据粒度以及可用的选项。
您还可以查看 CoMMA 收集的数据,以验证其是否符合贵组织的安全政策,或者使用您自己的 NCCL 遥测数据分析工具对其进行分析。为此,请将原始数据导出到本地文件。
设置数据粒度
CoMMA 会以不同的粒度级别收集 NCCL 遥测数据。 使用环境变量配置粒度级别。 如需设置 CoMMA 环境 变量,请参阅 设置环境变量。
- 默认行为:默认情况下,CoMMA 会跟踪 NCCL 操作,
包括集体操作和对等操作、这些
操作的元数据以及完成
时间。它使用以下环境变量:
NCCL_PROFILER_TRACK_NCCLOP=trueNCCL_PROFILER_AGGREGATE_STEPS=trueNCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
- 如需启用更精细的数据收集级别,请设置以下环境变量:
- 通过设置
NCCL_PROFILER_TRACK_PROXYOP=true来跟踪代理操作的完成时间。 - 通过设置
NCCL_PROFILER_TRACK_STEPS=true来跟踪每个网络 I/O 操作所花费的时间。此设置提供最高级别的粒度。
- 通过设置
如需查看环境变量的完整列表,请参阅 配置选项。
将数据导出到本地文件
将原始数据导出到本地文件以进行查看。如需将数据导出到本地文件并查看输出,请按照以下步骤操作:
- 将
NCCL_TELEMETRY_MODE设置为1或4。如需了解NCCL_TELEMETRY_MODE环境变量,请参阅 配置选项。 设置以下导出路径之一:
- 设置
NCCL_PROFILER_LATENCY_FILE=PATH以导出 详细的事件跟踪记录到本地文件。将PATH替换为路径,例如/tmp/latency-%p.txt。 设置
NCCL_PROFILER_SUMMARY_FILE=PATH以导出 汇总的摘要统计信息。将PATH替换为路径,例如/tmp/summary-%p.txt。系统会将
%p替换为进程 ID。
- 设置
查看输出。原始输出是一个 JSON 文件。
配置选项
以下部分总结了您可以为 CoMMA 配置的所有环境变量。它们还介绍了如何设置任何环境变量。
设置 CoMMA 环境变量
如需将 CoMMA 环境变量设置为非默认值,请设置环境变量。您可以在计算实例的命令行中设置环境变量,也可以将其添加到启动脚本中。如果您在命令行中设置环境变量,则该值仅在每个会话中保留。如需使环境变量永久生效,请将其放入 ~/.bashrc 文件、~/.profile 或操作系统使用的任何启动文件中。如需了解详情,请查看操作系统的文档。
您需要在工作负载启动之前设置 CoMMA 环境变量,因为工作负载会在 NCCL 初始化期间读取这些变量。您可以按如下方式设置环境变量:
export ENVIRONMENT_VARIABLE=VALUE
替换以下内容:
ENVIRONMENT_VARIABLE:您要设置的环境变量;例如,NCCL_TELEMETRY_MODE。VALUE:环境变量的值;例如,0。
CoMMA 环境变量
本部分列出了您可以为 CoMMA 设置的环境变量及其默认值。
| 名称 | 说明 | 默认 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
NCCL_PROFILER_AGGREGATE_STEPS |
启用 (true) 或停用 (false)
汇总网络块操作。 |
true |
||||||||||
NCCL_PROFILER_GPUVIZ_LIB |
指定 libGPUViz.so 的路径,该库会将 NCCL 遥测数据上传到
服务 Google Cloud 。此库封装了
代理通信 API。
代理通信 API 是代理(例如在访客操作系统中运行的进程)用于与服务建立安全可靠连接的接口。 Google Cloud 如果您使用 NCCL gIB 映像 作为 安装程序,或者使用捆绑了 NCCL gIB 插件的任何映像, 则无需设置此环境变量。 |
|||||||||||
NCCL_PROFILER_LATENCY_FILE |
指定延迟跟踪文件的路径模板。例如,
/tmp/latency-%p.txt.
系统会将名称中的 %p 替换为进程 ID (pid)。
如需停用基于文件的导出,请取消设置此变量。 |
|||||||||||
NCCL_PROFILER_PLUGIN |
指定分析器插件二进制文件的路径。 如果您未指定此设置,NCCL 会在 libnccl-profiler.so中查找
LD_LIBRARY_PATH。 |
|||||||||||
NCCL_PROFILER_SUMMARY_FILE |
指定汇总的摘要文件的路径。例如,
/tmp/summary-%p.txt.
系统会将名称中的 %p 替换为进程 ID (pid)。
如需停用基于文件的导出,请取消设置此变量。 |
|||||||||||
NCCL_PROFILER_SUMMARY_INTERVAL |
指定摘要报告的时间间隔。例如,
10s、1m。
支持 d、h、m、s、
ms、us、ns |
1m |
||||||||||
NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP |
启用 (true) 或停用 (false)
监控进程间 NCCL 代理操作。 |
true |
||||||||||
NCCL_PROFILER_TRACK_NCCLOP |
启用 (true) 或停用 (false)
跟踪和报告 NCCL 操作,
包括集体通信和点对点通信。 |
true |
||||||||||
NCCL_PROFILER_TRACK_PROXYOP |
启用 (true) 或停用 (false) 代理
操作跟踪和报告。 |
false |
||||||||||
NCCL_PROFILER_TRACK_STEPS |
启用 (true) 或停用 (false)
跟踪和报告网络块操作。 |
false |
||||||||||
NCCL_TELEMETRY_MODE |
控制 NCCL 遥测数据的导出位置。
选项包括:
|
3 |
后续步骤
- 了解如何排查 CoMMA 问题。
- 了解如何检测和解决掉队者问题。