Z tego przewodnika dowiesz się, jak rozpocząć tworzenie projektu XLA.
Zanim zaczniesz, spełnij te wymagania wstępne:
- Otwórz stronę z informacjami o przesyłaniu treści i zapoznaj się z procesem przesyłania treści.
- Jeśli jeszcze tego nie zrobisz, podpisz umowę licencyjną dla współtwórców.
- Zainstaluj lub skonfiguruj te zależności:
Następnie wykonaj czynności opisane poniżej, aby pobrać kod źródłowy, skonfigurować środowisko, skompilować repozytorium i utworzyć żądanie pull.
Pobierz kod
- Utwórz fork repozytorium XLA.
Sklonuj rozwidlenie repozytorium, zastępując
{USER}swoją nazwą użytkownika GitHuba:git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.gitPrzejdź do katalogu
xla:cd xlaSkonfiguruj zdalne repozytorium upstream:
git remote add upstream <a href="https://github.com/openxla/xla.git">https://github.com/openxla/xla.git</a>
Konfigurowanie środowiska
Zainstaluj Bazel.
Aby skompilować XLA, musisz mieć zainstalowany Bazel. Zalecany sposób instalacji Bazela to użycie Bazeliska, które automatycznie pobiera prawidłową wersję Bazela dla XLA. Jeśli Bazelisk jest niedostępny, możesz ręcznie zainstalować Bazel.
Utwórz i uruchom kontener Dockera ml-build.
Aby skonfigurować kontener Dockera do tworzenia XLA z obsługą procesora i procesora graficznego, uruchom to polecenie:
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 \ bashJeśli tworzysz obraz z obsługą GPU/CUDA, dodaj
--gpus all, aby przyznać kontenerowi dostęp do wszystkich dostępnych procesorów graficznych. Umożliwia to automatyczne wykrywanie możliwości obliczeniowych CUDA.
Kompilacja
Skonfiguruj dla procesora:
docker exec xla ./configure.py --backend=CPU
Konfigurowanie pod kątem GPU:
docker exec xla ./configure.py --backend=CUDA
Możliwości obliczeniowe CUDA zostaną wykryte automatycznie po uruchomieniu
nvidia-smi. Jeśli podczas kompilacji nie są dostępne procesory graficzne, musisz ręcznie określić możliwości obliczeniowe. Na przykład:
# 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"
Kompilacja:
docker exec xla bazel build \
--spawn_strategy=sandboxed \
--test_output=all \
//xla/...
- Nie używaj flagi
--gpus allpodczas uruchamiania kontenera Dockera. - Podczas
./configure.pyręcznie określ możliwości obliczeniowe CUDA, używając flagi--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/...
Pierwsze kompilowanie potrwa dość długo, ponieważ trzeba skompilować cały stos, w tym XLA, MLIR i StableHLO.
Więcej informacji o tworzeniu XLA znajdziesz w artykule Tworzenie z kodu źródłowego.
Tworzenie żądania pull
Gdy wszystko będzie gotowe, prześlij zmiany do sprawdzenia, tworząc żądanie pull.
Więcej informacji o filozofii inspekcji kodu XLA znajdziesz w sekcji Proces sprawdzania.
Analiza statyczna (Clang-Tidy)
Aby zachować wysoką jakość kodu, XLA używa clang-tidy do analizy statycznej i weryfikacji.
Uruchamianie
Sprawdzanie można przeprowadzić na 2 sposoby. Możesz uruchomić go w odniesieniu do konkretnych celów, korzystając z tego kodu:
bazel build --config=clang-tidy //path/to:target1 //path/to:target2
Istnieje skrypt pomocniczy, który jest również używany w przepływach pracy CI. Uruchamia on skrypt w odniesieniu do różnic w git między gałęzią funkcji a główną gałęzią upstream.
# Make sure the main is updated.
git fetch origin main
bazel run //build_tools/ci:run_clang_tidy