

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用卸載
<a name="model-parallel-extended-features-pytorch-activation-offloading"></a>

當開啟啟用檢查點與管道平行處理，且微批次數量大於一時，*啟用卸載*是可進一步減少記憶體使用量的附加功能。啟用卸載會以非同步方式對應目前未在 CPU 執行的微批次來移動檢查點啟用。在 GPU 需要啟用以便進行微批次向後傳遞之前，此功能會從 CPU 預先取回已卸載的啟用。

**注意**  
此功能適用 SageMaker 模型平行處理程式庫 v1.6.0 及更高版本的 PyTorch。

## 如何使用啟用卸載
<a name="model-parallel-extended-for-pytorch-activation-offloading"></a>

當**微批次數量大於 1，且已開啟啟用檢查點**時，使用啟用卸載以減少記憶體使用量 (請參閱[啟用檢查點](model-parallel-extended-features-pytorch-activation-checkpointing.md))。當未使用啟用檢查點時，啟用卸載不具任何效果。當僅搭配單一微批次使用時，此作法不會節省記憶體。

若要使用啟用卸載，請在 `modelparallel` 配置設定 `"offload_activations": True`。

啟用卸載會以非同步方式移動 `nn.Sequential` 模組的檢查點啟用至 CPU。透過 PCIe 連結的資料傳輸會與 GPU 運算重疊。在運算特定檢查點層的向前傳遞之後，卸載會立即發生。在特定微批次的向後傳遞需要啟用之前不久，這些啟用就會載回 GPU。CPU-GPU 傳輸以相似方式與運算重疊。

若要調整啟用提早多久載回 GPU，您可以使用設定參數 `"activation_loading_horizon"` (預設值設定為 4，必須為大於 0 的 `int`)。較大的啟用載入時間將導致啟用更早載回 GPU。如果時間太大，可能減少啟用卸載所造成的節省記憶體影響。如果時間太小，則可能無法及時載入啟用，進而減少重疊並降低效能。

**提示**  
對於具超過 1000 億個參數的大型模型，啟用卸載很有幫助。

**設定 SageMaker PyTorch 估算器**

```
mpi_options = {
    "enabled" : True,
    "processes_per_host" : 8,               # 8 processes
    "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none "
}

smp_options = {
    "enabled":True,
    "parameters": {
        "microbatches": 4,
        "pipeline_parallel_degree": 2,    # alias for "partitions"
        "placement_strategy": "cluster",
        "tensor_parallel_degree": 2,      # tp over 2 devices
        "ddp": True,
        "offload_activations": True,
        "activation_loading_horizon": 4   # optional. default is 4.
    }
}
```