Guide du développeur XLA

Ce guide vous explique comment commencer à développer le projet XLA.

Avant de commencer, passez en revue les conditions préalables suivantes :

  1. Accédez à la page Contribution et consultez le processus de contribution.
  2. Si vous ne l'avez pas encore fait, signez le Contributor License Agreement.
  3. Installez ou configurez les dépendances suivantes :

Suivez ensuite les étapes ci-dessous pour obtenir le code source, configurer un environnement, créer le dépôt et créer une demande d'extraction.

Obtenir le code

  1. Créez un fork du dépôt XLA.
  2. Clonez votre fork du dépôt en remplaçant {USER} par votre nom d'utilisateur GitHub :

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Accédez au répertoire xla : cd xla

  4. Configurez le dépôt en amont distant :

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

Configurer un environnement

  1. Installez Bazel.

    Pour créer XLA, vous devez avoir installé Bazel. La méthode recommandée pour installer Bazel consiste à utiliser Bazelisk, qui télécharge automatiquement la version Bazel appropriée pour XLA. Si Bazelisk n'est pas disponible, vous pouvez installer Bazel manuellement.

  2. Créez et exécutez le conteneur Docker ml-build.

    Pour configurer un conteneur Docker afin de créer XLA avec la compatibilité pour le processeur et le GPU, exécutez la commande suivante :

    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 vous effectuez une compilation pour la compatibilité GPU/CUDA, ajoutez --gpus all pour accorder au conteneur l'accès à tous les GPU disponibles. Cela permet la détection automatique des capacités de calcul CUDA.

Créer

Configurer pour le processeur :

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

Configurer pour le GPU :

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

Les capacités de calcul CUDA seront détectées automatiquement en exécutant nvidia-smi. Si les GPU ne sont pas disponibles lors de la compilation, vous devez spécifier manuellement les capacités de calcul. Exemple :

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

Créer :

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • N'utilisez pas l'option --gpus all lorsque vous démarrez le conteneur Docker.
  • Lors de l'exécution de ./configure.py, spécifiez manuellement les capacités de calcul CUDA à l'aide de l'option --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/...

Votre première compilation prendra un certain temps, car elle devra créer l'ensemble de la pile, y compris XLA, MLIR et StableHLO.

Pour en savoir plus sur la création de XLA, consultez Créer à partir du code source.

Créer une demande d'extraction

Lorsque vous êtes prêt à envoyer des modifications pour examen, créez une demande d'extraction.

Pour en savoir plus sur la philosophie de revue de code XLA, consultez Processus d'examen.

Analyse statique (Clang-Tidy)

Pour maintenir la qualité du code, XLA utilise clang-tidy pour l'analyse statique et la validation de l'inclusion.

En savoir plus sur l'exécution

Il existe deux façons d'exécuter des vérifications. L'exécution sur des cibles spécifiques peut être effectuée avec :

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

Il existe également un script d'assistance utilisé dans les workflows d'intégration continue qui l'exécute sur la différence Git entre la branche de fonctionnalité et la branche principale en amont.

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