-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ặcManualComputationOp
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ạiShardingConstraintOp
hoặcManualComputationOp
. - 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ạiShardingConstraintOp
hoặcManualComputationOp
(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 và 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.