-mpmd-copy-topology-from-main
기본 함수의 토폴로지를 mpmd.call에서 참조하는 함수에 복사합니다.
기본 함수의 토폴로지 속성을 mpmd.call에서 참조하는 모든 함수에 복사합니다. 또한 진입점 함수로 오인되지 않도록 mpmd.call 호출자를 비공개 공개 상태로 설정합니다.
-mpmd-enforce-input-output-equisharding
MPMD 함수의 동일한 샤딩 제약 조건을 적용합니다.
필요한 경우 TransferOps를 도입하여 MPMD 함수의 입력-출력 동일한 샤딩 제약 조건을 적용합니다.
옵션
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
MPMD 토폴로지를 기반으로 샤딩된 메시를 생성합니다.
이 패스는 기존의 샤딩된 메시 작업을 삭제하고 MPMD 토폴로지를 기반으로 하는 작업으로 대체합니다. 또한 새 메시 작업을 참조하도록 텐서 샤딩을 업데이트합니다.
-mpmd-infer-mesh-assign-mesh-func-leaves
_use_set 및 srcset 분석을 사용하여 사용되지 않는 각 계산, 함수 출력, 함수 입력에 메시를 할당합니다.
이 패스는 AssignOps를 만들거나 use_set 및 src_set 정보를 사용하여 유형을 변경하여 함수 본문 리프 (즉, 사용되지 않는 계산, 사용되지 않는 함수 인수, 함수 출력의 결과)에 메시를 할당합니다.
또한 분석을 위해 특정 중간 값을 리프로 처리합니다. 즉, mpmd.reduce 및 mpmd.broadcast의 피연산자는 리프로 처리되며 할당-할당 해제 쌍이 생성됩니다.
이 할당은 모든 비리프 작업의 use_set을 지웁니다. 이전 주석 처리된 사용은 축소 작업을 추론하면 일부 값의 use_set이 변경되므로 오래된 상태가 됩니다. 초기 use_set 전파는 축소 작업을 인식하지 못하지만 이제 축소 작업을 추론했으므로 전파가 달라집니다.
이 패스는 리프 작업에 use- 및 src-sets가 올바르게 채워지지 않으면 오류를 발생시키면서 실패합니다.
사전 조건: 모든 작업에 비어 있지 않은 src-set이 있거나 전송을 추론합니다.
옵션
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
입력-출력 할당 제약 조건에 따라 입력 및 출력에 메시를 할당합니다.
이 패스는 입력-출력 동일한 할당 제약 조건을 사용하여 입력과 출력을 모두 동일한 메시에 할당합니다.
입력이 다른 메시로 전송되는지 여부와 관계없이 입력이 동일한 메시에 있음을 보장합니다. 하지만 이 패스 후에는 populate-src-set을 실행해서는 안 됩니다.
필수:
- 동일한 할당 제약 조건의 일부일 수 있는 진입점 함수의 모든 입력
i에 대해i에는 MeshTensorType 또는 잘 정의된 use-set이 있습니다. - 동일한 할당 제약 조건의 일부일 수 있는 진입점 함수의 모든 출력
o에 대해o에는 MeshTensorType 유형 또는 잘 정의된 src- 및 use-sets가 있습니다.
여기서 값의 잘 정의된 use-set에는 mpmd.assign 작업을 통해 값이 (전이적으로) 할당되는 모든 메시가 포함되며 다른 메시지는 포함되지 않습니다. 잘 정의된 src-set에는 텐서가 상주할 수 있는 모든 메시지가 포함되며 다른 메시지는 포함되지 않습니다.
진입점 함수에서만 실행되지만 실행되기 전에 기존 함수의 모든 패스를 완료해야 하므로 모듈 작업 패스로 만듭니다. 예를 들어 이를 EntryPointFunctionPass로 만들면 패스 관리자가 진입점 함수가 아닌 함수에서 유효성 검사가 완료되기 전에 이 패스를 실행할 수 있습니다.
옵션
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
주석 처리된 축소 작업을 mpmd.reduce 작업으로 변환하고 축소 작업 체인을 평면화합니다.
주석 처리된 축소 작업을 mpmd.reduce 작업으로 변환하고 이러한 축소 작업 체인을 평면화합니다.
기호:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
옵션
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
패턴 메시 추론 후 최종 정리를 적용합니다.
옵션
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_UnassignOps 및 함수 인수의 src_set을 초기화하고 srcset을 전파합니다.
이 패스는 src_set을 초기화하고 전파하여 src_set 정보로 그래프를 채웁니다.
사전 조건: 함수 인수에 src_sets가 있으려면 use_set을 채워야 합니다.
초기화: UnassignOp의 src_set은 할당하는 메시로 설정됩니다. 함수 인수의 src_set은 use_set으로 설정됩니다.
전파: src_sets는 피연산자에서 작업 자체로 앞으로 전파되어 피연산자의 교집합을 가져옵니다. 자세한 내용은 PropagateSrcSet을 참고하세요.
-mpmd-infer-mesh-populate-use-set
_AssignOps의 use_set을 초기화하고 useset을 전파합니다.
이 패스는 use_set을 초기화하고 뒤로 전파하여 use_set 정보로 그래프를 채웁니다.
초기화: AssignOp의 use_set은 할당하는 메시로 설정됩니다.
전파: use_sets는 사용자에서 작업 자체로 뒤로 전파되어 사용자의 합집합을 가져옵니다. use_set은 전이적 사용의 집합이므로 작업의 use_set은 정의에 따라 사용자의 use_sets의 합집합입니다.
-mpmd-infer-mesh-rewrite-using-analysis
_useset.에 따라 작업을 재작성합니다._
이 패스는 use_set 및 src_set 분석을 사용하여 프래그먼트로 래핑하여 메시가 없는 작업을 할당합니다.
또한 분석이 더 이상 필요하지 않으므로 정리의 일부로 use_set 및 src_set 속성을 삭제합니다.
사전 조건: 모든 작업에 use_set이 있습니다. 즉, 분석이 완료되었습니다. 사전 조건: 진입점 함수가 아닌 함수의 모든 인수는 종료자가 아닌 작업 하나 이상에서 사용됩니다.
할 일: jupvfranco - 더 이상 분석에 크게 의존하지 않으므로 이 패스의 이름을 바꾸는 것이 좋습니다.
옵션
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
메시 할당에 추가 전송이 필요하지 않음을 확인합니다.
이 패스는 추가 전송을 도입하지 않고도 모든 메시가 없는 작업에 메시 할당이 가능한지 확인합니다.
함수 작업이 아닌 메시가 없는 작업의 경우 다음과 같은 경우 오류가 발생합니다.
- use_set이 지정된 작업의 src_set에 포함되지 않습니다. 즉, 전송이 필요합니다.
함수 작업의 경우 함수가 메시가 없는 작업 또는 블록 인수를 반환하므로 함수 인수에 대해 위의 조건을 확인하는 것으로 충분합니다.
옵션
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_모든 메시가 없는 작업에 비어 있지 않은 srcset.이 있는지 확인합니다._
이 패스는 모든 메시가 없는 작업을 검증하여 작업이 어딘가에 할당될 수 있는지 확인합니다. 즉, 함수 작업이 아닌 메시가 없는 작업의 경우 작업에서 src_set이 비어 있거나 교차 메시 축소로 추론되었지만 변환되지 않은 경우 오류가 발생합니다. 이는 함수 리프 할당의 기본 요건입니다.
함수 작업의 경우 함수가 메시가 없는 작업 또는 블록 인수를 반환하므로 함수 인수에 대해 위의 조건을 확인하는 것으로 충분합니다.
호출자에서 오류가 발생한 경우 호출자를 출력하려고 하므로 모듈 수준에서 패스해야 합니다.
사전 조건: 이 패스를 실행하기 전에 교차 메시 축소를 축소 작업으로 변환해야 합니다.
옵션
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_이름이 지정된computation에 중첩된 사용자 노출 mpmd 작업을 인라인합니다.
이름이 지정된 _computation에 중첩된 이름이 지정된 _computation, 이름이 지정된 _tensor, broadcast 및 reduce 작업을 인라인하여 메시 할당 (정의된 경우)이 상위 항목의 메시 할당과 일치하는지 확인합니다.
옵션
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
이름이 지정된 계산 외부에서 무시할 수 있는 작업을 클론합니다.
무시할 수 있는 작업(즉, 단일 결과, 피연산자가 0인 작업)을 이름이 지정된 계산 외부에서 계산의 반환 작업에서 사용할 때마다 클론하여 이름이 지정된 _computation의 결과를 클론으로 대체합니다. 이러한 결과가 서로 다른 메시에 할당된 이름이 지정된 계산에서 사용되는 경우 메시 추론 충돌이 발생할 수 있으므로 필요합니다. 이 패스를 적용하면 메시 추론에서 이러한 무시할 수 있는 작업을 클론할 수 있습니다.
이 패스는 이름이 지정된 계산을 전혀 변경하지 않습니다.
-mpmd-introduce-transfers
사용자 메시 할당을 기반으로 데이터 전송을 만듭니다.
사용자 메시 할당을 기반으로 전송 작업을 도입하는 패스를 만듭니다. 여기에는 다음이 포함됩니다.
- UnassignOp의 결과가 나중에 호출자에서 할당되는 경우 UnassignOp를 mpmd 호출로 푸시합니다.
- UnassignOp의 AssignOp를 TransferOp로 대체합니다.
- 프래그먼트 간에 메시가 없는 추가가 있는 경우 추가를 사용하는 메시에 할당하고 전송을 도입합니다.
-mpmd-map-input-output-to-mesh
함수 입력 및 출력에 메시를 할당합니다.
사용자 정의 메시 할당이 지정된 함수 입력/출력을 메시에 매핑하는 패스를 만듭니다.
입력 인수의 경우 이 패스는 다음을 실행합니다.
- 메시에 배치해야 하는 입력 텐서를 메시 텐서로 전송합니다.
- 함수 서명을 업데이트합니다.
- 텐서가 사용되기 전에 mpmd.unassign을 추가합니다.
출력 인수의 경우 이 패스는 텐서가 반환되기 전에 mpmd.assign을 추가하고 함수 서명을 업데이트합니다.
필수: 각 입력/출력 색인이 유효하고 각 매핑된 메시가 토폴로지의 유효한 메시입니다.
옵션
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
사용자 정의 작업에 메시를 할당합니다.
Assign(Unassign(%v))에 mpmd.named_tensor를 선택적으로 할당하는 패스를 만들고(assignment에 항목이 있는지에 따라 다름) 이름이 지정된 각 _computation을 메시 이름과 이름이 지정된 _computation 간의 사용자 정의 매핑을 사용하여 메시에 매핑합니다. 즉, 이름이 지정된 각 _computation을 프래그먼트로 대체하고 이러한 프래그먼트의 피연산자에 AssignOps를 만들고 결과에 UnassignOps를 만듭니다. 이제 도입된 패턴 Assign(Unassign(%v))이 Transfer(%v)로 재작성됩니다.
이 패스 후에는 이름이 지정된 _computation/이름이 지정된 _tensor 작업이 존재하지 않습니다.
필수: 모든 이름이 지정된 _computation 및 이름이 지정된 _tensor가 함수의 최상위 수준에 있어야 합니다.
옵션
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
이름이 지정된 계산 작업의 입력 및 출력을 간소화합니다.
이름이 지정된 각 계산을 독립적으로 간소화합니다. 특히 다음을 실행합니다.
- 결과와 해당 반환 값을 중복 삭제합니다.
- 피연산자와 해당 블록 인수를 중복 삭제합니다.
- 해당 반환 피연산자가 작업의 블록 인수인 결과를 삭제합니다.
- 해당 블록 인수에 더 이상 사용이 없거나 처음부터 사용이 없었던 피연산자를 삭제합니다.
- 사용되지 않는 결과를 삭제합니다.
- 이름이 지정된 계산 내에서
arg -> stablehlo.optimization_barrier -> return`arg -> stablehlo.optimization_barrier -> return` 패턴을arg -> return`arg -> return` 패턴으로 대체하여 추가 간소화를 허용합니다.
-mpmd-validate-named-ops-in-mpmd-func
이름이 지정된 작업이 mpmd 함수에만 중첩되어 있는지 확인합니다.
NamedComputationOp 및 NamedTensorOp가 토폴로지 속성이 있는 함수인 mpmd 함수에만 중첩되어 있는지 확인합니다.