دليل مطوّري برامج XLA

يوضّح لك هذا الدليل كيفية بدء تطوير مشروع XLA.

قبل البدء، يُرجى استيفاء المتطلبات الأساسية التالية:

  1. انتقِل إلى صفحة المساهمة وراجِع عملية المساهمة.
  2. وقِّع اتفاقية ترخيص المساهمإذا لم يسبق لك ذلك.
  3. ثبِّت التبعيات التالية أو اضبطها:

بعد ذلك، اتّبِع الخطوات التالية للحصول على رمز المصدر وإعداد بيئة وإنشاء المستودع وإنشاء طلب سحب.

الحصول على الشفرة‏

  1. أنشِئ نسخة من مستودع XLA.
  2. استنسِخ نسختك من المستودع، مع استبدال {USER} باسم مستخدم GitHub:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. انتقِل إلى دليل xla: cd xla

  4. اضبط مستودع المصدر البعيد:

    git remote add upstream <a href="https://github.com/openxla/xla.git">https://github.com/openxla/xla.git</a>
    

إعداد البيئة

  1. ثبِّت Bazel.

    لإنشاء XLA، يجب تثبيت Bazel. الطريقة المقترَحة لتثبيت Bazel هي استخدام Bazelisk، الذي ينزِّل تلقائيًا إصدار Bazel الصحيح لـ XLA. إذا لم يكن Bazelisk متاحًا، يمكنك تثبيت Bazel يدويًا.

  2. أنشِئ حاوية Docker الخاصة بـ ml-build وشغِّلها.

    لإعداد حاوية Docker لإنشاء XLA مع إمكانية استخدام كلٍّ من وحدة المعالجة المركزية ووحدة معالجة الرسومات، شغِّل الأمر التالي:

    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
    

    إذا كنت تنشئ باستخدام إمكانية استخدام وحدة معالجة الرسومات/CUDA، أضِف --gpus all لمنح الحاوية إمكانية الوصول إلى جميع وحدات معالجة الرسومات المتاحة. يؤدي ذلك إلى تفعيل ميزة الرصد التلقائي لإمكانات الحوسبة في CUDA.

إنشاء

الإعداد لوحدة المعالجة المركزية:

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

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

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

سيتم رصد إمكانات الحوسبة في CUDA تلقائيًا من خلال تشغيل nvidia-smi. إذا لم تكن وحدات معالجة الرسومات متاحة أثناء عملية الإنشاء، عليك تحديد إمكانات الحوسبة يدويًا. على سبيل المثال:

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

الإصدار:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • لا تستخدِم العلامة --gpus all عند بدء حاوية Docker.
  • أثناء ./configure.py، حدِّد إمكانات الحوسبة في CUDA يدويًا باستخدام العلامة --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/...

سيستغرق الإصدار الأول وقتًا طويلاً إلى حد ما لأنّه يجب إنشاء المكدس بالكامل، بما في ذلك XLA وMLIR وStableHLO.

لمزيد من المعلومات عن إنشاء XLA، اطّلِع على مقالة الإنشاء من المصدر.

إنشاء طلب سحب

عندما تكون مستعدًا لإرسال التغييرات للمراجعة، أنشِئ طلب سحب.

للتعرّف على فلسفة مراجعة رمز XLA، اطّلِع على مقالة عملية المراجعة.

التحليل الثابت (Clang-Tidy)

للحفاظ على جودة الرمز، يستخدم XLA clang-tidy للتحليل الثابت والتحقّق من تضمين الملفات.

كيفية التشغيل

هناك طريقتان لتنفيذ عمليات التحقّق. يمكنك تشغيلها على أهداف محدّدة باستخدام:

bazel build --config=clang-tidy //path/to:target1 //path/to:target2

هناك نص برمجي مساعد يُستخدَم أيضًا في عمليات سير العمل المتواصلة، ويشغِّله على `git diff` من فرع الميزة مقابل المصدر الرئيسي.

# Make sure the main is updated.
git fetch origin main
bazel run //build_tools/ci:run_clang_tidy