转换

模型剪枝的主要API和入口点。

函数

export

导出一个修剪后的子网到一个常规模型。

convert

将常规的PyTorch模型转换为支持设计空间优化的模型。

convert(model, mode)

将常规的PyTorch模型转换为支持设计空间优化的模型。

Parameters:
  • 模型 (模块 | 类型[模块] | 元组 | 可调用对象) – 一个类似模型的对象。可以是一个nn.Module、一个模型类类型,或者一个元组。 元组必须是以下形式之一:(model_cls,)(model_cls, args)(model_cls, args, kwargs)。 模型将被初始化为 model_cls(*args, **kwargs)

  • mode (_ModeDescriptor | str | List[_ModeDescriptor | str] | List[Tuple[str, Dict[str, Any]]]) –

    一个(或多个)字符串或模式,或包含模式及其配置的元组列表,用于指示转换过程中所需的模式(和配置)。模式为模型优化设置不同的算法。以下模式可用:

    • "autonas": model 将被转换为搜索空间,并设置为自动执行基于 AutoNAS 的模型训练、评估和搜索所需的操作。该模式的配置在 AutoNASConfig 中描述。

    如果模式参数指定为字典,则键应指示模式,值指定每个模式的配置。如果未提供,则将使用默认配置。

Returns:

一个保留了原始权重的转换模型,可用于模型优化。

Return type:

模块

注意

请注意,在转换过程中不支持模型包装器(如DataParallel/DistributedDataParallel)。请在转换过程之后包装模型。

注意

convert() 依赖于 monkey patching 来增强 forward()eval()train() 方法以及增强单个模块以使其动态化。这使得转换与这些方法和模块的其他 monkey patch 不兼容!请注意,convert() 仍然完全兼容继承。

注意

  1. 可以使用glob表达式在合格的子模块名称上为各个层自定义配置,例如,如上例中所示的nn.Conv2d

  2. 配置中出现在字典前面的键具有较低的优先级,例如, backbone.stages.1.0.spatial_conv 将具有 out_channels_ratio [0.334, 0.5, 0.667, 1.0],而不是 [1.0]

  3. 也支持没有层限定符的配置条目,例如,如上例中所示的nn.Sequential

  4. 支持在不同层中混合使用带有和不带有层限定符的配置,例如,如上例中所示的nn.Conv2dnn.Sequential。对于特定层类型,仅支持带有或不带有层限定符的配置。

  5. 使用 * 作为匹配任何图层的通配符。

export(model, strict=True, calib=False)

导出一个修剪后的子网到一个常规模型。

Parameters:
  • model (Module) – 要导出的修剪子网。

  • strict (bool) – 当配置不包含所有必要键时引发错误。

  • calib (bool) – 是否校准要导出的子网。

Returns:

当前活动的子网以常规PyTorch模型格式显示。

Return type:

模块

注意

如果模型是一个包装器,例如 DistributedDataParallel,它将被解包,例如, model.module 将被返回。