Guida per gli sviluppatori XLA

Questa guida mostra come iniziare a sviluppare il progetto XLA.

Prima di iniziare, completa i seguenti prerequisiti:

  1. Vai alla pagina Contributi e consulta la procedura di contribuzione.
  2. Se non l'hai ancora fatto, firma il Contributor License Agreement.
  3. Installa o configura le seguenti dipendenze:

Poi segui i passaggi riportati di seguito per ottenere il codice sorgente, configurare un ambiente, creare il repository e creare una richiesta di pull.

Ottieni il codice

  1. Crea un fork del repository XLA.
  2. Clona il fork del repository, sostituendo {USER} con il tuo nome utente GitHub:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Passa alla directory xla: cd xla

  4. Configura il repository upstream remoto:

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

Configura un ambiente

  1. Installa Bazel.

    Per creare XLA, devi aver installato Bazel. Il modo consigliato per installare Bazel è utilizzare Bazelisk, che scarica automaticamente la versione corretta di Bazel per XLA. Se Bazelisk non è disponibile, puoi installare Bazel manualmente.

  2. Crea ed esegui il container Docker ml-build.

    Per configurare un container Docker per la creazione di XLA con supporto sia per CPU che per GPU, esegui il seguente 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 crei con il supporto GPU/CUDA, aggiungi --gpus all per concedere al container l'accesso a tutte le GPU disponibili. In questo modo, viene attivato il rilevamento automatico delle funzionalità di calcolo CUDA.

Build

Configura per la CPU:

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

Configura per la GPU:

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

Le funzionalità di calcolo CUDA verranno rilevate automaticamente eseguendo nvidia-smi. Se le GPU non sono disponibili durante la build, devi specificare manualmente le funzionalità di calcolo. Ad esempio:

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

Build:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • Non utilizzare il flag --gpus all quando avvii il container Docker.
  • Durante ./configure.py, specifica manualmente le funzionalità di calcolo CUDA utilizzando il 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/...

La prima build richiederà un po' di tempo perché deve creare l'intero stack, inclusi XLA, MLIR e StableHLO.

Per saperne di più sulla creazione di XLA, consulta Creare da origine.

Crea una richiesta di pull

Quando è tutto pronto per inviare le modifiche per la revisione, crea una richiesta di pull.

Per scoprire di più sulla filosofia di revisione del codice XLA, consulta Procedura di revisione.

Analisi statica (Clang-Tidy)

Per mantenere la qualità del codice, XLA utilizza clang-tidy per l'analisi statica e l'inclusione della verifica.

Come eseguire

Esistono due modi per eseguire i controlli. L'esecuzione su target specifici può essere eseguita con:

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

Esiste uno script di assistenza utilizzato anche nei flussi di lavoro CI che lo esegue su git diff dal ramo delle funzionalità rispetto al ramo principale upstream.

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