-sdy-close-shardings
Đóng các phân đoạn tensor và loại bỏ các trục được sao chép.
-sdy-constant-or-scalar-merger
Hợp nhất các hằng số và các phép mở rộng vô hướng giống hệt nhau với các phân đoạn trùng khớp.
Thực hiện CSE đơn giản trên các hằng số có phân đoạn giống hệt nhau.
Quy trình nhập sẽ phân tách và sao chép các hằng số và các phép mở rộng vô hướng sao cho việc phân đoạn không được truyền giữa các lần sử dụng khác nhau của một phép tính phụ hằng số. Nếu các hằng số có cùng phân đoạn sau khi truyền, thì lượt truyền này sẽ hợp nhất các hằng số đó để tiết kiệm thời gian biên dịch. Hãy xem -sdy-constant-or-scalar-splitter để biết thêm thông tin.
-sdy-convert-global-to-local
Chuyển đổi chương trình SDY từ các hình dạng chung sang các hình dạng cục bộ.
Chuyển đổi chương trình SDY từ các hình dạng chung thành các hình dạng cục bộ bằng cách phân vùng các phương diện logic dựa trên các thuộc tính phân đoạn.
Lượt truyền này tận dụng một trình chuyển đổi loại để ánh xạ RankedTensorType từ các hình dạng logic chung sang các hình dạng thực tế cục bộ của thiết bị.
Tùy chọn
-per-dim-all-gather : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3 : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-drop-sharding-and-mesh
Xoá ký hiệu phân đoạn và thao tác lưới khỏi chương trình.
-sdy-drop-sharding-rules
Xoá OpShardingRuleAttr khỏi tất cả các hoạt động đã đăng ký.
-sdy-export-named-computations
Gọi điện cho Outline từ NamedComputationOp.
Tạo một lượt truyền đổi NamedComputationOp thành CallOp bằng một hàm riêng tư mới có tên là name của NamedComputationOp. FuncOp và CallOp mới có cùng các phân đoạn như các toán hạng/kết quả NamedComputationOp ban đầu.
Nếu có một hàm trùng tên với NamedComputationOp trong mô-đun, thì bảng ký hiệu MLIR sẽ đổi tên hàm đó thành {name}_#.
-sdy-insert-explicit-reshards
Chèn các phân đoạn rõ ràng để tất cả các thao tác đều có các phân đoạn tương thích.
Về cơ bản, phân đoạn tương thích có nghĩa là thao tác có thể chấp nhận các toán hạng được phân đoạn và tạo ra kết quả được phân đoạn mà không cần bất kỳ hoạt động giao tiếp phân đoạn lại nào (lưu ý rằng thao tác vẫn có thể yêu cầu giao tiếp, chẳng hạn như giảm tất cả hoặc trao đổi vùng lân cận).
Sau khi truyền dữ liệu, một số thao tác vẫn có thể có các phân đoạn không tương thích.
Xin lưu ý rằng khi một trục (hoặc trục phụ) được dùng để phân đoạn các phương diện không tương ứng (ví dụ: các phương diện không co lại trong matmul) trên nhiều tensor, hoặc khi một trục phân đoạn một phương diện trong một tensor nhưng không phải là phương diện tương ứng trong tensor kia, thì có nghĩa là thao tác này có xung đột phân đoạn. Do đó, sau lần truyền này, các thao tác sẽ không còn xung đột.
Lượt truyền này chèn các thao tác phân đoạn lại một cách rõ ràng để đối với mỗi thao tác, các phương diện tương ứng sẽ được phân đoạn theo cùng một cách trên tất cả các toán hạng và kết quả, đồng thời mỗi trục (hoặc trục phụ) chỉ có thể dùng để phân đoạn một loại phương diện duy nhất.
Ví dụ:
Thiết bị vào:
mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
Kết quả:
sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
Trong ví dụ trên, lhs và rhs đều được phân đoạn trên trục "x" trên các phương diện không thu hẹp, điều này là không tương thích. Lượt truyền này chèn một lượt phân phối lại rõ ràng trên rhs trước thao tác dấu chấm, để thao tác dấu chấm có các phân đoạn tương thích.
Tùy chọn
-enable-full-version : Enable full version.
-sdy-insert-func-call-reshards
Chèn các lệnh phân chia lại cho các xung đột phân chia hàm và lệnh gọi.
Chèn các phân đoạn lại cho xung đột phân đoạn hàm và lệnh gọi trên kết quả.
-sdy-optimize-collectives
Tối ưu hoá các hoạt động giao tiếp tập thể.
Loại bỏ các thao tác hoán vị tập thể dư thừa trước các chuỗi tất cả-đến-tất cả bằng cách phân tách các phương diện phân chia và hợp nhất thành một chuỗi tất cả-đến-tất cả kết hợp.
-sdy-pad-for-divisibility
Đệm các tenxơ bằng cách phân chia không chia hết thành các hình dạng chia hết.
-sdy-per-instruction-partitioning
_Chọn lọc các chỉ dẫn mục tiêu, chạy quy trình phân vùng trên các chỉ dẫn đó để tạo mã cục bộ cho thiết bị và gói các chỉ dẫn đó trong sdy.manualcomputation.
Để gỡ lỗi và phân đôi, hãy phân vùng có chọn lọc các chỉ dẫn riêng lẻ bằng cách sử dụng quy trình phân vùng Shardy độc lập (resolve-permutation-factors, reshard-to-collectives, pad-for-divisibility, convert-global-to-local) và bao bọc mã cục bộ của thiết bị kết quả bên trong sdy.manual_computation. Thao tác này giữ nguyên phần còn lại của chương trình chung để phân vùng XLA SPMD chỉ các hướng dẫn chung chưa được gói.
Tùy chọn
-filter : Filter string for selective partitioning. Can be empty (all sharded ops), comma-separated op name substrings (e.g. 'dot, pad'), or key-values like 'selectLow=0, selectHigh=10'.
-enable-halo-exchange : Implement halo exchange logic for windowed operations inside the sub-pipeline.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-propagate-to-func-results
Truyền các phân đoạn từ trình kết thúc hàm đến kết quả hàm.
Sao chép các phân đoạn của các giá trị trình kết thúc hàm vào các kết quả func.func tương ứng, giữ nguyên các phân đoạn hiện có trên hàm chính.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_Xoá sdy.all_gather và sdy.reducescatter cho CMV1.
Xoá tất cả các lệnh all-gather trong mẫu all-gather + dot. Xoá reduce-scatter trong mẫu dot + reduce-scatter. Thẻ này dùng để tương thích với matmul tập thể phiên bản 1 (CMV1). Đây là giải pháp tạm thời cho lỗi b/432019089.
-sdy-remove-propagation-debug-info
Xoá thông tin gỡ lỗi về việc truyền dữ liệu (các cạnh truyền dữ liệu và việc phân đoạn nguồn) trong quá trình xuất.
-sdy-remove-sharding-groups
Xoá ShardingGroupOps sau khi truyền.
-sdy-remove-sub-axes-in-input-output-shardings
Xoá các trục phụ trong việc phân chia đầu vào/đầu ra.
Một số người dùng Shardy mong đợi các đầu vào/đầu ra của hàm có các phân đoạn mà không có trục phụ. Lượt truyền này sẽ xoá các trục phụ và trục theo sau khỏi các phân đoạn kích thước mở đầu vào/đầu ra. Thường thì lượt truyền này diễn ra sau sdy-update-non-divisible-input-output-shardings để đảm bảo rằng việc xoá các trục phụ không tạo ra bất kỳ phân đoạn nào không chia được.
-sdy-reshard-to-collectives
Chuyển đổi ReshardOp thành nhiều thao tác tập thể Shardy.
So khớp các thao tác phân chia lại và viết lại các thao tác đó thành nhiều thao tác tập thể Shardy. Sau lượt truyền này, sẽ không còn thao tác phân đoạn lại nào trong mô-đun.
Nếu keepRedundantReshards là true, thì các thao tác phân chia lại duy nhất còn lại là các thao tác dư thừa. Theo mặc định, thao tác này giả định rằng các phân đoạn lại tường minh đã được chèn (sdy-insert-explicit-reshards) và không giữ lại các phân đoạn lại dư thừa. Thao tác này sẽ giữ lại các phân đoạn lại dư thừa nếu các phân đoạn lại rõ ràng có thể chưa được chèn.
Ví dụ:
Thiết bị vào:
mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>
Kết quả:
mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>
Trong ví dụ trên, tenxơ %0 : tensor<16x2xf32> được phân đoạn dưới dạng \[{"x", "y", "z"}, {}\]. Sau đó, có một reshard op resharding nó dưới dạng \[{"x"}, {}\]. Trên các trục đầu tiên, vì hậu tố {"y", "z"} bị xoá sau khi phân chia lại, nên chúng ta suy ra rằng chúng ta đã thu thập tất cả {"y", "z"}. Phương diện thứ hai không thay đổi.
Tùy chọn
-keep-redundant-reshards : Whether it keeps redundant reshards or removes.
-sdy-resolve-permutation-factors
Giải quyết việc phân đoạn trên các phương diện được liên kết với các hệ số kPermutation.
Các phương diện phân đoạn với các hệ số kPermutation có thể yêu cầu giao tiếp giữa nhiều thiết bị (ví dụ: trao đổi halo cho các cửa sổ hoặc hoán vị tập thể cho các lượt đảo ngược).
Nếu enableHaloExchange là true, thì lượt truyền sẽ sử dụng một logic giao tiếp được tối ưu hoá hiện có để giải quyết các hệ số hoán vị. Nếu không, lượt truyền sẽ chỉ chèn các thao tác sdy.reshard để sao chép các phương diện đó. Giá trị mặc định của enableHaloExchange là true.
Tùy chọn
-enable-halo-exchange : Implement halo exchange logic for windowed operations.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-resolve-single-device-sharding
Giảm các thao tác trên một thiết bị thành stablehlo.if được bảo vệ bằng mã nhận dạng thiết bị mục tiêu.
Tùy chọn
-replica-count : Number of replicas per partition.
-partition-count : Number of partitions per replica.
-sdy-sharding-constraint-to-reshard
Chuyển đổi ShardingConstraintOp thành ReshardOp.
-sdy-sink-data-flow-edges
Chìm tất cả DataFlowEdgeOp vào đầu vào của chúng.
Di chuyển việc phân đoạn của mỗi DataFlowEdgeOp đến đầu vào của nó (mục tiêu gốc của cạnh) và thay thế thao tác bằng đầu vào của thao tác đó.
Tùy chọn
-sink-debug-sharding-origins : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.
-sdy-sink-func-data-flow-edges
Chìm tất cả FuncDataFlowEdgeOp vào đầu vào của chúng.
Di chuyển việc phân đoạn của mỗi FuncDataFlowEdgeOp đến đầu vào của nó và thay thế thao tác bằng đầu vào của thao tác đó.
-sdy-unflatten-call-graph
Huỷ làm phẳng biểu đồ cuộc gọi.
Huỷ làm phẳng biểu đồ. Thao tác này sẽ loại bỏ các hàm trùng lặp có cùng phân đoạn đầu vào/đầu ra và cùng nguồn gốc như được mô tả bằng thuộc tính "original_func_name" được đính kèm vào các hàm.
Tùy chọn
-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.
-sdy-update-non-divisible-input-output-shardings
Tạo các đầu vào/đầu ra FuncOp được phân đoạn đồng đều, loại bỏ mọi nhu cầu về khoảng đệm do việc phân đoạn không chia hết.
Người dùng Shardy mong đợi các đầu vào/đầu ra của hàm có thể chia đều/phân mảnh để tránh yêu cầu đệm các tensor. Việc truyền có thể khiến các đầu vào/đầu ra có các phân đoạn không chia được, vì vậy, lượt truyền này sẽ cập nhật các phân đoạn đó thành tiền tố phân đoạn theo phương diện lớn nhất của phân đoạn ban đầu được phân đoạn đồng đều.
-sdy-verify-unreduced-axes
Xác minh tính nhất quán của việc sử dụng trục chưa được rút gọn.
Xác minh rằng đối với mọi thao tác, nếu các toán hạng có trục chưa rút gọn, thì thao tác đó sẽ rút gọn một cách rõ ràng (ví dụ: thông qua sdy.reshard) hoặc truyền chúng qua kết quả (hoặc là một thao tác liên kết như func.call).