Optimum 文件

最佳化

您正在檢視的是需要從原始碼安裝。如果您想透過常規的 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

最佳化

轉換

class optimum.fx.optimization.Transformation

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

一個 torch.fx 圖轉換。

它必須實現 transform() 方法,並用作可呼叫物件。

__call__

< >

( graph_module: GraphModule lint_and_recompile: bool = True ) torch.fx.GraphModule

引數

  • graph_module (torch.fx.GraphModule) — 要轉換的模組。
  • lint_and_recompile (bool, 預設為 True) — 是否應該對轉換後的模組進行 linting 和重新編譯。當鏈式轉換以僅執行一次此操作時,可以將其設定為 False

返回

torch.fx.GraphModule

轉換後的模組。

get_transformed_nodes

< >

( graph_module: GraphModule ) List[torch.fx.Node]

引數

  • graph_module (torch.fx.GraphModule) — 要獲取節點的 graph_module。

返回

List[torch.fx.Node]

給出由該轉換轉換的節點列表。

mark_as_transformed

< >

( node: Node )

引數

  • node (torch.fx.Node) — 要標記為已轉換的節點。

將一個節點標記為已透過此轉換進行轉換。

transform

< >

( graph_module: GraphModule ) torch.fx.GraphModule

引數

  • graph_module (torch.fx.GraphModule) — 要轉換的模組。

返回

torch.fx.GraphModule

轉換後的模組。

transformed

< >

( node: Node ) bool

引數

  • node (torch.fx.Node) — 要檢查的節點。

返回

布林值

指定節點是否已透過此轉換進行轉換。

可逆轉換

class optimum.fx.optimization.ReversibleTransformation

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

一個可逆的 torch.fx 圖轉換。

它必須實現 transform()reverse() 方法,並用作可呼叫物件。

__call__

< >

( graph_module: GraphModule lint_and_recompile: bool = True reverse: bool = False ) torch.fx.GraphModule

引數

  • graph_module (torch.fx.GraphModule) — 要轉換的模組。
  • lint_and_recompile (bool, 預設為 True) — 是否應該對轉換後的模組進行 linting 和重新編譯。當鏈式轉換以僅執行一次此操作時,可以將其設定為 False
  • reverse (bool, 預設為 False) — 如果為 True,則執行反向轉換。

返回

torch.fx.GraphModule

轉換後的模組。

mark_as_restored

< >

( node: Node )

引數

  • node (torch.fx.Node) — 要標記為已恢復的節點。

將節點標記為已恢復到原始狀態。

reverse

< >

( graph_module: GraphModule ) torch.fx.GraphModule

引數

  • graph_module (torch.fx.GraphModule) — 要轉換的模組。

返回

torch.fx.GraphModule

反向轉換的模組。

optimum.fx.optimization.compose

< >

( *args: Transformation inplace: bool = True )

引數

  • args (Transformation) — 要組合的轉換。
  • inplace (bool, 預設為 True) — 結果轉換是否應該就地執行,或者建立一個新的圖模組。

組合一系列轉換。

示例

>>> from transformers import BertModel
>>> from transformers.utils.fx import symbolic_trace
>>> from optimum.fx.optimization import ChangeTrueDivToMulByInverse, MergeLinears, compose

>>> model = BertModel.from_pretrained("bert-base-uncased")
>>> traced = symbolic_trace(
...     model,
...     input_names=["input_ids", "attention_mask", "token_type_ids"],
... )
>>> composition = compose(ChangeTrueDivToMulByInverse(), MergeLinears())
>>> transformed_model = composition(traced)

轉換

class optimum.fx.optimization.MergeLinears

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

將相同輸入的線性層合併為一個大線性層的轉換。

示例

>>> from transformers import BertModel
>>> from transformers.utils.fx import symbolic_trace
>>> from optimum.fx.optimization import MergeLinears

>>> model = BertModel.from_pretrained("bert-base-uncased")
>>> traced = symbolic_trace(
...     model,
...     input_names=["input_ids", "attention_mask", "token_type_ids"],
... )
>>> transformation = MergeLinears()
>>> transformed_model = transformation(traced)
>>> restored_model = transformation(transformed_model, reverse=True)

class optimum.fx.optimization.FuseBiasInLinear

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

將偏差融合到 torch.nn.Linear 中的權重的轉換。

示例

>>> from transformers import BertModel
>>> from transformers.utils.fx import symbolic_trace
>>> from optimum.fx.optimization import FuseBiasInLinear

>>> model = BertModel.from_pretrained("bert-base-uncased")
>>> traced = symbolic_trace(
...     model,
...     input_names=["input_ids", "attention_mask", "token_type_ids"],
... )
>>> transformation = FuseBiasInLinear()
>>> transformed_model = transformation(traced)
>>> restored_model = transformation(transformed_model, reverse=True)

class optimum.fx.optimization.ChangeTrueDivToMulByInverse

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

當分母為靜態時,將 true除法節點更改為乘以逆節點的轉換。例如,在注意力層中,縮放因子有時就是這種情況。

示例

>>> from transformers import BertModel
>>> from transformers.utils.fx import symbolic_trace
>>> from optimum.fx.optimization import ChangeTrueDivToMulByInverse

>>> model = BertModel.from_pretrained("bert-base-uncased")
>>> traced = symbolic_trace(
...     model,
...     input_names=["input_ids", "attention_mask", "token_type_ids"],
... )
>>> transformation = ChangeTrueDivToMulByInverse()
>>> transformed_model = transformation(traced)
>>> restored_model = transformation(transformed_model, reverse=True)

class optimum.fx.optimization.FuseBatchNorm2dInConv2d

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

將 `nn.Conv2d` 後面的 `nn.BatchNorm2d` 融合到一個 `nn.Conv2d` 中的轉換。只有當卷積的唯一後續節點是批歸一化時,才會進行融合。

例如,在以下情況下將不會進行融合:

     Conv2d
     /   \
    /     \
ReLU   BatchNorm2d

示例

>>> from transformers.utils.fx import symbolic_trace
>>> from transformers import AutoModelForImageClassification

>>> from optimum.fx.optimization import FuseBatchNorm2dInConv2d

>>> model = AutoModelForImageClassification.from_pretrained("microsoft/resnet-50")
>>> model.eval()
>>> traced_model = symbolic_trace(
...     model,
...     input_names=["pixel_values"],
...     disable_check=True
... )

>>> transformation = FuseBatchNorm2dInConv2d()
>>> transformed_model = transformation(traced_model)

class optimum.fx.optimization.FuseBatchNorm1dInLinear

< >

( )

引數

  • preserves_computation (bool, 預設為 False) — 轉換是否保留圖計算。如果為 True,則原始圖和轉換後的圖應產生相同的輸出。

將 `nn.Linear` 之後或之前的 `nn.BatchNorm1d` 融合到一個 `nn.Linear` 中的轉換。只有當線性層的唯一後續節點是批歸一化,或者批歸一化的唯一後續節點是線性層時,才會進行融合。

例如,在以下情況下將不會進行融合:

     Linear
     /   \
    /     \
ReLU   BatchNorm1d

示例

>>> from transformers.utils.fx import symbolic_trace
>>> from transformers import AutoModel

>>> from optimum.fx.optimization import FuseBatchNorm1dInLinear

>>> model = AutoModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> model.eval()
>>> traced_model = symbolic_trace(
...     model,
...     input_names=["input_ids", "attention_mask", "pixel_values"],
...     disable_check=True
... )

>>> transformation = FuseBatchNorm1dInLinear()
>>> transformed_model = transformation(traced_model)
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.