Kaynaktan oluştur

Bu belgede, XLA bileşenlerinin nasıl oluşturulacağı açıklanmaktadır.

XLA deposunu klonlamadıysanız veya Bazel'i yüklemediyseniz XLA Geliştirici Kılavuzu'nun ilk bölümlerine göz atın.

Linux

Yapılandır

XLA derlemeleri, kod deposunun kök dizinindeki .bazelrc dosyasıyla yapılandırılır. ./configure.py komut dosyası, yaygın ayarları düzenlemek için kullanılabilir.

Yapılandırmayı değiştirmeniz gerekirse ./configure.py komut dosyasını deponun kök dizininden çalıştırın. Bu komut dosyasında, XLA bağımlılıklarının konumu ve ek derleme yapılandırma seçenekleri (örneğin, derleyici işaretleri) için işaretler bulunur. Ayrıntılı bilgi için Örnek oturum bölümüne bakın.

CPU desteği

XLA'yı oluşturmak ve test etmek için uygun bir Docker görüntüsü (ör. GitHub'daki XLA'nın CI iş akışlarında da kullanılan ml-build) kullanmanızı öneririz. ml-build görüntüsünde Clang 18 önceden yüklenmiş olarak gelir.

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

Docker container'ı kullanarak aşağıdaki komutları çalıştırarak CPU desteğiyle XLA'yı oluşturabilirsiniz:

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

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

CPU desteğiyle Docker kullanmadan XLA hedefleri oluşturmak istiyorsanız Clang'i yüklemeniz gerekir. XLA şu anda CI'da Clang 18 ile oluşturulmuştur ancak önceki sürümler de çalışmalıdır.

Hedefleri yapılandırmak ve oluşturmak için aşağıdaki komutları çalıştırın:

./configure.py --backend=CPU

bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

GPU desteği

GPU desteğiyle XLA'yı oluşturmak için yukarıda bahsedilen Docker kapsayıcısının kullanılmasını öneririz.

Tüm GPU'lara erişimi olan Docker container'ı başlatmak için aşağıdaki komutu çalıştırın:

docker run -itd --rm \
  --gpus all \
  --name xla_gpu \
  -w /xla \
  -v $PWD:/xla \
  us-docker.pkg.dev/ml-oss-artifacts-published/ml-public-container/ml-build:latest \
  bash

GPU desteğiyle XLA'yı oluşturmak için aşağıdaki komutları çalıştırın:

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

docker exec xla_gpu bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • Docker kapsayıcısını başlatırken --gpus all işaretini kullanmayın.
  • CUDA işlem yeteneklerini manuel olarak belirtin. Örneğin:
docker exec xla_gpu ./configure.py --backend=CUDA \
  --cuda_compute_capabilities="9.0"

TensorFlow'un GPU Docker görüntüleri hakkında daha fazla bilgi için bu belgeyi inceleyebilirsiniz.

Docker olmadan GPU destekli XLA hedefleri de oluşturabilirsiniz. Aşağıdaki komutları kullanarak hedefleri yapılandırın ve oluşturun:

./configure.py --backend=CUDA

bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...

Hermetik CUDA ile ilgili daha fazla bilgi için bu belgeyi inceleyebilirsiniz.

JAX CI/Release Container'ı kullanarak CUDA/cuDNN desteğiyle XLA'yı oluşturma

XLA, JAX tarafından dahili olarak kullanılan bir derleyicidir. JAX, PyPI tekerlekleri aracılığıyla dağıtılır. JAX Sürekli Entegrasyon belgelerinde, tensorflow/ml-build:latest Docker container'ı kullanılarak JAX tekerleklerinin nasıl oluşturulacağı açıklanmaktadır.

Bu talimatları, JAX container'ında XLA hedefleri oluşturmak için de kullanabilirsiniz. Bu, XLA hedeflerinin derleme yapılandırmasının JAX/XLA derleme yapılandırmasıyla tutarlı olmasını sağlar. Bu, başlangıçta JAX'te oluşturulan XLA araçlarını kullanarak iş yükü sonuçlarını yeniden üretmek istediğimizde yararlı olabilir.

JAX CI kapsayıcısında XLA hedefleri oluşturma

  1. JAX deposunu klonlayın ve "jax" dizinine gidin.
git clone <a href="https://github.com/jax-ml/jax.git">https://github.com/jax-ml/jax.git</a>

cd jax
  1. Aşağıdaki komutu çalıştırarak JAX CI/Release Docker kapsayıcısını başlatın:
./ci/utilities/run_docker_container.sh

Bu işlem, "jax" adlı bir Docker kapsayıcısı başlatır.

  1. Aşağıdaki komutu kullanarak jax-cuda-plugin hedefini kapsayıcının içinde oluşturun:
docker exec jax ./ci/build_artifacts.sh jax-cuda-plugin

Bu işlem, CUDA/cuDNN desteği de dahil olmak üzere gerekli derleme yapılandırmasıyla .jax_configure.bazelrc dosyasını oluşturur.

  1. Container'ın içinde etkileşimli bir kabuğa erişin:
docker exec -ti jax /bin/bash

Artık kapsayıcıdaki /jax dizininde olmalısınız.

  1. Aşağıdaki komutla XLA hedefini oluşturun (ör. şu komutla):
/usr/local/bin/bazel build \
  --config=cuda_libraries_from_stubs \
  --verbose_failures=true \
  @xla//xla/tools/multihost_hlo_runner:hlo_runner_main

İsteğe bağlı olarak, HERMETIC ortam değişkenlerinin üzerine yazabilirsiniz. Örneğin:

--repo_env=HERMETIC_CUDA_COMPUTE_CAPABILITIES="sm_90"
  1. Gerekirse ana makine işletim sisteminden erişmek için ortaya çıkan yapıtları /jax/dist konumuna kopyalayın.
cp bazel-bin/external/xla/xla/tools/multihost_hlo_runner/hlo_runner_main \
  ./dist/
  1. Etkileşimli kabuktan çıkın:
exit