Optimum 文档

优化

您正在查看 main 版本,该版本需要从源码安装。如果您想要常规 pip 安装,请查看最新的稳定版本 (v1.23.1)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

优化

Transformation

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) — 是否应该对转换后的模块进行 lint 和重新编译。当将转换链接在一起以仅执行一次此操作时,可以将其设置为 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) — 要检查的节点。

返回值

bool

指定节点是否由此转换转换。

可逆转换

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) — 是否应该对转换后的模块进行 lint 和重新编译。当将转换链接在一起以仅执行一次此操作时,可以将其设置为 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,则原始图和转换后的图应生成相同的输出。

当分母是静态的时,将 truediv 节点更改为乘以倒数节点的转换。例如,注意力层中的缩放因子有时就是这种情况。

示例

>>> 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.BatchNorm2d 融合到跟随 nn.Conv2d 的单个 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.Linearnn.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 上更新