启用、停用和配置 CoMMA

本指南介绍了如何启用、停用和管理集体通信分析器 (CoMMA) 库。CoMMA 会为Google Cloud 服务收集 NCCL 遥测数据。如需详细了解 CoMMA,请参阅集体通信分析器 (CoMMA)

启用 CoMMA

如果您使用的映像包含 NCCL gIB 插件,则 CoMMA 会预安装并启用。如需查看这些映像的列表,请参阅已启用 CoMMA 的映像

安装选项

如果您未使用上述任何映像,但想安装 CoMMA,请使用以下方法之一。

安装方法 支持的机器类型
NCCL/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 安装程序映像,请完成以下步骤:

  1. 安装 NCCL 2.23 或更高版本

  2. 通过将以下代码段添加到 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 的容器。此代码段指定了安装程序容器映像、其拉取政策以及插件的卷装载。 应将同一卷装载到工作负载容器,并在 LD_LIBRARY_PATH 中添加 <mount-path>/lib64command 部分运行一个 shell 脚本来移除所有现有的分析器库。然后,它会将新的分析器库复制到指定的插件目录中。该脚本可确保安装正确版本的分析器插件并做好使用准备。

从源代码构建

如需从源代码构建 CoMMA 库,请安装以下软件:

  • Rust 编程语言,编译器和 Cargo 需要使用该语言。 可以通过 rustup 或系统软件包安装
  • Libclang-devbindgen 需要此权限。
  • CMake 3.10 版或更高版本

如需从源代码进行构建,请完成以下步骤:

  1. 克隆代码库及其子模块。

    git clone --recurse-submodules https://github.com/google/CoMMA
  2. 使用 Cargo 编译二进制文件。

    cargo build --release

    Cargo 会将二进制文件保存在 target/release/libnccl_profiler.so 中。

  3. 使用以下方法之一启用 NCCL 以加载 CoMMA 库:

    • 将编译后的 libnccl_profiler.so 复制到 LD_LIBRARY_PATH 中的某个目录。将其重命名为 libnccl-profiler.so(使用连字符而不是下划线)。
    • 或者,设置 NCCL_PROFILER_PLUGIN 环境变量以指定 .so 文件的路径。

验证安装或启用

如需验证 NCCL 是否加载了 CoMMA 库,请查看 NCCL 日志:

  1. 启用 NCCL 调试日志记录。通过设置 NCCL_DEBUG=INFO 环境变量来启用日志记录。您还可以指定更详细的调试级别。 如需了解更多调试选项,请参阅 NVIDIA 文档中的 NCCL_DEBUG 部分。
  2. 指定要调试的 INIT 子系统。通过设置 NCCL_DEBUG_SUBSYS=INIT 环境变量来指定 INIT。您还可以指定其他子系统。如需了解更多子系统选项,请参阅 NCCL_DEBUG_SUBSYS 部分。
  3. 在 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 后重新启用它,请按以下步骤操作:

  1. NCCL_TELEMETRY_MODE 环境变量设置为非零值;例如,如需使用默认模式,请指定 NCCL_TELEMETRY_MODE=3

    如需查看完整的选项列表,请参阅配置选项表格中的 NCCL_TELEMETRY_MODE

  2. 验证 CoMMA 是否正常运行

配置和查看 CoMMA NCCL 遥测数据

如果您的环境中启用了 CoMMA,您可以通过设置数据粒度级别来配置其收集的遥测数据类型。本部分介绍了如何设置数据粒度以及可用的选项。

您还可以查看 CoMMA 收集的数据,以验证其是否符合组织的安全政策,或者使用自己的 NCCL 遥测分析工具对其进行分析。为此,请将原始数据导出到本地文件。

设置数据粒度

CoMMA 会以不同的精细度级别收集 NCCL 遥测数据。使用环境变量配置精细度级别。 如需设置 CoMMA 环境变量,请参阅设置环境变量

  • 默认行为:默认情况下,CoMMA 会跟踪 NCCL 操作(包括集合操作和对等操作)、这些操作的元数据以及完成时间。它使用以下环境变量:
    • NCCL_PROFILER_TRACK_NCCLOP=true
    • NCCL_PROFILER_AGGREGATE_STEPS=true
    • NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
  • 如需启用更精细的数据收集级别,请设置以下环境变量:
    • 通过设置 NCCL_PROFILER_TRACK_PROXYOP=true 跟踪代理操作的完成时间。
    • 通过设置 NCCL_PROFILER_TRACK_STEPS=true 来跟踪每项网络 I/O 操作所花费的时间。此设置可实现最精细的粒度。

如需查看环境变量的完整列表,请参阅配置选项

将数据导出到本地文件

将原始数据导出到本地文件以供查看。如需将数据导出到本地文件并查看输出,请按以下步骤操作:

  1. NCCL_TELEMETRY_MODE 设置为 14。如需了解 NCCL_TELEMETRY_MODE 环境变量,请参阅配置选项
  2. 设置以下导出路径之一:

    • NCCL_PROFILER_LATENCY_FILE=PATH 设置为将详细的事件轨迹导出到本地文件。将 PATH 替换为路径,例如 /tmp/latency-%p.txt
    • 设置 NCCL_PROFILER_SUMMARY_FILE=PATH 以导出汇总的摘要统计信息。将 PATH 替换为路径,例如 /tmp/summary-%p.txt

      系统会将 %p 替换为进程 ID。

  3. 查看输出。原始输出是一个 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 是代理(例如在 guest 操作系统中运行的进程)用来与 Google Cloud 服务建立安全可靠连接的接口。

如果您使用 NCCL gIB 映像作为安装程序,或者使用捆绑了 NCCL gIB 插件的任何映像,则无需设置此环境变量。

NCCL_PROFILER_LATENCY_FILE 指定延迟时间轨迹文件的路径模板。例如,/tmp/latency-%p.txt。 系统会将名称中的 %p 替换为进程 ID (pid)。

如需停用基于文件的导出,请取消设置此变量。
NCCL_PROFILER_PLUGIN 指定分析器插件二进制文件的路径。

如果您未指定此设置,NCCL 会在 LD_LIBRARY_PATH 中查找 libnccl-profiler.so
NCCL_PROFILER_SUMMARY_FILE 指定汇总摘要文件的路径。例如,/tmp/summary-%p.txt。 系统会将名称中的 %p 替换为进程 ID (pid)。

如需停用基于文件的导出,请取消设置此变量。
NCCL_PROFILER_SUMMARY_INTERVAL 指定摘要报告的间隔。例如,10s1m。 支持 dhmsmsusns 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_PROFILER_HEARTBEAT 启用 (true) 或停用 (false) 定期检测信号遥测报告机制。 true
NCCL_PROFILER_HEARTBEAT_UPLOAD_INTERVAL 指定检测信号遥测报告机制的时间间隔。例如 10s1m。支持 dhmsmsusns 10s
NCCL_TELEMETRY_MODE 控制 NCCL 遥测数据的导出位置。 选项包括:

说明
0 停用 NCCL 遥测数据收集。
1 将 NCCL 遥测数据导出到本地文件。使用此方法时,Google 无法获取 NCCL 遥测数据。
3 将 NCCL 遥测数据导出到 Google 服务。
4 将 NCCL 遥测数据导出到本地文件和 Google 服务。
3

后续步骤