-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ó.

-sdy-apply-sharding-constraints

Áp dụng các quy tắc ràng buộc chỉ định 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ó.
  • 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.

Các điều kiện này cho biết ShardingConstraintOp chỉ định việc phân đoạn đầu vào.

Nếu dữ liệu đầu vào do DataFlowEdgeOp tạo ra, thì thay vì đặt tính năng phân đoạn của toán tử, chúng ta sẽ thay thế tất cả các trường hợp sử dụng input bằng ShardingConstraintOp để tránh hạn chế việc phân đoạn tất cả các mục tiêu của cạnh.

Xin lưu ý rằng việc phân đoạn ShardingConstraintOp sẽ được truyền đến đầ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 được truyền, nên bạn cần sao chép hoạt động phân đoạn để tuân thủ đầy đủ quy tắc ràng buộc trong các trường hợp trên.

Ngoài ra, nếu một tensor được sử dụng bởi một chuỗi ShardingConstraintOp thỏa mãn tất cả các đ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 mục đích sử dụng ngoại trừ ShardingConstraintOp 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ì thẻ này sẽ thay thế tất cả các mục đích sử dụng khác của dữ liệu đầ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ì thẻ này sẽ chỉ định việc phân đoạn các 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 rằng việc phân đoạn không được truyền giữa các cách sử dụng khác nhau của một phép tính phụ hằng số, vì đây được coi là một phần phụ thuộc sai (các cách sử dụng một hằng số không được phân đoạn theo cùng một cách chỉ vì chúng sử dụng cùng một hằng số). Trong thực tế, 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ụ hằng số 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 nội tuyến trong TensorShardingAttr bằng tên ký hiệu 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ó MeshAttr giống hệt nhau (MeshOp hiện có cũng được loại bỏ trùng lặp).

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) hoặc
  • Tên có sẵn đầu tiên trong [mesh, mesh_0, mesh_1, ...].

-sdy-manual-axes-cleanup

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

  1. Đối với mọi hoạt động phân đoạn vào/ra chưa chỉ định trục thủ công, hãy thêm trục thủ công đó vào replicated_axes. Đ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

Xác thực và chuẩn hoá 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 ra rằng tất cả các thành viê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. 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 xác nhận 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 một ManualComputationOp, thì tất cả các giá trị khác trong nhóm đó phải nằm trong cùng một khối.