Optimum文档

优化

您正在查看版本,它需要从源安装。如果您想使用常规pip安装,请检查最新稳定版本(v1.21.2)。
Hugging Face's logo
加入Hugging Face社区

并获取增强的文档体验访问权限

以便开始

优化

转换

optimum.fx.optimization.转换

< >

( )

参数

  • 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) — 是否应对转换的模块进行代码审查和重新编译。在连用转换时,可以设置为 False 以只执行一次此操作。

返回

torch.fx.GraphModule

转换后的模块。

get_transformed_nodes

< >

( graph_module: 图模模块 ) List[torch.fx.Node]

参数

  • graph_module (torch.fx.GraphModule) — 获取节点的图模模块。

返回

List[torch.fx.Node]

提供由变换执行变换的节点列表。

标记为变换

< >

( node: 节点 )

参数

  • 节点 (节点torch.fx.Node) —— 标记为已转换的节点。

将节点标记为该转换的转换。

转换

< >

( 图模块: 图模块 ) 图模块 (torch.fx.GraphModule)

参数

  • 图模块 (图模块torch.fx.GraphModule) —— 要转换的模块。

返回

torch.fx.GraphModule

转换后的模块。

已转换

< >

( node: Node ) bool

参数

  • node (torch.fx.Node) — The node to check.

返回

bool

指定节点是否被此转换所转换。

可逆转换

class optimum.fx.optimization.ReversibleTransformation

< >

( )

参数

  • preserves_computation (布尔类型,默认为 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: 节点 )

参数

  • 节点 (torch.fx.Node) — 要标记为已恢复的节点。

将节点标记为已恢复到其原始状态。

reverse

< >

( 图模块: 图模块 ) 图模块 (torch.fx.GraphModule)

参数

  • graph_module (torch.fx.GraphModule) — 需要转换的模块。

返回

torch.fx.GraphModule

反向转换的模块。

optimum.fx.optimization.compose

< >

( *args: Transformation inplace: bool = True )

参数

  • args (Transformation) — 要组合在一起的转换。
  • 就地修订 (布尔值,默认为 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)

变换

optimum.fx.optimization.MergeLinears

< >

( )

参数

  • preserves_computation (bool, defaults to 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)

optimum.fx.optimization.FuseBiasInLinear

< >

( )

参数

  • preserves_computation (bool, defaults to 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)

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)

optimum.fx.optimization.FuseBatchNorm2dInConv2d

< >

( )

参数

  • preserves_computation (bool, 默认值为 False) —— 该转换是否保留图计算。如果为 True,原始和转换后的图应生成相同的输出。

将跟随 nn.Conv2dnn.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)

optimum.fx.optimization.FuseBatchNorm1dInLinear

< source >

( )

参数

  • 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上更新