

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

GPU を最大限に活用するため、データパイプラインを最適化し、深層学習ネットワークをチューニングできます。次の図が示すように、ニューラルネットワークのネイティブまたは基本実装では、GPU が一貫性なく使用され、潜在能力が十分に引き出されない可能性があります。事前処理とデータのロードを最適化すると、CPU から GPU へのボトルネックを減らすことができます。ハイブリダイゼーションを使用し (フレームワークでサポートされている場合)、バッチサイズを調整してコールを同期することで、ニューラルネットワーク自体を調整することができます。ほとんどのフレームワークでは、多精度 (float16 または int8) トレーニングを使用することもできます。スループットの向上に劇的な効果が及ぶ可能性があります。

以下の図は、さまざまな最適化を適用した場合の累積的なパフォーマンス向上を示しています。結果は、処理するデータと最適化するネットワークによって異なります。

![\[GPU のパフォーマンス向上\]](http://docs.aws.amazon.com/ja_jp/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 (データオーグメンテーションライブラリ) はフレームワークの組み込みオプションよりパフォーマンスが上回ることを実証しています。
+ NVIDIA データオーグメンテーションライブラリ (DALI): DALI は、データオーグメンテーションを GPU にオフロードします。DLAMI にはプリインストールされていませんが、DLAMI や他の Amazon Elastic Compute Cloud インスタンスに DALI をインストールするか、サポートされているフレームワークコンテナをロードすることにより、DALI にアクセスできます。詳細については、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 デコーダーライブラリ。1 つのイメージまたはバッチのデコードに加えて、深層学習に共通する後続のトランスフォーメーション操作もサポートされています。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 Deep Learning SDK](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) - MXNet、PyTorch、および TensorFlow の混合精度実装について説明している NVIDIA ウェブサイト上のドキュメント。

**ヒント**  
必ず、ウェブサイトで選択したフレームワークを確認し、「混合精度」または「fp16」を検索して最新の最適化手法を参照してください。以下の混合精度ガイドが役に立つ可能性があります。  
[Mixed-precision training with TensorFlow (ビデオ)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - NVIDIA ブログサイト上。
[Mixed-precision training using float16 with MXNet](https://mxnet.apache.org/api/faq/float16) - MXNet ウェブサイト上のよくある質問記事。
[NVIDIA Apex: a tool for easy mixed-precision training with 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)