Guia do desenvolvedor de XLA

Este guia mostra como começar a desenvolver o projeto XLA.

Antes de começar, conclua os seguintes pré-requisitos:

  1. Acesse a página de contribuição e revise o processo de contribuição.
  2. Se ainda não tiver feito isso, assine o Contrato de licença de colaborador.
  3. Instale ou configure as seguintes dependências:

Em seguida, siga as etapas abaixo para acessar o código-fonte, configurar um ambiente, criar o repositório e criar uma solicitação de envio.

Acessar o código

  1. Crie um fork do repositório XLA.
  2. Clone o fork do repositório, substituindo {USER} pelo seu nome de usuário do GitHub:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Mude para o xla diretório: cd xla

  4. Configure o repositório remoto upstream:

    git remote add upstream <a href="https://github.com/openxla/xla.git">https://github.com/openxla/xla.git</a>
    

Configurar um ambiente

  1. Instale o Bazel.

    Para criar o XLA, é necessário ter o Bazel instalado. A maneira recomendada de instalar o Bazel é usando o Bazelisk, que faz o download automático da versão correta do Bazel para o XLA. Se o Bazelisk não estiver disponível, você poderá instalar o Bazel manualmente.

  2. Crie e execute o ml-build contêiner do Docker.

    Para configurar um contêiner do Docker para criar o XLA com suporte a CPU e GPU, execute o seguinte comando:

    docker run -itd --rm \
      --name xla \
      -w /xla \
      -v $PWD:/xla \
      us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest \
      bash
    

    Se a criação for compatível com GPU/CUDA, adicione --gpus all para conceder ao contêiner acesso a todas as GPUs disponíveis. Isso permite a detecção automática de recursos de computação CUDA.

Criar

Configurar para CPU:

docker exec xla ./configure.py --backend=CPU

Configurar para GPU:

docker exec xla ./configure.py --backend=CUDA

Os recursos de computação CUDA serão detectados automaticamente executando nvidia-smi. Se as GPUs não estiverem disponíveis durante a criação, especifique os recursos de computação manualmente. Exemplo:

# Automatically detects compute capabilities (requires GPUs)
./configure.py --backend=CUDA

# Manually specify compute capabilities (for builds without GPUs)
./configure.py --backend=CUDA --cuda_compute_capabilities="9.0"

Crie:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • Não use a flag --gpus all ao iniciar o contêiner do Docker.
  • Durante ./configure.py, especifique manualmente os recursos de computação CUDA usando a flag --cuda_compute_capabilities.
# Automatically detects compute capabilities (requires GPUs)
./configure.py --backend=CUDA

# Manually specify compute capabilities (for builds without GPUs)
./configure.py --backend=CUDA --cuda_compute_capabilities="9.0"

bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

A primeira criação vai demorar um pouco porque precisa criar toda a pilha, incluindo XLA, MLIR e StableHLO.

Para saber mais sobre como criar o XLA, consulte Criar a partir da origem.

Criar uma solicitação de pull

Quando estiver tudo pronto para enviar as mudanças para revisão, crie uma solicitação de envio.

Para saber mais sobre a filosofia de revisão de código do XLA, consulte Processo de revisão.

Análise estática (Clang-Tidy)

Para manter a qualidade do código, o XLA usa clang-tidy para análise estática e inclui a verificação.

Como executar

Há duas maneiras de executar verificações. A execução em destinos específicos pode ser feita com:

bazel build --config=clang-tidy //path/to:target1 //path/to:target2

Há um script auxiliar que também é usado em fluxos de trabalho de CI que o executa em relação à diferença do Git do branch de recursos em relação ao principal upstream.

# Make sure the main is updated.
git fetch origin main
bazel run //build_tools/ci:run_clang_tidy