Hướng dẫn về cờ XLA

Hướng dẫn này cung cấp một lựa chọn được tuyển chọn về các cờ XLA chính để hỗ trợ người dùng điều hướng và sử dụng hiệu quả các chức năng của XLA. Các phần sau đây trình bày chi tiết các cờ có thể ảnh hưởng đáng kể đến hiệu suất thời gian chạy và mức sử dụng bộ nhớ. Nếu có bất kỳ vấn đề nào xảy ra (chẳng hạn như sự cố) sau khi bật một cờ, bạn nên quay lại chế độ cài đặt mặc định và tạo một vấn đề trên GitHub.

Cờ hiệu suất

Các cờ sau đây đóng vai trò quan trọng trong việc nâng cao hiệu suất thời gian chạy. Việc thử nghiệm các chế độ cài đặt này có thể giúp bạn đạt được hiệu suất đáng kể.

Cờ Mô tả Giá trị mặc định Giá trị đề xuất Giá trị đề xuất
Pipelining
1. xla_should_allow_loop_variant_parameter_in_chain
2. xla_should_add_loop_invariant_op_in_chain
3. xla_tpu_enable_ici_ag_pipelining
Bạn nên sử dụng kết hợp 3 cờ này để bật tính năng tạo đường ống tập thể cho các hoạt động thu thập tất cả ICI(Kết nối liên chip), giúp tạo ra nhiều cơ hội hơn cho việc thực thi chồng chéo. 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled
2. xla_should_add_loop_invariant_op_in_chain=kDisabled
3. xla_tpu_enable_ici_ag_pipelining=false
1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled
2. xla_should_add_loop_invariant_op_in_chain=kEnabled
3. xla_tpu_enable_ici_ag_pipelining=true
1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto
2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto
3. xla_tpu_enable_ici_ag_pipelining=true/false
v5e/Async
xla_enable_async_all_gather
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_gather
Bạn nên sử dụng 3 cờ này cùng nhau để kích hoạt các thao tác thu thập tất cả không đồng bộ trên v5e. xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kDisabled/kEnabled/kAuto
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false
v5e/Async
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_reduce
Bạn nên sử dụng 2 cờ này cùng nhau để kích hoạt các thao tác giảm tất cả không đồng bộ trên v5e. xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=false
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true/false
Async
xla_tpu_enable_async_all_to_all
Cờ này cho phép giao tiếp không đồng bộ giữa mọi thành phần. xla_tpu_enable_async_all_to_all=false xla_tpu_enable_async_all_to_all=true xla_tpu_enable_async_all_to_all=true/false
Bị giới hạn bởi độ trễ
xla_all_gather_latency_bound_threshold_in_bytes
Cờ này dành cho các hoạt động thu thập tất cả bị giới hạn về độ trễ (tức là có kích thước nhỏ). Việc bật chế độ này sẽ kích hoạt các hoạt động tối ưu hoá cụ thể có thể giảm thời gian thực thi cho các hoạt động thu thập tất cả bị giới hạn về độ trễ. Thông thường, nó được dùng trong các khối lượng công việc suy luận. xla_all_gather_latency_bound_threshold_in_bytes=-1
(chưa bật)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Bị giới hạn bởi độ trễ
xla_all_reduce_latency_bound_threshold_in_bytes
Cờ này dành cho các hoạt động thu thập tất cả bị giới hạn về độ trễ (tức là có kích thước nhỏ). Việc bật chế độ này sẽ kích hoạt các hoạt động tối ưu hoá cụ thể có thể giảm thời gian thực thi cho các hoạt động giảm tất cả bị giới hạn độ trễ. Thông thường, nó được dùng trong các khối lượng công việc suy luận. xla_all_reduce_latency_bound_threshold_in_bytes=-1
(chưa bật)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Bị giới hạn bởi độ trễ
xla_collective_permute_latency_bound_threshold_in_bytes
Cờ này dành cho các hoạt động thu thập tất cả bị giới hạn về độ trễ (tức là có kích thước nhỏ). Việc bật chế độ này sẽ kích hoạt các hoạt động tối ưu hoá cụ thể có thể giảm thời gian thực thi cho các hoạt động hoán vị tập thể bị giới hạn độ trễ. Thông thường, nó được dùng trong các khối lượng công việc suy luận. xla_collective_permute_latency_bound_threshold_in_bytes=-1
(chưa bật)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Bị giới hạn bởi độ trễ
xla_all_to_all_latency_bound_threshold_in_bytes
Cờ này dành cho các hoạt động thu thập tất cả bị giới hạn về độ trễ (tức là có kích thước nhỏ). Việc bật chế độ này sẽ kích hoạt các hoạt động tối ưu hoá cụ thể có thể giảm thời gian thực thi cho tất cả các hoạt động liên kết bị giới hạn độ trễ. Thông thường, nó được dùng trong các khối lượng công việc suy luận. xla_all_to_all_latency_bound_threshold_in_bytes=-1
(chưa bật)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
xla_enable_async_collective_permute Viết lại tất cả các thao tác hoán vị tập thể thành các biến thể không đồng bộ của chúng. Khi được đặt thành auto, XLA có thể tự động bật chế độ thu thập không đồng bộ dựa trên các cấu hình hoặc điều kiện khác. xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled

Cờ bộ nhớ

Các cờ được liệt kê bên dưới được cung cấp để giải quyết các vấn đề liên quan đến HBM. Bạn chỉ nên điều chỉnh các thông số này nếu gặp phải lỗi "hết bộ nhớ" HBM trong quá trình biên dịch mô hình. Trong tất cả các trường hợp khác, bạn nên sử dụng các giá trị mặc định vì việc thay đổi các giá trị này có thể ảnh hưởng tiêu cực đến hiệu suất.

Cờ Mô tả Giá trị mặc định Giá trị đề xuất Giá trị đề xuất
Trình lập lịch
xla_latency_hiding_scheduler_rerun
Chế độ cài đặt này điều chỉnh hành vi của trình lập lịch ẩn độ trễ. Cơ chế này hoạt động bằng cách giảm dần giới hạn bộ nhớ được phân bổ cho việc lập lịch với mỗi lần "chạy lại" quy trình. xla_latency_hiding_scheduler_rerun=1 xla_latency_hiding_scheduler_rerun=5 0~10(it doesn’t make much sense beyond 10 reruns)
Fusion
xla_tpu_rwb_fusion
Cờ này cho phép hợp nhất loại giảm + truyền tin và có thể giảm mức sử dụng bộ nhớ. xla_tpu_rwb_fusion=true xla_tpu_rwb_fusion=false xla_tpu_rwb_fusion=true/false
Trình lập lịch
xla_memory_scheduler
Cờ này chỉ định thuật toán mà trình lập lịch bộ nhớ sẽ dùng để giảm thiểu mức tiêu thụ bộ nhớ. Việc sử dụng một thuật toán nâng cao hơn có thể giúp bạn có được một lịch trình tiêu tốn ít bộ nhớ hơn, nhưng sẽ mất nhiều thời gian biên dịch hơn. xla_memory_scheduler=kDefault xla_memory_scheduler=kBrkga xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga
Trình lập lịch
xla_tpu_enable_latency_hiding_scheduler
Cờ này cho phép trình lập lịch ẩn độ trễ, giúp chúng ta thực hiện hoạt động thu thập không đồng bộ thay vì đồng bộ. Việc tắt tính năng này sẽ làm giảm mức sử dụng bộ nhớ nhưng bạn sẽ mất đi hiệu suất từ các thao tác không đồng bộ này. xla_tpu_enable_latency_hiding_scheduler=true xla_tpu_enable_latency_hiding_scheduler=false xla_tpu_enable_latency_hiding_scheduler=true/false
SPMD
xla_jf_spmd_threshold_for_windowed_einsum_mib
Cờ này đặt ngưỡng dưới của kích thước tối thiểu của dấu chấm để kích hoạt matmul tập thể. Việc đặt giá trị này thành một giá trị cao hơn sẽ giúp tiết kiệm bộ nhớ nhưng lại bỏ lỡ cơ hội thực hiện phép nhân ma trận tập thể. xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) [0, 9223372036854775807]

Các cờ cảnh báo thường dùng khác

Cờ Loại Ghi chú
xla_dump_to Chuỗi (đường dẫn tệp) Thư mục nơi các tệp HLO được tối ưu hoá trước và các cấu phần phần mềm khác sẽ được đặt (xem XLA Tools).

Cờ XLA của TPU

Cờ Loại Ghi chú
xla_tpu_enable_data_parallel_all_reduce_opt Boolean (đúng/sai) Tối ưu hoá để tăng cơ hội trùng lặp cho DCN (mạng trung tâm dữ liệu) giảm tất cả được dùng cho việc phân đoạn song song dữ liệu.
xla_tpu_data_parallel_opt_different_sized_ops Boolean (đúng/sai) Cho phép truyền dữ liệu song song qua nhiều lần lặp lại ngay cả khi kích thước đầu ra của chúng không khớp với kích thước có thể lưu tại chỗ trong các biến xếp chồng. Có thể làm tăng áp lực bộ nhớ.
xla_tpu_spmd_rng_bit_generator_unsafe Boolean (đúng/sai) Có chạy RngBitGenerator HLO theo cách phân vùng hay không. Cách này không an toàn nếu bạn muốn có kết quả xác định với các phân đoạn khác nhau trên các phần khác nhau của quá trình tính toán.
xla_tpu_megacore_fusion_allow_ags Boolean (đúng/sai) Cho phép hợp nhất tất cả các thao tác thu thập với các phép tích chập/giảm tất cả.
xla_tpu_enable_ag_backward_pipelining Boolean (đúng/sai) Các quy trình kết hợp tất cả (hiện tại là kết hợp tất cả ở quy mô lớn) ngược lại thông qua các vòng lặp quét.

Cờ XLA của GPU

Cờ Loại Ghi chú
xla_gpu_enable_latency_hiding_scheduler Boolean (đúng/sai) Cờ này cho phép các trình lập lịch ẩn độ trễ chồng chéo giao tiếp không đồng bộ với việc tính toán một cách hiệu quả. Giá trị mặc định là False.
xla_gpu_enable_triton_gemm Boolean (đúng/sai) Sử dụng phép nhân ma trận dựa trên Triton.
xla_gpu_graph_level Cờ (0-3) Cờ cũ để đặt cấp độ biểu đồ GPU. Sử dụng xla_gpu_enable_command_buffer trong các trường hợp sử dụng mới. 0 = tắt; 1 = ghi lại các hợp nhất và memcpys; 2 = ghi lại gemm; 3 = ghi lại các tích chập.
xla_gpu_all_reduce_combine_threshold_bytes Số nguyên (byte) Các cờ này điều chỉnh thời điểm kết hợp nhiều AllGather / ReduceScatter / AllReduce nhỏ thành một AllGather / ReduceScatter / AllReduce lớn để giảm thời gian dành cho việc giao tiếp giữa các thiết bị. Ví dụ: đối với các ngưỡng AllGather / ReduceScatter trên khối lượng công việc dựa trên Transformer, hãy cân nhắc điều chỉnh các ngưỡng này đủ cao để kết hợp ít nhất một AllGather / ReduceScatter trọng số của Lớp Transformer. Theo mặc định, combine_threshold_bytes được đặt thành 256.
xla_gpu_all_gather_combine_threshold_bytes Số nguyên (byte) Xem xla_gpu_all_reduce_combine_threshold_bytes ở trên.
xla_gpu_reduce_scatter_combine_threshold_bytes Số nguyên (byte) Xem xla_gpu_all_reduce_combine_threshold_bytes ở trên.
xla_gpu_enable_pipelined_all_gather Boolean (đúng/sai) Bật tính năng pipelining của tất cả các chỉ dẫn thu thập.
xla_gpu_enable_pipelined_reduce_scatter Boolean (đúng/sai) Bật tính năng pipelining của các chỉ dẫn giảm phân tán.
xla_gpu_enable_pipelined_all_reduce Boolean (đúng/sai) Bật tính năng pipelining của tất cả các chỉ dẫn giảm.
xla_gpu_enable_while_loop_double_buffering Boolean (đúng/sai) Bật tính năng đệm đôi cho vòng lặp while.
xla_gpu_enable_all_gather_combine_by_dim Boolean (đúng/sai) Kết hợp tất cả các thao tác thu thập với cùng một phương diện thu thập hoặc bất kể phương diện của chúng.
xla_gpu_enable_reduce_scatter_combine_by_dim Boolean (đúng/sai) Kết hợp các thao tác giảm phân tán có cùng phương diện hoặc bất kể phương diện của chúng.