-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ẽ chia 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 đến các hình dạng thực tế trên thiết bị.
-sdy-drop-sharding-rules
Xoá OpShardingRuleAttr đợt phát hành sản phẩm khỏi tất cả các hoạt động đã đăng ký.
-sdy-insert-explicit-reshards
Chèn các phân đoạn lại 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, việc 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 yêu cầu 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 halo).
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 sẽ 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ụ:
Đầu 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" theo 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ần phân đoạn 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.
-avoid-reshards-on-named-computations : Avoid explicit reshards/collectives on named computations.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_Xoá sdy.all_gather và sdy.reducescatter cho CMV1.
Xoá tất cả các nhóm trong mẫu tất cả các nhóm + dấu chấm. Xoá reduce-scatter trong mẫu chấm + reduce-scatter. Lượt truyền này là để tương thích với matmul tập hợp 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 mảnh 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 việc phân đoạn đầ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 mảnh lại và viết lại chúng 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 mảnh 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. Nó 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ụ:
Đầu 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, tensor %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-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-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 dữ liệu có thể khiến các đầu vào/đầu ra có các phân đoạn không chia hết, 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.