本指南介绍了如何启用、停用和管理集体通信分析器 (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 的容器。此代码段指定了安装程序容器映像、其拉取政策以及插件的卷装载。
应将同一卷装载到工作负载容器,并在 LD_LIBRARY_PATH 中添加 <mount-path>/lib64。command 部分运行一个 shell 脚本来移除所有现有的分析器库。然后,它会将新的分析器库复制到指定的插件目录中。
该脚本可确保安装正确版本的分析器插件,并使其可供使用。
从源代码构建
如需从源代码构建 CoMMA 库,请安装以下软件:
- Rust 编程语言,编译器和 Cargo 需要使用该语言。 可以通过 rustup 或系统软件包安装
Libclang-dev,bindgen需要此权限。CMake3.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 是代理(例如在 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 |
指定摘要报告的间隔。例如:
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 问题。
- 了解如何检测和解决滞后问题。