Ce guide vous explique comment commencer à développer le projet XLA.
Avant de commencer, passez en revue les conditions préalables suivantes :
- Accédez à la page Contribution et consultez le processus de contribution.
- Si vous ne l'avez pas encore fait, signez le Contributor License Agreement.
- 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
- Créez un fork du dépôt XLA.
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.gitAccédez au répertoire
xla:cd xlaConfigurez 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
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.
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 \ bashSi vous effectuez une compilation pour la compatibilité GPU/CUDA, ajoutez
--gpus allpour 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 alllorsque 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