本指南說明如何啟用、停用及管理集體通訊分析器 (CoMMA) 程式庫。CoMMA 會收集Google Cloud 服務的 NCCL 遙測資料。如要進一步瞭解 CoMMA,請參閱「Collective Communication Analyzer (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,將 CoMMA 二進位檔安裝到工作負載容器中。initContainers容器會將二進位檔儲存在 /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 環境變數,防止 CoMMA 收集 NCCL 遙測資料。如要設定 CoMMA 環境變數,請參閱「設定環境變數」。
如要重新啟用 CoMMA,請按照下列步驟操作:
將
NCCL_TELEMETRY_MODE環境變數設為非零值;舉例來說,如要使用預設模式,請指定NCCL_TELEMETRY_MODE=3。
設定及查看 CoMMA NCCL 遙測資料
如果環境中已啟用 CoMMA,您可以設定資料精細程度,藉此設定 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,追蹤 Proxy 作業的完成時間。 - 設定
NCCL_PROFILER_TRACK_STEPS=true,追蹤每項網路 I/O 作業所花費的時間。這項設定可提供最精細的資料。
- 設定
如要查看完整的環境變數清單,請參閱「設定選項」。
將資料匯出至本機檔案
將原始資料匯出至本機檔案,即可查看。如要將資料匯出至本機檔案並查看輸出內容,請按照下列步驟操作:
- 將
NCCL_TELEMETRY_MODE設為1或4。如要瞭解NCCL_TELEMETRY_MODE環境變數,請參閱「設定選項」。 設定下列其中一個匯出路徑:
- 將
NCCL_PROFILER_LATENCY_FILE=PATH設為 export,即可將詳細的事件追蹤記錄匯出至本機檔案。將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 服務。這個程式庫會包裝 Agent Communication API。代理程式通訊 API 是代理程式 (例如在客體作業系統中執行的程序) 用來與 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) 追蹤及回報 Proxy 作業。 |
false |
||||||||||
NCCL_PROFILER_TRACK_STEPS |
啟用 (true) 或停用 (false) 追蹤及回報網路區塊作業。 |
false |
||||||||||
NCCL_TELEMETRY_MODE |
控制 NCCL 遙測資料的匯出位置。
可用的選項包括:
|
3 |
後續步驟
- 瞭解如何排解 CoMMA 問題。
- 瞭解如何偵測及解決延遲問題。