Tự động dò được duy trì (chỉ GPU)

Chúng tôi dùng OpenAI Triton để tạo một số nhân cho GPU. Triton cho phép tạo hạt nhân GPU nhanh cho một số hợp nhất nhất định, nhưng chúng tôi phải điều chỉnh một số tham số cho mỗi hợp nhất như vậy.

Quá trình này có thể mất nhiều thời gian nếu có nhiều quá trình hợp nhất, vì vậy, chúng tôi cung cấp một cách để tải các kết quả tự động điều chỉnh đó, trong khi vẫn chạy các bước biên dịch khác một cách bình thường. Bộ nhớ đệm tự động điều chỉnh vẫn hữu ích nếu chúng ta thực hiện một vài thay đổi: các lượt hợp nhất có trong bộ nhớ đệm sẽ sử dụng bộ nhớ đệm và các lượt hợp nhất khác sẽ được tự động điều chỉnh như bình thường.

--xla_gpu_per_fusion_autotune_cache_dir=your/directory

Sử dụng và duy trì bộ nhớ đệm tự động điều chỉnh cho mỗi lần kết hợp trong thư mục đã cho. Sẽ có một tệp cho mỗi lần hợp nhất riêng biệt.

Ưu điểm chính của phương pháp này là bạn có thể sử dụng cùng một thư mục bộ nhớ đệm cho nhiều lần chạy XLA (của nhiều mô hình) và bộ nhớ đệm sẽ tăng lên theo từng lần hợp nhất mới gặp phải – giúp tăng tốc các lần chạy tiếp theo. Ngoài ra, còn có tính năng hỗ trợ cơ bản để chạy đồng thời nhiều phiên bản XLA với cùng một thư mục bộ nhớ đệm.

XLA sẽ đọc các kết quả hiện có khi cần và viết kết quả mới sau khi được xác định.

  • Thư mục phải tồn tại trước khi chạy XLA và thư mục đó phải có thể ghi.
  • Người dùng phải xử lý việc vô hiệu hoá bộ nhớ đệm:
    • Vui lòng sử dụng một thư mục trống nếu bạn muốn bắt đầu với bộ nhớ đệm trống.
  • Người dùng phải kiểm tra phiên bản XLA:
    • Nếu bạn muốn sử dụng các bộ nhớ đệm riêng cho các phiên bản của XLA, vui lòng sử dụng các thư mục khác nhau.

Bộ nhớ đệm bị tắt theo mặc định (khi bạn không cung cấp tham số).

Hạn chế: Điều này không đảm bảo sẽ hoạt động tốt khi kết hợp với phương thức lưu vào bộ nhớ đệm khác được mô tả bên dưới.

Giải pháp thay thế: Tải hoặc kết xuất tất cả kết quả từ một HLO nhất định vào một tệp

Bạn có thể kết xuất/tải kết quả tự động điều chỉnh bằng các tham số sau:

--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=

Nếu chúng ta chỉ định tệp .txt hoặc .textproto, thì bộ nhớ đệm sẽ được kết xuất ở định dạng textproto, nếu không thì sẽ ở định dạng protobuf nhị phân.

Trong kiểm thử

Bạn cũng có thể sử dụng tính năng tự động điều chỉnh liên tục trong các bài kiểm thử. Bạn nên sử dụng tính năng này nếu các chương trình kiểm thử rất lớn, đặc biệt là nếu hiệu suất của môi trường kiểm thử bị giới hạn.

Phương thức này chỉ hoạt động tốt nếu bộ nhớ đệm tự động tinh chỉnh chứa các kết quả được tạo trên cùng một loại GPU mà các bài kiểm thử đang chạy.

Tạo một kiểm thử sử dụng tính năng tự động điều chỉnh ổn định

Hiện tại, hãy giả định rằng kiểm thử có liên quan luôn sử dụng cùng một loại GPU.

  1. Chúng ta phải xuất kết quả tự động điều chỉnh từ kiểm thử, ví dụ: bằng cách chỉ định các tham số này cho lệnh kiểm thử:

    --test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto
    --test_sharding_strategy=disabled
    

    Bạn phải tắt tính năng phân đoạn để lấy chính xác một bộ nhớ đệm tự động điều chỉnh cho tất cả các bài kiểm thử.

  2. Sau đó, chúng ta phải tải bộ nhớ đệm đó lên kho lưu trữ mã.

  3. Sau đó, chúng ta phải thêm bộ nhớ đệm vào các phần phụ thuộc dữ liệu của mục tiêu kiểm thử và tải bộ nhớ đệm đó bằng một biến môi trường.

    data = ["test_autotune_cache.textproto"],
    env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" +
                        "$(execpath test_autotune_cache.textproto)"},
    

    (Bạn có thể sử dụng tính năng phân đoạn trong các kiểm thử tải kết quả tự động điều chỉnh.)

Vui lòng xem thêm các bài kiểm thử mẫu trong xla/service/gpu/tests/BUILD:

  • load_autotune_results_using_execpath_test
  • load_autotune_results_from_test_workspace_test
  • dump_autotune_results_to_test_outputs_test

Bộ nhớ đệm lỗi thời

Nếu bạn thực hiện nhiều thay đổi đối với một mô hình, thì có thể bộ nhớ đệm sẽ không còn chứa tất cả các lượt hợp nhất, do đó, quá trình kiểm thử sẽ chậm hơn. Trong trường hợp này, chúng ta sẽ phải tạo lại bộ nhớ đệm tự động điều chỉnh.

Nếu chúng ta bắt đầu sử dụng một loại GPU mới để chạy các chương trình kiểm thử, thì điều này cũng áp dụng.

Bộ nhớ đệm cũng có thể trở nên lỗi thời nếu trình biên dịch XLA phát triển và tạo ra nhiều kiểu hợp nhất.