-sdy-add-data-flow-edges

Chèn DataFlowEdgeOp cho mọi cạnh luồng dữ liệu.

Chèn DataFlowEdgeOp cho mọi giá trị là chủ sở hữu của một cạnh luồng dữ liệu, tức là tất cả giá trị do getDataFlowEdgeOwners trả về trên mọi toán tử trong mô-đun.

DataFlowEdgeOp được chèn sẽ lấy phân đoạn hiện có của mục tiêu chủ sở hữu nếu có.

TODO(b/330339693): cập nhật tài liệu này khi getDataFlowEdgeOwners bị xoá.

-sdy-apply-sharding-constraints

Áp dụng các quy tắc ràng buộc chỉ ra việc phân đoạn dữ liệu đầu vào.

Sao chép phân đoạn của ShardingConstraintOp vào đầu vào nếu phân đoạn đó đáp ứng tất cả các điều kiện sau:

  • Dữ liệu đầu vào không có phân đoạn hiện có.
  • Dữ liệu đầu vào không do DataFlowEdgeOp tạo ra, nó chứa tính năng phân đoạn tất cả các mục tiêu của cạnh.
  • Quá trình phân đoạn của ShardingConstraintOp đã hoàn tất.
  • Dữ liệu đầu vào không có người dùng nào khác thuộc loại ShardingConstraintOp hoặc ManualComputationOp có phân đoạn khác.

Điều này cho biết rằng ShardingConstraintOp chỉ định việc phân đoạn đầu vào.

Xin lưu ý rằng tính năng phân đoạn của ShardingConstraintOp sẽ truyền đến dữ liệu đầu vào hoặc người dùng trong quá trình truyền bất kể lượt truyền này. Tuy nhiên, vì thuộc tính đóng của một phương diện không truyền nên bạn cần sao chép tính năng phân đoạn để tuân thủ hoàn toàn quy tắc ràng buộc trong các trường hợp trên.

Ngoài ra, nếu một chuỗi ShardingConstraintOp sử dụng một tensor đáp ứng tất cả những điều kiện sau:

  • Tensor này không do ShardingConstraintOp tạo ra và không có người dùng nào khác thuộc loại ShardingConstraintOp hoặc ManualComputationOp.
  • Không có ShardingConstraintOp nào trong chuỗi có nhiều lần sử dụng ngoại trừ lần sử dụng cuối cùng.
  • ShardingConstraintOp cuối cùng trong chuỗi không có người dùng thuộc loại ShardingConstraintOp hoặc ManualComputationOp (nếu không, đó không phải là ShardingConstraintOp cuối cùng trong chuỗi).

thì lượt truyền này sẽ thay thế tất cả các trường hợp sử dụng khác đối với đầu vào của chuỗi, được xác định sau ShardingConstraintOp cuối cùng trong chuỗi (và trong cùng một khối) bằng kết quả của chuỗi, vì nó sẽ chỉ ra việc phân đoạn của những mục đích sử dụng đó.

-sdy-constant-splitter

Phân tách các phép tính phụ hằng số để mỗi phép tính chỉ có một lần sử dụng.

Phân tách các phép tính phụ không đổi để các phép tính này có một người dùng duy nhất.

Điều này đảm bảo việc phân đoạn không được phân đoạ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ố, vì đây được coi là phần phụ thuộc giả (không nên phân đoạn hằng số theo cùng một cách chỉ vì chúng sử dụng cùng một hằng số). Do đó, mỗi lần sử dụng có thể có một cách phân đoạn khác nhau có thể truyền riêng biệt với bản sao riêng của phép tính phụ hằng số.

Một phép tính phụ không đổi là:

  • một toán tử hằng số hoặc iota (không có toán hạng)
  • một toán tử truyền tin, lát cắt hoặc toán tử theo phần tử thuần tuý, trong đó tất cả toán hạng đều được xác định bằng các phép tính phụ hằng số (recursion), cùng với toàn bộ phép tính phụ xác định toán hạng của toán tử đó.

Xin lưu ý rằng trong một phép tính phụ hằng số, một giá trị có thể có nhiều mục đích sử dụng trong phép tính phụ đó.

-sdy-lift-inlined-meshes

Chuyển các MeshAttr nội tuyến trong các phân đoạn dưới dạng biểu tượng MeshOp.

Thay thế mọi MeshAttr cùng dòng trong TensorShardingAttr bằng tên biểu tượng lưới, tham chiếu đến MeshOp hiện có hoặc mới trong mô-đun, sao cho không có hai MeshOp nào có cùng một MeshAttr (các MeshOp hiện có cũng sẽ bị loại bỏ).

Tên của mỗi MeshOp mới sẽ là:

  • maximal_mesh_{device-id}, đối với lưới tối đa (tức là danh sách trục trống và một mã thiết bị duy nhất).
  • Tên có sẵn đầu tiên trong [mesh, mesh_0, mesh_1, ...], nếu không. ### -sdy-manual-axes-cleanup

Dọn dẹp việc sử dụng trục thủ công trong ManualComputationOp

1) Đối với bất kỳ phân đoạn vào/ra nào chưa chỉ định trục thủ công, hãy thêm trục thủ công đó vào các trục sao chép của nó. Điều này nhằm đảm bảo các trục thủ công luôn được chỉ định đầy đủ.

2) Sắp xếp các trục thủ công theo thứ tự khai báo trục lưới.

-sdy-sharding-group-import

Chuẩn hoá và xác thực cho các nhóm phân đoạn.

Áp dụng quy trình chuẩn hoá và xác thực cho các nhóm phân đoạn khi nhập. Cụ thể là:

1) Hợp nhất nhóm phân đoạn – Kết hợp các nhóm phân đoạn bằng cách sử dụng thuộc tính bắc cầu của tư cách thành viên nhóm. Bất cứ khi nào một tensor T nằm trong nhóm phân đoạn G1 nhóm phân đoạn G2, thì chúng ta có thể suy luận rằng tất cả các thành phần trong G1 và G2 phải được phân đoạn theo cùng một cách. Do đó, chúng ta có thể kết hợp G1 và G2 thành một nhóm duy nhất. Tập hợp mã nhận dạng nhóm chuẩn hoá sau khi hợp nhất sẽ là 0,1,...N-1 cho tập hợp nhóm tối thiểu.

2) Xác thực nhóm phân đoạn Xác thực rằng các nhóm phân đoạn được tạo đúng cách và tuân thủ các giả định trong quá trình triển khai. Điều này hiện khẳng định rằng nếu một nhóm phân đoạn chứa một Value được xác định bên trong khối của ManualComputationOp, thì mọi giá trị khác trong nhóm đó phải thuộc cùng một khối.