คู่มือนักพัฒนาซอฟต์แวร์ XLA

คู่มือนี้จะแสดงวิธีเริ่มต้นพัฒนาโปรเจ็กต์ XLA

ก่อนเริ่มต้น ให้ทำตามข้อกำหนดเบื้องต้นต่อไปนี้

  1. ไปที่หน้าการมีส่วนร่วมและดูขั้นตอนการมีส่วนร่วม
  2. ลงนามในข้อตกลงอนุญาตให้ใช้ผลงานของผู้มีส่วนร่วม หากยังไม่ได้ดำเนินการ
  3. ติดตั้งหรือกําหนดค่าการอ้างอิงต่อไปนี้

จากนั้นทำตามขั้นตอนด้านล่างเพื่อรับซอร์สโค้ด ตั้งค่าสภาพแวดล้อม สร้างที่เก็บ และสร้าง Pull Request

รับโค้ด

  1. สร้าง Fork ของที่เก็บ XLA
  2. โคลน Fork ของที่เก็บ โดยแทนที่ {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 ที่รองรับทั้ง 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 โดยอัตโนมัติ

สร้าง

กำหนดค่าสำหรับ CPU ดังนี้

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"

รุ่น:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • อย่าใช้ Flag --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 ได้ที่สร้างจากแหล่งที่มา

สร้าง Pull Request

เมื่อพร้อมส่งการเปลี่ยนแปลงเพื่อรับการตรวจสอบแล้ว ให้สร้างPull Request

ดูข้อมูลเกี่ยวกับปรัชญาการตรวจสอบโค้ด XLA ได้ที่ กระบวนการตรวจสอบ

การวิเคราะห์แบบคงที่ (Clang-Tidy)

XLA ใช้ clang-tidy สำหรับการวิเคราะห์แบบคงที่และรวมการยืนยันเพื่อรักษาคุณภาพของโค้ด

วิธีเรียกใช้

การตรวจสอบทำได้ 2 วิธี การทดสอบกับเป้าหมายที่เฉพาะเจาะจงสามารถทำได้โดยใช้สิ่งต่อไปนี้

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

มีสคริปต์ตัวช่วยที่ใช้ในเวิร์กโฟลว์ CI ด้วย ซึ่งจะเรียกใช้กับ git diff จากกิ่งของฟีเจอร์เทียบกับกิ่งหลักของต้นทาง

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