Guía para desarrolladores de XLA

En esta guía, se muestra cómo comenzar a desarrollar el proyecto de XLA.

Antes de comenzar, completa los siguientes requisitos previos:

  1. Ve a la página de contribuciones y revisa el proceso de contribución.
  2. Si aún no lo hiciste, firma el Acuerdo de Licencia de Colaborador.
  3. Instala o configura las siguientes dependencias:

Luego, sigue los pasos que se indican a continuación para obtener el código fuente, configurar un entorno, compilar el repositorio y crear una solicitud de extracción.

Obtén el código

  1. Crea una bifurcación del repositorio de XLA.
  2. Clona tu bifurcación del repo y reemplaza {USER} por tu nombre de usuario de GitHub:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Cambia al directorio xla: cd xla

  4. Configura el repositorio upstream remoto:

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

Configura un entorno

  1. Instala Bazel.

    Para compilar XLA, debes tener instalado Bazel. La forma recomendada de instalar Bazel es con Bazelisk, que descarga automáticamente la versión correcta de Bazel para XLA. Si Bazelisk no está disponible, puedes instalar Bazel de forma manual.

  2. Crea y ejecuta el contenedor de Docker ml-build.

    Para configurar un contenedor de Docker para compilar XLA con compatibilidad para CPU y GPU, ejecuta el siguiente 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
    

    Si compilas con compatibilidad para GPU o CUDA, agrega --gpus all para otorgar acceso al contenedor a todas las GPUs disponibles. Esto permite la detección automática de las capacidades de procesamiento de CUDA.

Compilación

Configuración para CPU:

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

Configura la GPU de la siguiente manera:

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

Las capacidades de procesamiento de CUDA se detectarán automáticamente cuando ejecutes nvidia-smi. Si las GPUs no están disponibles durante la compilación, debes especificar las capacidades de procesamiento de forma manual. Por ejemplo:

# 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"

Compilación:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • No uses la marca --gpus all cuando inicies el contenedor de Docker.
  • Durante ./configure.py, especifica manualmente las capacidades de procesamiento de CUDA con la marca --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/...

La primera compilación tardará bastante porque debe compilar toda la pila, incluidos XLA, MLIR y StableHLO.

Para obtener más información sobre cómo compilar XLA, consulta Compila desde la fuente.

Crea una solicitud de extracción

Cuando esté todo listo para enviar los cambios a revisión, crea una solicitud de extracción.

Para obtener información sobre la filosofía de revisión de código de XLA, consulta Proceso de revisión.

Análisis estático (Clang-Tidy)

Para mantener la calidad del código, XLA usa clang-tidy para el análisis estático y la verificación.

Cómo ejecutar

Existen dos formas de ejecutar las verificaciones. Para ejecutarlo en objetivos específicos, usa el siguiente comando:

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

También hay una secuencia de comandos de ayuda que se usa en los flujos de trabajo de CI y que la ejecuta en comparación con git diff de la rama de funciones con respecto a la rama principal upstream.

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