快捷方式

WandaSparsifier

class torchao.sparsity.WandaSparsifier(sparsity_level: float = 0.5, semi_structured_block_size: Optional[int] = None)[原始碼]

Wanda 稀疏化器

Wanda(權重和啟用剪枝)是一種啟用感知的剪枝方法,首次提出於 https://arxiv.org/abs/2306.11695。該稀疏化器根據輸入啟用的範數與權重幅度的乘積來移除權重。

該稀疏化器由三個變數控制:1. sparsity_level 定義了將被歸零的稀疏塊的數量;

引數:
  • sparsity_level – 目標稀疏度級別;

  • model – 要進行稀疏化的模型;

prepare(model: Module, config: List[Dict]) None[原始碼]

透過新增引數化來準備模型。

注意

The model is modified inplace. If you need to preserve the original
model, use copy.deepcopy.
squash_mask(params_to_keep: Optional[Tuple[str, ...]] = None, params_to_keep_per_layer: Optional[Dict[str, Tuple[str, ...]]] = None, *args, **kwargs)[原始碼]

將稀疏掩碼壓縮到相應的張量中。

如果設定了 params_to_keepparams_to_keep_per_layer,則模組將附加一個 sparse_params 字典。

引數:
  • params_to_keep – 要在模組中儲存的鍵列表,或者表示將儲存稀疏性引數的模組和鍵的字典

  • params_to_keep_per_layer – 指定特定層應儲存的引數的字典。字典中的鍵應為模組的完全限定名(fqn),而值應為一個字串列表,其中包含要在 sparse_params 中儲存的變數名

示例

>>> # xdoctest: +SKIP("locals are undefined")
>>> # Don't save any sparse params
>>> sparsifier.squash_mask()
>>> hasattr(model.submodule1, 'sparse_params')
False
>>> # Keep sparse params per layer
>>> sparsifier.squash_mask(
...     params_to_keep_per_layer={
...         'submodule1.linear1': ('foo', 'bar'),
...         'submodule2.linear42': ('baz',)
...     })
>>> print(model.submodule1.linear1.sparse_params)
{'foo': 42, 'bar': 24}
>>> print(model.submodule2.linear42.sparse_params)
{'baz': 0.1}
>>> # Keep sparse params for all layers
>>> sparsifier.squash_mask(params_to_keep=('foo', 'bar'))
>>> print(model.submodule1.linear1.sparse_params)
{'foo': 42, 'bar': 24}
>>> print(model.submodule2.linear42.sparse_params)
{'foo': 42, 'bar': 24}
>>> # Keep some sparse params for all layers, and specific ones for
>>> # some other layers
>>> sparsifier.squash_mask(
...     params_to_keep=('foo', 'bar'),
...     params_to_keep_per_layer={
...         'submodule2.linear42': ('baz',)
...     })
>>> print(model.submodule1.linear1.sparse_params)
{'foo': 42, 'bar': 24}
>>> print(model.submodule2.linear42.sparse_params)
{'foo': 42, 'bar': 24, 'baz': 0.1}
update_mask(module: Module, tensor_name: str, sparsity_level: float, **kwargs) None[原始碼]

WandaSparsifier 的剪枝函式

首先在 act_per_input 變數中檢索啟用統計資訊。然後計算 Wanda 剪枝指標。最後,透過在當前整個層中比較此指標來對權重矩陣進行剪枝。

文件

訪問 PyTorch 的綜合開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源