Ativar, desativar e configurar o CoMMA

Este guia descreve como ativar, desativar e gerenciar a biblioteca do Collective Communication Analyzer (CoMMA). O CoMMA coleta telemetria do NCCL para Google Cloud serviços. Para mais informações sobre o CoMMA, consulte Collective Communication Analyzer (CoMMA).

Ativar o CoMMA

O CoMMA é pré-instalado e ativado se você usar imagens que contêm o plug-in gIB do NCCL. Para conferir uma lista dessas imagens, consulte Imagens com o CoMMA ativado.

Opções de instalação

Se você não usar nenhuma dessas imagens e quiser instalar o CoMMA, use um dos métodos a seguir.

Método de instalação Tipos de máquina compatíveis
Imagem do pacote de infraestrutura do Google (gIB) do NCCL (recomendado para tipos de máquina mais recentes) A4X Max, A4X, A4 High e A3 Ultra
Imagem do instalador do CoMMA A4X, A4 High e A3 Ultra
Criar a partir da fonte (necessário para tipos de máquina mais antigos) A3 Mega, A3 High, A3 Edge, A2 Ultra, A2 Standard e N1 com GPUs anexadas

Instalar o CoMMA

Para instalar o CoMMA, selecione uma das seguintes opções:

Imagem gIB do NCCL

Para instalar o CoMMA usando a imagem gIB do NCCL, execute o seguinte comando.

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

Imagem do instalador do CoMMA

É possível receber binários do CoMMA em uma imagem Docker independente. Você pode usar a imagem Docker do CoMMA, us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer, como initContainers para instalar binários do CoMMA no contêiner da carga de trabalho. O contêiner armazena os binários no diretório /artifacts.

Para usar a imagem do instalador do CoMMA, siga estas etapas:

  1. Instale o NCCL 2.23 ou mais recente.

  2. Instale o CoMMA na carga de trabalho adicionando o seguinte snippet aos initContainers:

    - 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/
    

O snippet de configuração do YAML especifica um contêiner para instalar o CoMMA. O snippet especifica a imagem do contêiner do instalador, a política de extração e uma montagem de volume para o plug-in. A mesma montagem de volume precisa ser montada no contêiner da carga de trabalho com <mount-path>/lib64 adicionado ao LD_LIBRARY_PATH. A seção command executa um script de shell para remover qualquer biblioteca de criação de perfil atual. Em seguida, ela copia a nova biblioteca de criação de perfil para o diretório de plug-ins designado. O script garante que a versão correta do plug-in de criação de perfil esteja instalada e pronta para uso.

Criar a partir da fonte

Para criar a biblioteca do CoMMA a partir da fonte, instale o seguinte software:

  • Linguagem de programação Rust, que o compilador e o Cargo exigem. Isso pode ser instalado com rustup ou pacotes de sistema
  • Libclang-dev, que bindgen exige.
  • CMake versão 3.10 ou mais recente

Para criar a partir da fonte, siga estas etapas:

  1. Clone o repositório e os submódulos dele.

    git clone --recurse-submodules https://github.com/google/CoMMA
  2. Compile os binários usando o Cargo.

    cargo build --release

    O Cargo salva o binário em target/release/libnccl_profiler.so.

  3. Ative o NCCL para carregar as bibliotecas do CoMMA usando um dos seguintes métodos:

    • Copie o libnccl_profiler.so compilado para um diretório no LD_LIBRARY_PATH. Renomeie-o para libnccl-profiler.so (use um hífen em vez de um sublinhado).
    • Como alternativa, defina a variável de ambiente NCCL_PROFILER_PLUGIN para especificar o caminho do arquivo .so.

Verificar a instalação ou ativação

Para verificar se o NCCL carrega as bibliotecas do CoMMA, revise os registros do NCCL:

  1. Ative a geração de registros de depuração do NCCL. Ative a geração de registros definindo a variável de ambiente NCCL_DEBUG=INFO. Também é possível especificar um nível de depuração mais detalhado. Para mais opções de depuração, consulte a NCCL_DEBUG seção na documentação da NVIDIA.
  2. Especifique o subsistema INIT para depuração. Especifique INIT definindo a NCCL_DEBUG_SUBSYS=INIT variável de ambiente. Também é possível especificar outros subsistemas. Para mais opções de subsistema, consulte a NCCL_DEBUG_SUBSYS seção.
  3. Encontre uma linha no registro do NCCL semelhante a esta: NCCL INFO PROFILER/Plugin: Plugin name set by env to PATH_TO_PROFILER_PLUGIN

Desativar o CoMMA

Se o CoMMA já estiver instalado, impeça que ele colete a telemetria do NCCL definindo a variável de ambiente NCCL_TELEMETRY_MODE=0 do CoMMA antes de executar as cargas de trabalho. Para definir variáveis de ambiente do CoMMA, consulte Definir variáveis de ambiente.

Para reativar o CoMMA depois de desativá-lo, siga estas etapas:

  1. Defina a variável de ambiente NCCL_TELEMETRY_MODE como um valor diferente de zero. Por exemplo, para usar o modo padrão, especifique NCCL_TELEMETRY_MODE=3.

    Para revisar a lista completa de opções, consulte NCCL_TELEMETRY_MODE na tabela Opções de configuração.

  2. Verifique se o CoMMA está funcionando.

Configurar e visualizar a telemetria do CoMMA NCCL

Se o CoMMA estiver ativado no seu ambiente, você poderá configurar o tipo de dados de telemetria que ele coleta definindo o nível de granularidade dos dados. Esta seção explica como definir a granularidade dos dados e as opções disponíveis.

Também é possível revisar os dados coletados pelo CoMMA para verificar se eles estão alinhados com as políticas de segurança da sua organização ou para analisá-los com suas próprias ferramentas de análise de telemetria do NCCL. Para fazer isso, exporte os dados brutos para um arquivo local.

Definir a granularidade dos dados

O CoMMA coleta telemetria do NCCL em diferentes níveis de granularidade. Configure o nível de granularidade usando variáveis de ambiente. Para definir variáveis de ambiente do CoMMA, consulte Definir variáveis de ambiente.

  • Comportamento padrão: por padrão, o CoMMA rastreia operações do NCCL, incluindo coletivas e ponto a ponto, os metadados dessas operações e os tempos de conclusão. Ele usa as seguintes variáveis de ambiente:
    • NCCL_PROFILER_TRACK_NCCLOP=true
    • NCCL_PROFILER_AGGREGATE_STEPS=true
    • NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
  • Para ativar níveis mais granulares de coleta de dados, defina as seguintes variáveis de ambiente:
    • Rastreie o tempo de conclusão das operações de proxy definindo NCCL_PROFILER_TRACK_PROXYOP=true.
    • Rastreie o tempo gasto em cada operação de E/S de rede definindo NCCL_PROFILER_TRACK_STEPS=true. Essa configuração oferece o maior nível de granularidade.

Para revisar a lista completa de variáveis de ambiente, consulte Opções de configuração.

Exportar dados para um arquivo local

Exporte os dados brutos para um arquivo local para visualizá-los. Para exportar os dados para um arquivo local e visualizar a saída, siga as etapas:

  1. Defina NCCL_TELEMETRY_MODE como 1 ou 4. Para saber mais sobre a variável de ambiente NCCL_TELEMETRY_MODE, consulte Opções de configuração.
  2. Defina um dos seguintes caminhos de exportação:

    • Defina NCCL_PROFILER_LATENCY_FILE=PATH para exportar rastros de eventos detalhados para um arquivo local. Substitua PATH por um caminho como /tmp/latency-%p.txt.
    • Defina NCCL_PROFILER_SUMMARY_FILE=PATH para exportar estatísticas de resumo agregadas. Substitua PATH por um caminho como /tmp/summary-%p.txt.

      O sistema substitui %p pelo ID do processo.

  3. Revise a resposta gerada. A saída bruta é um arquivo JSON.

Opções de configuração

As seções a seguir resumem todas as variáveis de ambiente que podem ser configuradas para o CoMMA. Elas também explicam como definir qualquer variável de ambiente.

Definir variáveis de ambiente do CoMMA

Para definir uma variável de ambiente do CoMMA como um valor diferente do padrão, defina variáveis de ambiente. É possível definir variáveis de ambiente na linha de comando da instância de computação ou adicioná-las a um script de inicialização. Se você definir as variáveis de ambiente na linha de comando, o valor só vai persistir por sessão. Para tornar as variáveis de ambiente permanentes, coloque-as no arquivo ~/.bashrc, ~/.profile ou qualquer arquivo de inicialização usado pelo sistema operacional. Para mais informações, consulte a documentação do sistema operacional.

É necessário definir as variáveis de ambiente do CoMMA antes que a carga de trabalho seja iniciada, porque ela lê as variáveis durante a inicialização do NCCL. É possível definir variáveis de ambiente da seguinte maneira:

export ENVIRONMENT_VARIABLE=VALUE

Substitua:

  • ENVIRONMENT_VARIABLE: a variável de ambiente que você quer definir. Por exemplo, NCCL_TELEMETRY_MODE.
  • VALUE: o valor da variável de ambiente. Por exemplo, 0.

Variáveis de ambiente do CoMMA

Esta seção lista as variáveis de ambiente que podem ser definidas para o CoMMA e os valores padrão delas.

Nome Descrição Padrão
NCCL_PROFILER_AGGREGATE_STEPS Ativa (true) ou desativa (false) a agregação de operações de blocos de rede. true
NCCL_PROFILER_GPUVIZ_LIB Especifica o caminho para libGPUViz.so, uma biblioteca que faz upload da telemetria do NCCL para Google Cloud serviços. Essa biblioteca envolve a API de comunicação do agente. A API de comunicação do agente é a interface que os agentes, como processos em execução no sistema operacional convidado, usam para iniciar conexões seguras e confiáveis com Google Cloud serviços.

Se você usar uma imagem gIB do NCCL como instalador ou qualquer uma das imagens que agrupam o plug-in gIB do NCCL, não será necessário definir essa variável de ambiente.

NCCL_PROFILER_LATENCY_FILE Especifica o modelo de caminho para o arquivo de rastreamento de latência. Por exemplo, /tmp/latency-%p.txt. O sistema substitui %p no nome pelo ID do processo (pid).

Para desativar a exportação baseada em arquivos, cancele a definição dessa variável.
NCCL_PROFILER_PLUGIN Especifica o caminho para o binário do plug-in de criação de perfil.

Se você não especificar essa configuração, o NCCL vai procurar libnccl-profiler.so no LD_LIBRARY_PATH.
NCCL_PROFILER_SUMMARY_FILE Especifica o caminho para o arquivo de resumo agregado. Por exemplo, /tmp/summary-%p.txt. O sistema substitui %p no nome pelo ID do processo (pid).

Para desativar a exportação baseada em arquivos, cancele a definição dessa variável.
NCCL_PROFILER_SUMMARY_INTERVAL Especifica o intervalo para relatórios de resumo. Por exemplo, 10s, 1m. Oferece suporte a d, h, m, s, ms, us, ns 1m
NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP Ativa (true) ou desativa (false) o monitoramento de operações de proxy do NCCL entre processos. true
NCCL_PROFILER_TRACK_NCCLOP Ativa (true) ou desativa (false) o rastreamento e a geração de relatórios para operações do NCCL, incluindo comunicações coletivas e ponto a ponto. true
NCCL_PROFILER_TRACK_PROXYOP Ativa (true) ou desativa (false) o rastreamento e a geração de relatórios de operações de proxy. false
NCCL_PROFILER_TRACK_STEPS Ativa (true) ou desativa (false) o rastreamento e a geração de relatórios de operações de blocos de rede. false
NCCL_TELEMETRY_MODE Controla o local de exportação dos dados de telemetria do NCCL. Isso inclui:

Valor Descrição
0 Desativa a coleta de telemetria do NCCL.
1 Exporta a telemetria do NCCL para um arquivo local. Com esse método, a telemetria do NCCL não fica disponível para o Google.
3 Exporta a telemetria do NCCL para os serviços do Google.
4 Exporta a telemetria do NCCL para arquivos locais e serviços do Google.
3

A seguir