-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 和 src集分析,將網格指派給每個未使用的運算、函式輸出和函式輸入。
這個階段會使用 use_set 和 src_set 資訊,建立 AssignOps 或變更型別,將網格指派給函式主體葉節點 (即未使用的計算結果、未使用的函式引數和函式輸出)。
為進行分析,我們也會將特定中介值視為葉節點。也就是說,mpmd.reduce 和 mpmd.broadcast 的運算元會視為葉節點,並在這些節點上建立指派/取消指派配對。
這項指派作業會清除所有非葉節點運算的 use_set,因為先前註解的用途會過時,推斷縮減運算會變更某些值的 use_set:初始 use_set 傳播不知道縮減運算,但現在我們已推斷縮減運算,傳播會有所不同。
如果葉節點作業的 use 和 src 集未正確填入,這項傳遞作業就會失敗並發出錯誤。
先決條件:每個作業都有非空白的 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,或是定義完善的使用集。 - 對於可能是等量指派限制一部分的進入點函式任何輸出內容
o:o的類型為 MeshTensorType,或是定義完善的 src 和 use 集。
如果值的明確定義用途集包含值 (遞移) 指派給的所有網格 (透過 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
將註解的 reduce 作業轉換為 mpmd.reduce 作業,並將 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
_Initializes the src_set for UnassignOps and func args and propagates the srcset.
這個傳遞會初始化 src_set 並傳播,在圖表中填入 src_set 資訊。
前提條件:如要讓函式引數含有 src_sets,必須填入 use_set。
初始化:UnassignOp 的 src_set 會設為指派的網格。函式引數的 src_set 會設為其 use_set。
傳播:src_set 會從運算元向前傳播至運算子本身,並取運算元的交集。如需詳細資訊,請參閱 PropagateSrcSet。
-mpmd-infer-mesh-populate-use-set
_Initializes the use_set for AssignOps and propagates the useset.
這個傳遞會初始化 use_set 並向後傳播,在圖表中填入 use_set 資訊。
初始化:AssignOp 的 use_set 會設為其指派的網格。
傳播:use_sets 會從使用者向後傳播至運算本身,並採用使用者的聯集。根據定義,op 的 use_set 是其使用者 use_set 的聯集,因為 use_set 是遞移用途的集合。
-mpmd-infer-mesh-rewrite-using-analysis
_Rewrites ops according to the useset.
這個傳遞會使用 use_set 和 src_set 分析,將無網格作業包裝在片段中,藉此指派作業。
此外,由於之後不再需要分析,因此也會移除 use_set 和 src_set 屬性,以進行清理。
先決條件:每個運算都有 use_set,也就是分析已完成。先決條件:非進入點函式的每個引數,至少會由一個非終止符運算使用。
TODO: jupvfranco - consider renaming this pass given that it doesn't depend on the analysis so much anymore.
選項
-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
確認網狀架構指派作業不需要額外轉移。
這個階段會驗證所有無網格作業是否都能指派網格,且不會引入任何額外轉移。
對於非函式運算的無網格運算,如果出現下列情況,就會發生錯誤:
- 特定運算的 src_set 中不含 use_set,也就是需要轉移。
如果是 func 作業,檢查 func 引數的上述條件就已足夠,因為 func 會傳回無網格作業或區塊引數。
選項
-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
_Validates that every meshless op has a non-empty srcset.
這項傳遞會驗證所有無網格的運算,檢查運算是否可指派至某處。也就是說,對於非 func 運算的無網格運算,如果運算的 src_set 為空,或推斷為跨網格縮減,但未轉換,就會發生錯誤。這是指派功能假期的先決條件。
如果是 func 作業,檢查 func 引數的上述條件就已足夠,因為 func 會傳回無網格作業或區塊引數。
這必須是模組層級的傳遞,因為如果呼叫端發生錯誤,我們想列印呼叫者。
前置條件:在執行此階段前,應先轉換跨網格縮減作業,以減少作業。
選項
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Inlines any user-exposed mpmd op nested in a namedcomputation.
內嵌任何巢狀結構的 named_computation、named_tensor、broadcast 和 reduce op,並檢查其網格指派 (如有定義) 是否與父項相符。
選項
-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
在具名運算以外,複製作業可忽略。
只要有名稱的計算使用微不足道的作業 (即單一結果、零運算元作業),就會在這些作業之外複製,並以複製的作業取代有名稱的計算結果。這是必要步驟,因為如果指派給不同網格的具名運算使用這類結果,可能會導致網格推論衝突。套用此傳遞內容後,網格推論即可複製這些可忽略的作業。
這項傳遞作業完全不會變更具名計算。
-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
將網格指派給使用者定義的作業。
建立傳遞內容,並視需要將 mpmd.named_tensor 指派給 Assign(Unassign(%v)) (視 assignment 中是否有項目而定),以及將每個 named_computation 對應至網格,並使用使用者定義的 named_computation 與網格名稱之間的對應。也就是說,要將每個 named_computation 替換為 Fragment,並為這些 Fragment 的運算元建立 AssignOps,為結果建立 UnassignOps。現在導入的模式 Assign(Unassign(%v)) 會重新編寫為 Transfer(%v)。這個傳遞作業完成後,就不會再有 named_computation/named_tensor 作業。
必要條件:所有 named_computations 和 named_tensors 都必須位於函式的頂層。
選項
-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
簡化具名運算作業的輸入和輸出。
簡化每個具名計算,具體來說,這項服務:
- 重複的結果和對應的回傳值;
- 重複資料的運算元和對應的區塊引數;
- 移除對應的回傳運算元是 op 的區塊引數的結果;
- 移除對應的區塊引數不再使用的運算元 (或一開始就沒有任何運算元);以及
- 移除未使用的結果。
- 將具名運算中的
arg -> stablehlo.optimization_barrier -> return模式替換為arg -> return模式,進一步簡化。
-mpmd-validate-named-ops-in-mpmd-func
驗證具名作業是否只巢狀內嵌在 mpmd 函式中。
驗證 NamedComputationOp 和 NamedTensorOp 是否只巢狀內嵌於 mpmd 函式,也就是具有拓撲屬性的函式。