-sdy-close-shardings

텐서 샤딩을 닫고 복제된 축을 삭제합니다.

-sdy-constant-merger

일치하는 샤딩으로 동일한 상수를 병합합니다.

동일한 샤딩이 있는 상수에 대해 경량 CSE를 실행합니다.

가져오기 파이프라인은 상수 하위 계산의 여러 사용 간에 샤딩이 전파되지 않도록 상수를 분할하고 복제합니다. 전파 후 상수에 동일한 샤딩이 있는 경우 이 패스는 이를 병합하여 컴파일 시간을 절약합니다.

-sdy-drop-sharding-rules

등록된 모든 작업에서 OpShardingRuleAttr를 삭제합니다.

-sdy-insert-explicit-reshards

모든 작업에 호환되는 샤딩이 적용되도록 명시적 리샤딩을 삽입합니다.

호환되는 샤딩은 기본적으로 작업이 샤딩된 피연산자를 수락하고 샤딩된 결과를 생성할 수 있으며, 샤딩된 통신이 필요하지 않다는 것을 의미합니다 (작업에 여전히 all-reduce 또는 halo-swap과 같은 통신이 필요할 수 있음).

전파 후에도 일부 작업에는 호환되지 않는 샤딩이 있을 수 있습니다.

축 (또는 하위 축)이 여러 텐서에서 상응하지 않는 측정기준 (예: matmul의 비수축 측정기준)을 샤딩하는 데 사용되거나 축이 한 텐서의 측정기준은 샤딩하지만 다른 텐서의 상응하는 측정기준은 샤딩하지 않는 경우 이 연산에 샤딩 충돌이 있다고 합니다. 따라서 이 패스 후에는 작업이 충돌이 없게 됩니다.

이 패스는 재샤딩 작업을 명시적으로 삽입하여 각 작업의 경우 모든 피연산자와 결과에서 상응하는 측정기준이 동일한 방식으로 샤딩되고 모든 축 (또는 하위 축)이 단일 측정기준 유형을 샤딩하는 데만 사용될 수 있도록 합니다.

예:

입력:

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>

출력:

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>

위 예에서 lhsrhs는 모두 비축소 측정기준의 'x' 축에서 샤딩되며 이는 호환되지 않습니다. 이 패스는 점 연산 전에 rhs에 명시적 reshard를 삽입하여 점 연산에 호환되는 샤딩이 있도록 합니다.

-sdy-remove-sharding-groups

전파 후 ShardingGroupOps를 삭제합니다.

-sdy-reshard-to-collectives

ReshardOp를 다양한 Shardy 집합 연산으로 변환합니다.

리샤드 작업을 일치시키고 다양한 Shardy 집합 작업으로 재작성합니다. 이 패스 후에는 모듈에 리샤드 작업이 남아 있지 않습니다. 이 패스는 명시적 리샤드가 이미 삽입되었다고 가정합니다(sdy-insert-explicit-reshards).

예:

입력:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

출력:

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>

위의 예에서 텐서 %0 : tensor<16x2xf32>\[{"x", "y", "z"}, {}\]로 샤딩됩니다. 그런 다음 reshard 작업이 \[{"x"}, {}\]로 다시 샤딩합니다. 첫 번째 축에서, 리샤딩 후 접미사 {"y", "z"}가 삭제되므로 {"y", "z"}가 모두 수집되었다고 추론할 수 있습니다. 두 번째 측정기준은 변경되지 않습니다.

-sdy-sharding-constraint-to-reshard

ShardingConstraintOp를 ReshardOp로 변환합니다.

-sdy-sink-data-flow-edges

모든 DataFlowEdgeOp를 입력으로 싱크합니다.

DataFlowEdgeOp의 샤딩을 입력 (에지의 루트 타겟)으로 이동하고 연산자를 입력으로 대체합니다.

옵션

-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-temp-explicit-reshards-for-optimizations

특정 최적화를 위해 명시적 리샤드를 삽입합니다.

이 패스는 sdy-insert-explicit-reshards 패스를 기본적으로 사용 설정할 수 있을 때까지의 임시 해결 방법입니다.

이를 통해 최적화를 위해 특정 작업에 명시적 리샤드를 삽입할 수 있습니다.

-sdy-update-non-divisible-input-output-shardings

FuncOp 입력/출력을 균등하게 샤딩하여, 나눌 수 없는 샤딩으로 인한 패딩이 필요하지 않도록 합니다.

Shardy 사용자는 텐서 패딩이 필요하지 않도록 함수 입력/출력을 균등하게 나눌 수 있고 샤딩할 수 있기를 기대합니다. 전파로 인해 입력/출력에 나눌 수 없는 샤딩이 생길 수 있으므로 이 패스는 이를 균등하게 샤딩된 원래 샤딩의 가장 큰 측정기준 샤딩 접두사로 업데이트합니다.