מדריך למפתחים בנושא XLA

במדריך הזה מוסבר איך להתחיל לפתח את פרויקט XLA.

לפני שמתחילים, צריך לוודא שהתנאים הבאים מתקיימים:

  1. עוברים אל דף התכנים שהוספתם ומעיינים בתהליך הוספת התכנים.
  2. אם עדיין לא עשיתם זאת, חותמים על הסכם הרישיון לתורמים.
  3. מתקינים או מגדירים את יחסי התלות הבאים:

אחר כך פועלים לפי השלבים הבאים כדי לקבל את קוד המקור, להגדיר סביבה, לבנות את המאגר וליצור בקשת משיכה.

קבל את הקוד

  1. יוצרים העתק (fork) של מאגר 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.

    כדי לבצע build של XLA, צריך להתקין את Bazel. הדרך המומלצת להתקין את Bazel היא באמצעות Bazelisk, שמוריד אוטומטית את הגרסה הנכונה של Bazel עבור XLA. אם Bazelisk לא זמין, אפשר להתקין את Bazel באופן ידני.

  2. יוצרים ומריצים את קונטיינר Docker‏ ml-build.

    כדי להגדיר קונטיינר Docker לבניית XLA עם תמיכה ב-CPU וב-GPU, מריצים את הפקודה הבאה:

    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
    

    אם יוצרים עם תמיכה ב-GPU/CUDA, מוסיפים --gpus all כדי להעניק לקונטיינר גישה לכל מעבדי ה-GPU הזמינים. ההגדרה הזו מאפשרת זיהוי אוטומטי של יכולות החישוב של CUDA.

תכנות

הגדרה למעבד:

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

כדי להגדיר GPU:

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

יכולות החישוב של CUDA יזוהו באופן אוטומטי על ידי הפעלת הפקודה nvidia-smi. אם מעבדי GPU לא זמינים במהלך הבנייה, צריך לציין את יכולות החישוב באופן ידני. לדוגמה:

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

גרסת Build:

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

יש סקריפט עזר שמשמש גם בתהליכי עבודה של CI, שמריץ אותו מול git diff מענף התכונות לעומת ה-upstream main.

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