ساخت از منبع

این سند نحوه ساخت اجزای XLA را شرح می دهد.

اگر مخزن XLA را شبیه سازی نکرده اید یا Bazel را نصب نکرده اید، بخش های اولیه راهنمای برنامه نویس XLA را بررسی کنید.

لینوکس

پیکربندی کنید

بیلدهای XLA توسط فایل .bazelrc در دایرکتوری ریشه مخزن پیکربندی می شوند. از اسکریپت ./configure.py می توان برای تنظیم تنظیمات رایج استفاده کرد.

اگر نیاز به تغییر پیکربندی دارید، اسکریپت ./configure.py را از دایرکتوری ریشه مخزن اجرا کنید. این اسکریپت دارای پرچم هایی برای مکان وابستگی های XLA و گزینه های پیکربندی ساخت اضافی (برای مثال پرچم های کامپایلر) است. برای جزئیات بیشتر به بخش نمونه جلسه مراجعه کنید.

پشتیبانی از CPU

توصیه می‌کنیم از یک تصویر Docker مناسب - مانند ml-build ، که در گردش‌های کاری CI XLA در GitHub نیز استفاده می‌شود - برای ساخت و آزمایش XLA استفاده کنید. تصویر ml-build همراه با Clang 18 از پیش نصب شده است.

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، می توانید XLA با پشتیبانی از CPU با اجرای دستورات زیر بسازید:

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

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

اگر می خواهید اهداف XLA را با پشتیبانی از CPU بدون استفاده از Docker بسازید، باید Clang را نصب کنید. XLA در حال حاضر با Clang 18 در CI ساخته شده است، اما نسخه های قبلی نیز باید کار کنند.

برای پیکربندی و ساخت اهداف، دستورات زیر را اجرا کنید:

./configure.py --backend=CPU

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

پشتیبانی از پردازنده گرافیکی

توصیه می کنیم از همان ظرف Docker که در بالا ذکر شد برای ساخت XLA با پشتیبانی GPU استفاده کنید.

برای راه اندازی Docker Container با دسترسی به تمام GPU ها، دستور زیر را اجرا کنید:

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

برای ساخت XLA با پشتیبانی از GPU، دستورات زیر را اجرا کنید:

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

docker exec xla_gpu bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • هنگام راه اندازی کانتینر Docker از --gpus all flag استفاده نکنید .
  • قابلیت های محاسبه CUDA را به صورت دستی مشخص کنید، به عنوان مثال:
docker exec xla_gpu ./configure.py --backend=CUDA \
  --cuda_compute_capabilities="9.0"

برای جزئیات بیشتر در مورد تصاویر داکر GPU TensorFlow، می توانید این سند را بررسی کنید.

شما می توانید اهداف XLA را با پشتیبانی از GPU بدون Docker نیز بسازید. با استفاده از دستورات زیر اهداف را پیکربندی و بسازید:

./configure.py --backend=CUDA

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

برای جزئیات بیشتر در مورد CUDA هرمتیک می توانید این سند را بررسی کنید.

ساخت XLA با پشتیبانی CUDA/cuDNN با استفاده از کانتینر JAX CI/Release

XLA یک کامپایلر است که به صورت داخلی توسط JAX استفاده می شود. JAX از طریق چرخ های PyPI توزیع می شود. مستندات JAX Continuous Integration نحوه ساخت چرخ‌های JAX را با استفاده از tensorflow/ml-build: آخرین کانتینر Docker توضیح می‌دهد.

ما می توانیم این دستورالعمل ها را برای ساخت اهداف XLA در ظرف JAX نیز گسترش دهیم. این تضمین می‌کند که پیکربندی ساخت اهداف XLA با پیکربندی ساخت JAX/XLA سازگار است، که اگر بخواهیم نتایج حجم کار را با استفاده از ابزارهای XLA که در ابتدا در JAX ایجاد شده‌اند، بازتولید کنیم، می‌تواند مفید باشد.

اهداف XLA را در کانتینر JAX CI بسازید

  1. مخزن JAX را کلون کنید و به دایرکتوری 'jax' بروید
git clone <a href="https://github.com/jax-ml/jax.git">https://github.com/jax-ml/jax.git</a>

cd jax
  1. JAX CI/Release Docker ظرف را با اجرای:
./ci/utilities/run_docker_container.sh

با این کار یک کانتینر Docker به نام 'jax' راه اندازی می شود.

  1. هدف پلاگین jax-cuda را در داخل ظرف با استفاده از:
docker exec jax ./ci/build_artifacts.sh jax-cuda-plugin

با این کار فایل jax_configure.bazelrc با پیکربندی ساخت مورد نیاز، از جمله پشتیبانی CUDA/cuDNN ایجاد می‌شود.

  1. دسترسی به یک پوسته تعاملی در داخل ظرف:
docker exec -ti jax /bin/bash

اکنون باید در دایرکتوری /jax درون ظرف باشید

  1. هدف XLA را با دستور زیر بسازید، به عنوان مثال:
/usr/local/bin/bazel build \
  --config=cuda_libraries_from_stubs \
  --verbose_failures=true \
  @xla//xla/tools/multihost_hlo_runner:hlo_runner_main

به صورت اختیاری، می توانید env های HERMETIC را بازنویسی کنید، به عنوان مثال:

--repo_env=HERMETIC_CUDA_COMPUTE_CAPABILITIES="sm_90"
  1. آرتیفکت های به دست آمده را در /jax/dist کپی کنید تا در صورت نیاز از سیستم عامل میزبان به آنها دسترسی داشته باشید
cp bazel-bin/external/xla/xla/tools/multihost_hlo_runner/hlo_runner_main \
  ./dist/
  1. از پوسته تعاملی خارج شوید:
exit