-sdy-add-data-flow-edges

모든 데이터 흐름 가장자리에 DataFlowEdgeOp를 삽입합니다.

데이터 흐름 가장자리의 소유자인 모든 값(즉, 모듈의 모든 작업에서 getDataFlowEdgeOwners에 의해 반환된 모든 값)에 DataFlowEdgeOp를 삽입합니다.

삽입된 DataFlowEdgeOp는 소유자 타겟의 기존 샤딩을 사용합니다(있는 경우).

TODO(b/330339693): getDataFlowEdgeOwners가 삭제되면 이 문서를 업데이트합니다.

-sdy-apply-sharding-constraints

입력의 샤딩을 지정하는 제약조건을 적용합니다.

ShardingConstraintOp의 샤딩이 다음을 모두 충족하는 경우 입력에 복사합니다.

  • 입력에 기존 샤딩이 없습니다.
  • 입력은 에지의 모든 타겟의 샤딩을 보유하는 DataFlowEdgeOp에서 생성되지 않습니다.
  • ShardingConstraintOp의 샤딩이 완전히 닫힙니다.
  • 입력에 다른 샤딩이 있는 ShardingConstraintOp 또는 ManualComputationOp 유형의 다른 사용자가 없습니다.

이는 ShardingConstraintOp가 입력의 샤딩을 지시함을 나타냅니다.

ShardingConstraintOp의 샤딩은 이 패스와 관계없이 전파 중에 입력 또는 사용자에게 전파되지만 측정기준의 닫힌 속성은 전파되지 않으므로 위의 경우에 제약조건을 완전히 준수하려면 샤딩을 복사하는 것이 중요합니다.

또한 다음을 모두 충족하는 ShardingConstraintOp 체인에서 텐서가 사용되는 경우

  • 이 텐서는 ShardingConstraintOp에서 생성되지 않았으며 ShardingConstraintOp 또는 ManualComputationOp 유형의 다른 사용자가 없습니다.
  • 체인의 ShardingConstraintOp 중 마지막 ShardingConstraintOp를 제외하고는 두 번 이상 사용되는 ShardingConstraintOp가 없습니다.
  • 체인의 마지막 ShardingConstraintOp에는 ShardingConstraintOp 또는 ManualComputationOp 유형의 사용자가 없습니다 (그렇지 않으면 체인의 마지막이 아님).

그러면 이 패스는 체인의 마지막 ShardingConstraintOp 뒤 (및 동일한 블록 내)에 정의된 체인의 입력의 다른 모든 사용을 체인의 결과로 대체합니다. 이러한 사용의 샤딩을 지시해야 하기 때문입니다.

-sdy-constant-splitter

상수 하위 계산을 분할하여 각 계산을 한 번만 사용합니다.

상수 하위 계산을 단일 사용자로 분할합니다.

이렇게 하면 잘못된 종속 항목으로 간주되므로 상수 하위 계산의 여러 사용 간에 샤딩이 전파되지 않습니다. 즉, 상수의 사용은 동일한 상수를 사용한다고 해서 동일한 방식으로 샤딩되어서는 안 됩니다. 실제로 각 사용에는 고정된 하위 계산의 자체 사본에 별도로 전파될 수 있는 다른 샤딩이 있을 수 있습니다.

상수 하위 계산은 다음 중 하나입니다.

  • 상수 또는 iota 연산자 (피연산자 없음)
  • 피연산자가 모두 상수 하위 계산에 의해 정의되고 (재귀적으로) 피연산자를 정의하는 전체 하위 계산과 함께 정의되는 브로드캐스트, 슬라이스 또는 순수한 요소별 연산입니다.

일정한 하위 계산 내에서 값은 해당 하위 계산 내에서 여러 번 사용될 수 있습니다.

-sdy-lift-inlined-meshes

샤딩에서 인라인 MeshAttr를 기호 MeshOp로 리프트합니다.

TensorShardingAttr의 인라인 MeshAttr를 모듈의 기존 또는 새 MeshOp를 참조하는 메시 기호 이름으로 대체합니다. 따라서 동일한 MeshAttr를 사용하는 두 개의 MeshOp가 없게 됩니다 (기존 MeshOp도 중복 삭제됨).

MeshOp의 이름은 다음 중 하나입니다.

  • maximal_mesh_{device-id}: 최대 메시 (예: 빈 축 목록 및 단일 기기 ID)
  • [mesh, mesh_0, mesh_1, ...]에서 사용 가능한 첫 번째 이름입니다. ### -sdy-manual-axes-cleanup

ManualComputationOp에서 수동 축 사용을 정리합니다.

1) 수동 축을 지정하지 않은 모든 인/아웃 샤딩의 경우 해당 수동 축을 복제된 축에 추가합니다. 이는 수동 축이 항상 완전히 지정되도록 하기 위함입니다.

2) 메시 축 선언 순서대로 수동 축을 정렬합니다.

-sdy-sharding-group-import

샤딩 그룹의 정규화 및 유효성 검사 패스

가져올 때 샤딩 그룹에 정규화 및 유효성 검사를 적용합니다. 구체적으로 다음과 같습니다.

1) 샤딩 그룹 통합 - 그룹 멤버십의 전이 속성을 사용하여 샤딩 그룹을 결합합니다. 텐서 T가 샤딩 그룹 G1 샤딩 그룹 G2에 있는 경우 G1 및 G2의 모든 구성원이 동일한 방식으로 샤딩되어야 한다고 추론할 수 있습니다. 따라서 G1과 G2를 단일 그룹으로 결합할 수 있습니다. 병합 후 표준 그룹 ID 집합은 최소 그룹 집합의 경우 0,1,...N-1이 됩니다.

2) 샤딩 그룹 유효성 검사: 샤딩 그룹이 올바르게 형성되어 있고 구현 내 가정을 준수하는지 확인합니다. 현재 샤딩 그룹에 ManualComputationOp 블록 내에 정의된 Value가 포함되어 있으면 해당 그룹의 다른 모든 값이 동일한 블록에 있어야 한다고 어설션합니다.