ساخت از منبع

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

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

لینوکس

پیکربندی

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

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

پشتیبانی از پردازنده

ما توصیه می‌کنیم برای ساخت و آزمایش XLA از یک تصویر داکر مناسب - مانند ml-build که در گردش‌های کاری CI XLA در GitHub نیز استفاده می‌شود - استفاده کنید. تصویر 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

با استفاده از یک کانتینر داکر، می‌توانید با اجرای دستورات زیر، XLA را با پشتیبانی از CPU بسازید:

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

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

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

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

./configure.py --backend=CPU

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

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

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

برای شروع کانتینر داکر با دسترسی به تمام پردازنده‌های گرافیکی (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/...
  • هنگام شروع کانتینر داکر از فلگ --gpus all استفاده نکنید .
  • قابلیت‌های محاسباتی CUDA را به صورت دستی مشخص کنید، برای مثال:
docker exec xla_gpu ./configure.py --backend=CUDA \
  --cuda_compute_capabilities="9.0"

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

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

./configure.py --backend=CUDA

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

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

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

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

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

ساخت تارگت‌های XLA در کانتینر JAX CI

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

cd jax
  1. با اجرای دستور زیر، کانتینر JAX CI/Release Docker را آغاز کنید:
./ci/utilities/run_docker_container.sh

این دستور یک کانتینر داکر به نام 'jax' را آغاز می‌کند.

  1. با استفاده از دستور زیر، هدف jax-cuda-plugin را درون کانتینر بسازید:
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

ویندوز

ساخت XLA روی ویندوز به صورت بومی، یک فرآیند فقط وابسته به CPU است، زیرا CUDA مستقیماً در ویندوز پشتیبانی نمی‌شود؛ اگر به پشتیبانی CUDA نیاز دارید، باید از WSL2 استفاده کنید. همچنین به تنظیمات محیطی خاصی از جمله Bash shell، کامپایلر Clang و Visual Studio نیاز دارد.

پیش‌نیازها

  1. ویژوال استودیو: برای راه‌اندازی زنجیره ابزار ++C (که هدرها و کتابخانه‌های سیستمی لازم را فراهم می‌کند)، باید ویژوال استودیو ۲۰۱۹ نسخه ۱۶.۵ یا جدیدتر را نصب کنید.
  2. محیط Bash: برای ساخت XLA در ویندوز باید از یک پوسته Bash (مانند MSYS2 یا Git Bash) استفاده کنید.
  3. کامپایلر Clang: نسخه‌های ویندوز XLA به جای کامپایلر استاندارد MSVC از clang-cl استفاده می‌کنند. مطمئن شوید که LLVM/Clang نصب شده باشد.
  4. پایتون: پایتون ۳ باید نصب شده باشد و در PATH سیستم شما موجود باشد.
  5. حالت توسعه‌دهنده: شما باید حالت توسعه‌دهنده را در ویندوز فعال کنید یا پوسته Bash خود را به عنوان Administrator اجرا کنید. این کار ضروری است زیرا Bazel در طول فرآیند ساخت به ایجاد پیوندهای نمادین برای درخت فایل‌های اجرا متکی است.

ساخت از منبع

برای کامپایل کردن CPU backend مربوط به XLA در ویندوز، دستور زیر را از ترمینال Bash خود اجرا کنید. ما از پیکربندی xla_windows_x86_cpu_2022 برای تنظیم خودکار toolchain clang-cl استفاده می‌کنیم.

توجه داشته باشید که برخی از اهداف و برچسب‌ها باید صریحاً از ساخت CPU ویندوز حذف شوند، مانند اهداف GPU و ویژگی‌هایی که هنوز در ویندوز پشتیبانی نمی‌شوند:

# Note: Ensure your PATH includes Python and Bazel before running this
bazel build \
  --config=xla_windows_x86_cpu_2022 \
  --keep_going \
  --build_tag_filters=-no_oss,-oss_excluded,-gpu,-no_windows,-windows_excluded \
  -- //xla/... -//xla/hlo/experimental/... -//xla/python_api/... -//xla/python/...