-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
가 포함되어 있으면 해당 그룹의 다른 모든 값이 동일한 블록에 있어야 한다고 어설션합니다.