启用、停用和配置 CoMMA

本指南介绍了如何启用、停用和管理集体通信分析器 (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 安装程序映像,请完成以下步骤:

  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_TELEMETRY_MODE 控制 NCCL 遥测数据的导出位置。 这些选项包括:

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

后续步骤