В этом руководстве показано, как начать разработку проекта XLA.
Перед началом работы выполните следующие предварительные условия:
- Перейдите на страницу «Внесение пожертвований» и ознакомьтесь с процедурой внесения пожертвований.
- Если вы еще этого не сделали, подпишите Соглашение о лицензировании для авторов .
- Установите или настройте следующие зависимости:
Затем выполните следующие шаги, чтобы получить исходный код, настроить среду, собрать репозиторий и создать запрос на слияние (pull request).
Получите код
- Создайте форк репозитория XLA .
Клонируйте свою копию репозитория, заменив
{USER}на ваше имя пользователя GitHub:git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.gitПерейдите в каталог
xla:cd xlaНастройте удалённый репозиторий:
git remote add upstream <a href="https://github.com/openxla/xla.git">https://github.com/openxla/xla.git</a>
Создайте среду
Установите Bazel .
Для сборки XLA необходимо установить Bazel. Рекомендуемый способ установки Bazel — использование Bazelisk , который автоматически загружает правильную версию Bazel для XLA. Если Bazelisk недоступен, вы можете установить Bazel вручную.
Создайте и запустите контейнер 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