Hướng dẫn cho nhà phát triển XLA

Hướng dẫn này sẽ cho bạn biết cách bắt đầu phát triển dự án XLA.

Trước khi bắt đầu, hãy hoàn tất các điều kiện tiên quyết sau:

  1. Truy cập vào trang Đóng góp và xem quy trình đóng góp.
  2. Nếu bạn chưa làm, hãy ký Thoả thuận cấp phép cho cộng tác viên.
  3. Cài đặt hoặc định cấu hình các phần phụ thuộc sau:

Sau đó, hãy làm theo các bước bên dưới để lấy mã nguồn, thiết lập môi trường, tạo kho lưu trữ và tạo yêu cầu kéo.

Lấy mã

  1. Tạo một bản rẽ nhánh của kho lưu trữ XLA.
  2. Sao chép nhánh của bạn trong kho lưu trữ, thay thế {USER} bằng tên người dùng GitHub của bạn:

    git clone <a href="https://github.com/">https://github.com/</a>{USER}/xla.git
    
  3. Thay đổi thành thư mục xla: cd xla

  4. Định cấu hình kho lưu trữ nguồn từ xa:

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

Thiết lập môi trường

  1. Cài đặt Bazel.

    Để tạo XLA, bạn phải cài đặt Bazel. Cách nên dùng để cài đặt Bazel là sử dụng Bazelisk. Công cụ này sẽ tự động tải phiên bản Bazel phù hợp cho XLA. Nếu không có Bazelisk, bạn có thể cài đặt Bazel theo cách thủ công.

  2. Tạo và chạy vùng chứa Docker ml-build.

    Để thiết lập một vùng chứa Docker để tạo XLA có hỗ trợ cả CPU và GPU, hãy chạy lệnh sau:

    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
    

    Nếu bạn tạo bằng tính năng hỗ trợ GPU/CUDA, hãy thêm --gpus all để cấp cho vùng chứa quyền truy cập vào tất cả các GPU có sẵn. Điều này cho phép tự động phát hiện các chức năng tính toán CUDA.

Tạo

Định cấu hình cho CPU:

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

Định cấu hình cho GPU:

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

CUDA sẽ tự động phát hiện các chức năng tính toán bằng cách chạy nvidia-smi. Nếu không có GPU trong quá trình tạo bản dựng, bạn phải chỉ định khả năng tính toán theo cách thủ công. Ví dụ:

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

Phiên bản:

docker exec xla bazel build \
  --spawn_strategy=sandboxed \
  --test_output=all \
  //xla/...
  • Không sử dụng cờ --gpus all khi khởi động vùng chứa Docker.
  • Trong ./configure.py, hãy chỉ định khả năng tính toán CUDA theo cách thủ công bằng cách sử dụng cờ --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/...

Bản dựng đầu tiên sẽ mất khá nhiều thời gian vì bạn phải tạo toàn bộ ngăn xếp, bao gồm XLA, MLIR và StableHLO.

Để tìm hiểu thêm về cách tạo XLA, hãy xem phần Tạo từ nguồn.

Tạo yêu cầu kéo

Khi bạn đã sẵn sàng gửi các thay đổi đi xem xét, hãy tạo một yêu cầu kéo.

Để tìm hiểu về triết lý xem xét mã XLA, hãy xem Quy trình xem xét.

Phân tích tĩnh (Clang-Tidy)

Để duy trì chất lượng mã, XLA sử dụng clang-tidy để phân tích tĩnh và bao gồm cả quy trình xác minh.

Cách chạy

Có hai cách để thực hiện các bước kiểm tra. Bạn có thể chạy thử nghiệm này dựa trên các mục tiêu cụ thể bằng cách:

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

Ngoài ra, còn có một tập lệnh trợ giúp được dùng trong quy trình CI để chạy tập lệnh đó dựa trên git diff từ nhánh tính năng so với nhánh chính ngược dòng.

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