إنشاء من المصدر

يوضّح هذا المستند كيفية إنشاء مكوّنات XLA.

إذا لم تستنسخ مستودع XLA أو لم تثبّت Bazel، يمكنك الاطّلاع على الأقسام الأولية من دليل مطوّري XLA.

Linux

إعداد

يتم ضبط إعدادات إصدارات XLA من خلال ملف .bazelrc في الدليل الجذر للمستودع. يمكن استخدام النص البرمجي ./configure.py لتعديل الإعدادات الشائعة.

إذا كنت بحاجة إلى تغيير الإعدادات، شغِّل النص البرمجي ./configure.py من الدليل الجذر للمستودع. يحتوي هذا النص البرمجي على علامات لموقع تبعيات XLA وخيارات إضافية لإعدادات الإنشاء (علامات المترجم، على سبيل المثال). راجِع قسم جلسة نموذجية للحصول على التفاصيل.

توافق وحدة المعالجة المركزية

ننصحك باستخدام صورة Docker مناسبة، مثل ml-build ، والتي تُستخدم أيضًا في سير عمل التكامل المستمر (CI) الخاص بـ XLA على GitHub، وذلك لإنشاء واختبار XLA. تتضمّن صورة ml-build الإصدار 18 من Clang مثبَّتًا مسبقًا.

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 مع إتاحة وحدة المعالجة المركزية من خلال تنفيذ الأوامر التالية:

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

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

إذا كنت تريد إنشاء أهداف XLA متوافقة مع وحدة المعالجة المركزية بدون استخدام Docker، عليك تثبيت Clang. يتم حاليًا إنشاء XLA باستخدام Clang 18 في CI، ولكن من المفترض أن تعمل الإصدارات الأقدم أيضًا.

لضبط وإنشاء الأهداف، شغِّل الأوامر التالية:

./configure.py --backend=CPU

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

إتاحة استخدام وحدة معالجة الرسومات

ننصحك باستخدام حاوية Docker نفسها المذكورة أعلاه لإنشاء XLA مع إتاحة استخدام وحدة معالجة الرسومات.

لبدء حاوية Docker مع إمكانية الوصول إلى جميع وحدات معالجة الرسومات، نفِّذ الأمر التالي:

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 مع إمكانية استخدام وحدة معالجة الرسومات، شغِّل الأوامر التالية:

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

docker exec xla_gpu bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • لا تستخدِم العلامة --gpus all عند بدء حاوية Docker.
  • حدِّد إمكانات الحوسبة في CUDA يدويًا، على سبيل المثال:
docker exec xla_gpu ./configure.py --backend=CUDA \
  --cuda_compute_capabilities="9.0"

لمزيد من التفاصيل حول صور Docker لوحدة معالجة الرسومات في TensorFlow، يمكنك الاطّلاع على هذا المستند.

يمكنك أيضًا إنشاء استهدافات XLA مع إمكانية استخدام وحدة معالجة الرسومات بدون Docker. اضبط الإعدادات واصنع العناصر المستهدَفة باستخدام الأوامر التالية:

./configure.py --backend=CUDA

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

لمزيد من التفاصيل حول Hermetic CUDA، يمكنك الاطّلاع على هذا المستند.

إنشاء XLA مع إمكانية استخدام CUDA/cuDNN باستخدام حاوية JAX CI/Release

‫XLA هي أداة تجميع تستخدمها JAX داخليًا. يتم توزيع JAX من خلال حِزم PyPI. توضّح مستندات التكامل المستمر في JAX كيفية إنشاء حِزم JAX باستخدام حاوية Docker tensorflow/ml-build:latest.

يمكننا توسيع نطاق هذه التعليمات لتشمل إنشاء أهداف 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. ابدأ حاوية Docker الخاصة بإصدار JAX CI/Release عن طريق تنفيذ ما يلي:
./ci/utilities/run_docker_container.sh

سيؤدي ذلك إلى بدء حاوية Docker باسم "jax".

  1. أنشئ هدف jax-cuda-plugin داخل الحاوية باستخدام:
docker exec jax ./ci/build_artifacts.sh jax-cuda-plugin

سيؤدي ذلك إلى إنشاء ملف .jax_configure.bazelrc يتضمّن إعدادات الإنشاء المطلوبة، بما في ذلك دعم CUDA/cuDNN.

  1. الوصول إلى shell تفاعلي داخل الحاوية:
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

يمكنك اختياريًا استبدال HERMETIC envs، على سبيل المثال:

--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