-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ặcManualComputationOp
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ạiShardingConstraintOp
hoặcManualComputationOp
; - 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ạiShardingConstraintOp
hoặcManualComputationOp
(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
- Đố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 đủ.
- 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à:
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 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.
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ộtManualComputationOp
, thì tất cả các giá trị khác trong nhóm đó phải nằm trong cùng một khối.