

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

# 最佳化
<a name="tutorial-gpu-opt"></a>

為了充分利用您的 GPU，您可以最佳化資料管道及調整深度學習網路。如下圖所述，神經網路的單純或基本實作使用 GPU 的方式可能不一致，而未完全發揮其潛能。當您最佳化您的前處理和資料載入時，您可以降低從 CPU 到 GPU 的瓶頸。您可以使用雜合 (當架構支援時)、調整批次大小和同步化呼叫，以調整神經網路本身。您在大多數架構中也可以使用多精確度 (float16 或 int8) 培訓，這可以大幅影響提高輸送量。

下列圖表顯示套用不同的最佳化時累積的效能提升。您的結果將取決於您處理的資料和您最佳化的網路。

![\[GPU 的效能增強\]](http://docs.aws.amazon.com/zh_tw/dlami/latest/devguide/images/performance-enhancements.png)


下列指南介紹可搭配 DLAMI 使用的選項，並協助您提升 GPU 效能。

**Topics**
+ [預處理](tutorial-gpu-opt-preprocessing.md)
+ [培訓](tutorial-gpu-opt-training.md)

# 預處理
<a name="tutorial-gpu-opt-preprocessing"></a>

透過轉換或擴增的資料預先處理通常是 CPU 密集型程序，這可能成為整個管道中的瓶頸。架構有用於影像處理的內建運算子，但 DALI (Data Augmentation Library) 展現比架構的內建選項更好的效能。
+ NVIDIA Data Augmentation Library (DALI)：DALI 將資料擴增卸載到 GPU。它不會預先安裝在 DLAMI 上，但您可以透過在 DLAMI 或其他 Amazon Elastic Compute Cloud 執行個體上安裝或載入支援的架構容器來存取它。如需詳細資訊，請參閱 NVIDIA 網站上的 [DALI 專案頁面](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html)。如需範例使用案例和下載程式碼範例，請參閱 [ SageMaker 預先處理訓練效能](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance)範例。
+ nvJPEG：適用於 C 程式設計人員的 GPU 加速 JPEG 解碼器程式庫。它支援解碼單一映像或批次，以及深度學習中常見的後續轉換操作。nvJPEG 內建於 DALI，或者，您可以另外從 [NVIDIA 網站的 nvjpeg 頁面](https://developer.nvidia.com/nvjpeg)下載來使用。

對於 GPU 監控和最佳化，您可能有興趣看其他這些主題：
+ [監控](tutorial-gpu-monitoring.md)
  + [使用 CloudWatch 監控 GPU](tutorial-gpu-monitoring-gpumon.md)
+ [最佳化](tutorial-gpu-opt.md)
  + [預處理](#tutorial-gpu-opt-preprocessing)
  + [培訓](tutorial-gpu-opt-training.md)

# 培訓
<a name="tutorial-gpu-opt-training"></a>

透過混合精度培訓，您可以使用相同的記憶體數量來部署更大的網路，或相較於單一或雙精度網路而言，降低記憶體使用量，您將會看到運算效能提高。您也可享有較小和更快資料傳輸的好處，這是多節點分散式培訓的重要因素。若要利用混合精度培訓，您需要調整資料轉換和損耗縮放。以下指南說明如何對支援混合精度的架構這樣做。
+ [NVIDIA 深度學習軟體開發套件](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) - NVIDIA 網站上的文件，描述適用於 MXNet、PyTorch 和 TensorFlow 的混合精度實作。

**提示**  
請務必到網站上查看您選擇的架構，並搜尋「混合精度」或 "fp16" 以取得最新的最佳化技術。以下是您可能覺得很有用的一些混合精度指南：  
[以 TensorFlow 進行混合精度培訓 (影片)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - 在 NVIDIA 部落格網站。
[使用 float16 搭配 MXNet 進行混合精度培訓](https://mxnet.apache.org/api/faq/float16) - MXNet 網站上的常見問答集文章。
[NVIDIA Apex：以 PyTorch 輕鬆進行混合精度培訓的工具](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) - NVIDIA 網站上的部落格文章。

對於 GPU 監控和最佳化，您可能有興趣看其他這些主題：
+ [監控](tutorial-gpu-monitoring.md)
  + [使用 CloudWatch 監控 GPU](tutorial-gpu-monitoring-gpumon.md)
+ [最佳化](tutorial-gpu-opt.md)
  + [預處理](tutorial-gpu-opt-preprocessing.md)
  + [培訓](#tutorial-gpu-opt-training)