Руководство разработчика XLA

В этом руководстве показано, как начать разработку проекта XLA.

Перед началом работы выполните следующие предварительные условия:

  1. Перейдите на страницу «Внесение пожертвований» и ознакомьтесь с процедурой внесения пожертвований.
  2. Если вы еще этого не сделали, подпишите Соглашение о лицензировании для авторов .
  3. Установите или настройте следующие зависимости:

Затем выполните следующие шаги, чтобы получить исходный код, настроить среду, собрать репозиторий и создать запрос на слияние (pull request).

Получите код

  1. Создайте форк репозитория XLA .
  2. Клонируйте свою копию репозитория, заменив {USER} на ваше имя пользователя GitHub:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Перейдите в каталог xla : cd xla

  4. Настройте удалённый репозиторий:

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

Создайте среду

  1. Установите Bazel .

    Для сборки XLA необходимо установить Bazel. Рекомендуемый способ установки Bazel — использование Bazelisk , который автоматически загружает правильную версию Bazel для XLA. Если Bazelisk недоступен, вы можете установить Bazel вручную.

  2. Создайте и запустите контейнер Docker ml-build .

    Чтобы настроить контейнер Docker для сборки XLA с поддержкой как CPU, так и GPU, выполните следующую команду:

    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
    

    При сборке с поддержкой GPU/CUDA добавьте --gpus all , чтобы предоставить контейнеру доступ ко всем доступным графическим процессорам. Это позволит автоматически определять вычислительные возможности CUDA.

Строить

Настройка для ЦП:

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

Настройка для графического процессора:

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

Возможности вычислений CUDA будут определены автоматически при запуске nvidia-smi . Если графические процессоры недоступны во время сборки, необходимо указать вычислительные возможности вручную. Например:

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

Строить:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • Не используйте флаг --gpus all при запуске контейнера Docker.
  • В процессе выполнения ./configure.py вручную укажите вычислительные возможности CUDA, используя флаг --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/...

Первая сборка займет довольно много времени, поскольку ей необходимо собрать весь стек, включая XLA, MLIR и StableHLO.

Чтобы узнать больше о сборке XLA, см. раздел «Сборка из исходного кода» .

Создайте запрос на слияние (pull request).

Когда будете готовы отправить изменения на проверку, создайте запрос на слияние (pull request) .

Чтобы узнать больше о философии проверки кода XLA, см. раздел «Процесс проверки» .

Статический анализ (Clang-Tidy)

Для поддержания качества кода XLA использует clang-tidy для статического анализа и проверки вложений.

Как бегать

Для корректной работы clang-tidy требуется, чтобы исполняемый файл clang-tidy присутствовал в переменной PATH.

Выполните проверки по всем целевым объектам, используя специальный профиль:

bazel build //path/to:target --config=clang-tidy