捷徑

torchrec.optim

Torchrec 優化器

Torchrec 包含一個稱為 KeyedOptimizer 的特殊優化器。KeyedOptimizer 使用有意義的鍵公開 state_dict - 它允許載入 torch.tensor 和 ShardedTensor,並禁止將空狀態載入已初始化的 KeyedOptimizer,反之亦然。

它還包含:- 幾個包裝 KeyedOptimizer 的模組,稱為 CombinedOptimizer 和 OptimizerWrapper - RecSys 中使用的優化器:例如 rowwise adagrad/adam/etc

torchrec.optim.clipping

class torchrec.optim.clipping.GradientClipping(value)

基底: Enum

列舉。

NONE = 'none'
NORM = 'norm'
VALUE = 'value'
class torchrec.optim.clipping.GradientClippingOptimizer(optimizer: KeyedOptimizer, clipping: GradientClipping = GradientClipping.NONE, max_gradient: float = 0.1, norm_type: Union[float, str] = 2.0)

基底: OptimizerWrapper

在進行優化步驟之前裁剪梯度。

參數::
  • optimizer (KeyedOptimizer) – 要包裝的優化器

  • clipping (GradientClipping) – 如何裁剪梯度

  • max_gradient (float) – 裁剪的最大值

  • norm_type (floatstr) – 使用的 p-範數的類型。對於無窮範數,可以是 'inf'

step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

torchrec.optim.fused

class torchrec.optim.fused.EmptyFusedOptimizer

基底: FusedOptimizer

沒有操作步驟且沒有要優化的參數的融合優化器類別

step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

zero_grad(set_to_none: bool = False) None

重設所有已優化的 torch.Tensor 的梯度。

參數::

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。這通常會減少記憶體佔用空間,並且可以略微提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試存取梯度並對其執行手動操作時,None 屬性或充滿 0 的張量將會有不同的行為。2. 如果使用者在反向傳遞後請求 zero_grad(set_to_none=True),則對於沒有收到梯度的參數,.grad 保證為 None。3. 如果梯度為 0 或 None,torch.optim 優化器會有不同的行為(在其中一種情況下,它會以 0 的梯度執行步驟,而在另一種情況下,它會完全跳過該步驟)。

class torchrec.optim.fused.FusedOptimizer(params: Mapping[str, Union[Tensor, ShardedTensor]], state: Mapping[Any, Any], param_groups: Collection[Mapping[str, Any]])

基底: KeyedOptimizer, ABC

假設權重更新是在反向傳播期間完成的,因此 step() 是無效的。

abstract step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

abstract zero_grad(set_to_none: bool = False) None

重設所有已優化的 torch.Tensor 的梯度。

參數::

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。這通常會減少記憶體佔用空間,並且可以略微提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試存取梯度並對其執行手動操作時,None 屬性或充滿 0 的張量將會有不同的行為。2. 如果使用者在反向傳遞後請求 zero_grad(set_to_none=True),則對於沒有收到梯度的參數,.grad 保證為 None。3. 如果梯度為 0 或 None,torch.optim 優化器會有不同的行為(在其中一種情況下,它會以 0 的梯度執行步驟,而在另一種情況下,它會完全跳過該步驟)。

class torchrec.optim.fused.FusedOptimizerModule

基底: ABC

模組,在反向傳播期間進行權重更新。

abstract property fused_optimizer: KeyedOptimizer

torchrec.optim.keyed

class torchrec.optim.keyed.CombinedOptimizer(optims: List[Union[KeyedOptimizer, Tuple[str, KeyedOptimizer]]])

基底: KeyedOptimizer

將多個 KeyedOptimizers 合併為一個。

旨在為不同的子模組組合不同的優化器

property optimizers: List[Tuple[str, KeyedOptimizer]]
property param_groups: Collection[Mapping[str, Any]]
property params: Mapping[str, Union[Tensor, ShardedTensor]]
post_load_state_dict() None
static prepend_opt_key(name: str, opt_key: str) str
save_param_groups(save: bool) None
property state: Mapping[Tensor, Any]
step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

zero_grad(set_to_none: bool = False) None

重設所有已優化的 torch.Tensor 的梯度。

參數::

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。這通常會減少記憶體佔用空間,並且可以略微提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試存取梯度並對其執行手動操作時,None 屬性或充滿 0 的張量將會有不同的行為。2. 如果使用者在反向傳遞後請求 zero_grad(set_to_none=True),則對於沒有收到梯度的參數,.grad 保證為 None。3. 如果梯度為 0 或 None,torch.optim 優化器會有不同的行為(在其中一種情況下,它會以 0 的梯度執行步驟,而在另一種情況下,它會完全跳過該步驟)。

class torchrec.optim.keyed.KeyedOptimizer(params: Mapping[str, Union[Tensor, ShardedTensor]], state: Mapping[Any, Any], param_groups: Collection[Mapping[str, Any]])

基底: Optimizer

取得參數字典,並按參數鍵公開 state_dict。

此實現比 torch.Optimizer 中的實現更嚴格:它要求實現必須在第一次優化迭代期間完全初始化其狀態,並且它禁止將空狀態加載到已初始化的 KeyedOptimizer 中,反之亦然。

預設情況下,它也不會在 state_dict() 中公開 param_groups。可以透過設定 save_param_groups 旗標來開啟舊行為。原因是在分散式訓練中,並非所有參數都存在於所有 rank 上,我們透過參數來識別 param_group。除此之外,param_groups 通常在訓練初始化期間重新設定,因此將它們儲存為狀態的一部分幾乎沒有意義。

add_param_group(param_group: Any) None

將參數群組新增至 Optimizerparam_groups

這在微調預先訓練的網路時很有用,因為凍結層可以在訓練過程中設定為可訓練並新增至 Optimizer

參數::

param_group (dict) – 指定應最佳化的張量以及特定於群組的最佳化選項。

init_state(sparse_grad_parameter_names: Optional[Set[str]] = None) None

執行虛擬的最佳化器步驟,允許初始化最佳化器狀態,這通常是懶惰的。這讓我們可以從檢查點就地載入最佳化器狀態。

load_state_dict(state_dict: Mapping[str, Any]) None

此實現比 torch.Optimizer 中的實現更嚴格:它要求實現必須在第一次優化迭代期間完全初始化其狀態,並且它禁止將空狀態加載到已初始化的 KeyedOptimizer 中,反之亦然。

由於引入了嚴格性,它讓我們可以
  • 對狀態和 param_groups 執行相容性檢查,從而提高了可用性

  • 透過直接複製到狀態張量來避免狀態重複,例如 optimizer.step() # 確保最佳化器已初始化 sd = optimizer.state_dict() load_checkpoint(sd) # 直接將狀態複製到張量,如果需要,請重新分片 optimizer.load_state_dict(sd) # 替換 param_groups

post_load_state_dict() None
save_param_groups(save: bool) None
state_dict() Dict[str, Any]

返回的狀態和 param_groups 將包含參數鍵,而不是 torch.Optimizer 中的參數索引。這允許實現最佳化器重新分片等進階功能。

還可以處理遵循 PyTorch 狀態協定的類和支援的資料結構。

class torchrec.optim.keyed.KeyedOptimizerWrapper(params: Mapping[str, Union[Tensor, ShardedTensor]], optim_factory: Callable[[List[Union[Tensor, ShardedTensor]]], Optimizer])

基底: KeyedOptimizer

取得參數字典,並按參數鍵公開 state_dict。

方便的包裝器,用於接收 optim_factory 可呼叫對象來建立 KeyedOptimizer

step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

zero_grad(set_to_none: bool = False) None

重設所有已優化的 torch.Tensor 的梯度。

參數::

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。這通常會減少記憶體佔用空間,並且可以略微提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試存取梯度並對其執行手動操作時,None 屬性或充滿 0 的張量將會有不同的行為。2. 如果使用者在反向傳遞後請求 zero_grad(set_to_none=True),則對於沒有收到梯度的參數,.grad 保證為 None。3. 如果梯度為 0 或 None,torch.optim 優化器會有不同的行為(在其中一種情況下,它會以 0 的梯度執行步驟,而在另一種情況下,它會完全跳過該步驟)。

class torchrec.optim.keyed.OptimizerWrapper(optimizer: KeyedOptimizer)

基底: KeyedOptimizer

包裝器,接收 KeyedOptimizer 並且是一個 KeyedOptimizer

GradientClippingOptimizer 和 WarmupOptimizer 等最佳化器的子類別

add_param_group(param_group: Any) None

將參數群組新增至 Optimizerparam_groups

這在微調預先訓練的網路時很有用,因為凍結層可以在訓練過程中設定為可訓練並新增至 Optimizer

參數::

param_group (dict) – 指定應最佳化的張量以及特定於群組的最佳化選項。

load_state_dict(state_dict: Mapping[str, Any]) None

此實現比 torch.Optimizer 中的實現更嚴格:它要求實現必須在第一次優化迭代期間完全初始化其狀態,並且它禁止將空狀態加載到已初始化的 KeyedOptimizer 中,反之亦然。

由於引入了嚴格性,它讓我們可以
  • 對狀態和 param_groups 執行相容性檢查,從而提高了可用性

  • 透過直接複製到狀態張量來避免狀態重複,例如 optimizer.step() # 確保最佳化器已初始化 sd = optimizer.state_dict() load_checkpoint(sd) # 直接將狀態複製到張量,如果需要,請重新分片 optimizer.load_state_dict(sd) # 替換 param_groups

post_load_state_dict() None
save_param_groups(save: bool) None
state_dict() Dict[str, Any]

返回的狀態和 param_groups 將包含參數鍵,而不是 torch.Optimizer 中的參數索引。這允許實現最佳化器重新分片等進階功能。

還可以處理遵循 PyTorch 狀態協定的類和支援的資料結構。

step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

zero_grad(set_to_none: bool = False) None

重設所有已優化的 torch.Tensor 的梯度。

參數::

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。這通常會減少記憶體佔用空間,並且可以略微提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試存取梯度並對其執行手動操作時,None 屬性或充滿 0 的張量將會有不同的行為。2. 如果使用者在反向傳遞後請求 zero_grad(set_to_none=True),則對於沒有收到梯度的參數,.grad 保證為 None。3. 如果梯度為 0 或 None,torch.optim 優化器會有不同的行為(在其中一種情況下,它會以 0 的梯度執行步驟,而在另一種情況下,它會完全跳過該步驟)。

torchrec.optim.warmup

類別 torchrec.optim.warmup.WarmupOptimizer(optimizer: KeyedOptimizer, stages: List[WarmupStage], lr: float = 0.1, lr_param: str = 'lr', param_name: str = '__warmup')

基底: OptimizerWrapper

根據時間表調整學習率。

參數::
  • optimizer (KeyedOptimizer) – 要包裝的優化器

  • stages (List[WarmupStage]) – 要經歷的階段

  • lr (float) – 初始學習率

  • lr_param (str) – 參數群組中的學習率參數。

  • param_name – 用於保存預熱狀態的虛擬參數名稱。

post_load_state_dict() None
step(closure: Optional[Any] = None) None

執行單一優化步驟以更新參數。

參數::

closure (Callable) – 重新評估模型並返回損失的閉包。對於大多數優化器來說是可選的。

備註

除非另有說明,否則此函數不應修改參數的 .grad 欄位。

類別 torchrec.optim.warmup.WarmupPolicy(value)

基底: Enum

列舉。

CONSTANT = 'constant'
COSINE_ANNEALING_WARM_RESTARTS = 'cosine_annealing_warm_restarts'
INVSQRT = 'inv_sqrt'
LINEAR = 'linear'
NONE = 'none'
POLY = 'poly'
STEP = 'step'
類別 torchrec.optim.warmup.WarmupStage(policy: torchrec.optim.warmup.WarmupPolicy = <WarmupPolicy.LINEAR: 'linear'>, max_iters: int = 1, value: float = 1.0, lr_scale: float = 1.0, decay_iters: int = -1, sgdr_period: int = 1)

基底: object

decay_iters: int = -1
lr_scale: float = 1.0
max_iters: int = 1
policy: WarmupPolicy = 'linear'
sgdr_period: int = 1
value: float = 1.0

模組內容

Torchrec 優化器

Torchrec 包含一個稱為 KeyedOptimizer 的特殊優化器。KeyedOptimizer 使用有意義的鍵公開 state_dict - 它允許載入 torch.tensor 和 ShardedTensor,並禁止將空狀態載入已初始化的 KeyedOptimizer,反之亦然。

它還包含:- 幾個包裝 KeyedOptimizer 的模組,稱為 CombinedOptimizer 和 OptimizerWrapper - RecSys 中使用的優化器:例如 rowwise adagrad/adam/etc

文件

取得 PyTorch 的完整開發人員文件

查看文件

教學課程

取得適用於初學者和進階開發人員的深入教學課程

查看教學課程

資源

尋找開發資源並獲得您的問題解答

查看資源