EDL (Elastic Deep Learning の正式名) は、LF AI Foundation によって開発されており、並列処理を動的に調整できるディープ ニューラル ネットワーク トレーニング フレームワークです。マルチテナント クラスター管理をサポートし、モデル トレーニングの待機時間と完了時間のバランスをとり、リソース使用率を向上させることができます。
深層学習モデルのトレーニングには通常、コンピューティング リソースやストレージ容量などの点で時間と費用がかかります。
BERT モデルを例にとると、GPU でのトレーニング プロセスは 2,000 時間を超えることがよくありますが、ResNet モデルと VGG モデルのトレーニングには少なくとも 100 時間かかります。
現在のクラウド コンピューティングのコスト計算によると、モデルのトレーニングにかかるコストは数千元、場合によっては数万元になる可能性があります。モデルのトレーニングのコストを制御するには、コンピューティングリソースを共有するクラスターが登場しました。今回紹介するのは、Petuum CASL チームが開発した AdaptDL で、GPU クラスターの EDL を大幅に最適化します。
共有クラスターを使用すると、複数のユーザーがモデル トレーニング タスクを個別に送信できます。
これにより、コンピューティング リソースの過剰なプロビジョニングによって生じる無駄が削減されるだけでなく、アイドル状態のリソースを利用することで、ユーザーはワークステーション上で複雑なモデルをわずか数日、場合によっては数時間でトレーニングできるようになります。
ただし、共有クラスターには独自の問題があります。
共有クラスターに関する一般的な課題は次のとおりです。
1. リソースの割り当て:複数のタスクでクラスターを共有するには、GPU リソースの割り当てを慎重に計画する必要があります。たとえば、モデルをトレーニングする場合、同じマシン上の GPU を使用する方が、複数のマシン上で GPU を使用するよりもはるかに高速です。また、トレーニング タスク間のネットワーク帯域幅の競合を避けるために、異なる分散トレーニング タスクを異なるマシン上の GPU に割り当てる必要があります。
2. トレーニングの速度と拡張性は次のように異なります。トレーニング タスクに適切な GPU 構成を選択するには、時間の経過とともに変化するモデルのトレーニング速度とスケーラビリティを継続的に監視する必要があります。特に収束に近づいている場合は、より大きなバッチ サイズを使用してください。したがって、トレーニングの開始時に占有する GPU リソースを少なくすることが最善です。
3. トレーニング構成:通常、重要なトレーニング用に構成する前に、どの GPU が利用可能であるかを事前に知る必要があります。これは共有クラスターでは不可能な場合があります。たとえば、バッチ サイズと学習率は通常、GPU の数に基づいて決定されます。また、GPU が異なるマシン上にあることがわかっている場合は、勾配累積を使用してネットワークのボトルネックを克服できます。
4. 公平性と可用性:GPU 使用率のピーク時には、一部のユーザーはキューに並んでアイドル状態の GPU を待つ必要がありますが、すでにタスクを実行している一部のユーザーは、プロセスを高速化するために GPU の数を増やしたいと考えています。 2 つの間の矛盾をどのように比較検討し、解決するか。
AdaptDL は、ローカル マシンおよび共有クラスターでのモデル トレーニングを簡素化および高速化します。
組織のプール コンピューティングと共有クラスターに関連する欠点に対処するために、Petuum CASL チームは AdaptDL を作成しました。共有クラスターでの分散トレーニングを簡素化し、高速化します。
AdaptDL は、リソース適応型ディープラーニング (DL) トレーニングおよびスケジューリング フレームワークです。トレーニング タスクのパフォーマンスをリアルタイムで監視し、タスクの実行中にリソース (GPU、コンピューティング インスタンスなど) の割り当てを柔軟に調整できます。
これにより、共有クラスターにおける以前の問題が解決され、次の利点があります。
1. 共有 GPU クラスターの使用率を向上させます。AdaptDL は、すべてのモデル トレーニング タスクを分析し、さまざまな GPU リソース構成でのさまざまなタスクのパフォーマンスを学習できます。 AdaptDL スケジューラは、学習した知識を使用して、さまざまなトレーニング タスクに GPU リソースを公平かつ効率的に割り当てることができます。トレーニング タスクの数が増加し、さまざまなタスクのパフォーマンス特性がよりよく理解されるにつれて、AdaptDL は GPU を柔軟に再構成する方法を学習します。
2. クラウド モデルのトレーニング コストを削減します。AdaptDL は、クラウド内に適度な数の GPU インスタンスを提供して、不必要なコストを回避できます。 AdaptDL は、トレーニングでより大きなバッチ サイズが使用される場合に、クラスターを自動的にスケーリングすることもできます。
3. 大規模なトレーニングを簡単に実装:より大きなバッチ サイズを使用すると、多くの GPU でのトレーニングを高速化できますが、適用するのは簡単ではありません。一部のモデルが大きすぎるバッチ サイズを使用すると、統計効率が低下するためトレーニング時間が増加する可能性がありますが、小さすぎるバッチ サイズでは GPU を効果的に利用できません。 AdaptDL は、共有クラスター、クラウド環境、ローカル マシン上で適切なバッチ サイズを自動的に選択できます。
AdaptDL を使用するモデルは、Optimus や Tiresias と比較して、平均してトレーニングにかかる時間が短くなります
AdaptDL は、モデル トレーニング タスクごとに、バッチ サイズ、学習率、勾配の累積を自動的に調整でき、クラウド サービス プラットフォームでスポット インスタンスの数を独自に制御することもできます。
Petuum での実践では、AdaptDL 共有クラスター トレーニング モデルの助けを借りて、平均完了速度は 2 ~ 3 倍速くなり、AWS でのスポット インスタンスの使用コストも 3 倍低くなります。
AdaptDL は 2 つのモードで使用できます。
1. クラスターのスケジューリング:Kubernetes クラスター上で複数のタスクを実行できるようにします。 AdaptDL Python ライブラリを使用すると、AdaptDL スケジューラを PyTorch コードに統合して、最適な GPU の数とトレーニング バッチ サイズを自動的に選択できます。
2. 独立したトレーニング:任意のクラスターまたはローカル マルチ GPU マシン上で、適応的なバッチ サイズと学習率を使用してモデルをトレーニングします。 AdaptDL は、モデルのトレーニングを高速化するためにより大きなバッチ サイズを使用できる時期を自動的に計算できます。
AdaptDL Python ライブラリを使用したトレーニング:
Adaptdl Python ライブラリは、PyTorch トレーニング コードを簡素化します。バッチサイズと学習率を適応型にします。追加の設定は必要ありません。
python3 –m pip install adaptdl
PyTorch MNIST を例にとると、変更する必要があるコードは数行だけです。以下に示すように:
AdaptDL は、PyTorch のネイティブと同様の分散データ並列インターフェイスを提供し、既存の分散トレーニング コードを簡単に変更できます。
最初のステップ:
使用 adaptdl.torch.AdaptiveDataLoader 代わりの torch.utils.data.DataLoader 。
AdaptiveDataLoader は、プログラムのスループットと統計的効率に基づいて、トレーニング中に最適なバッチ サイズを自動的に選択できます。チェックポイント実行時に状態を保存することもできるので、再起動後に停止したところからトレーニングを再開することもできます。
train_loader.autoscale_batch_size(1024) AdaptDL を作成する トレーニングに最も効率的なバッチ サイズを自動的に選択します。すべてのトレーニング プロセスにわたる最大グローバル バッチ サイズは合計 1024 です。
次:
使用 adaptdl.torch.AdaptiveDataParallel カプセル化モデル。
adaptdl.torch.AdaptiveDataParallel 勾配ノイズ スケールはトレーニング プロセス中に計算され、統計的効率の計算に使用できます。バッチサイズが変わると、AdaptiveDataParallel 学習率はルールに従って自動的に調整されます。
デフォルトでは、AdaptiveDataParallel さまざまなタスクで優れたパフォーマンスを発揮する AdaScale が使用されています。
チェックポイント中に、AdaptiveDataParallel モデルパラメータ、オプティマイザステータス、LRスケジューラステータスは自動的に保存され、トレーニング再開後にワンクリックでこれらの設定を復元できます。
上記の変更により、ユーザーはローカル コンピューターまたは分散クラスターでトレーニング コードを実行できるようになります。 AdaptDL は、分散トレーニングを高速化するために正しいバッチ サイズと学習率を選択し、勾配累積を自動的に実行してネットワークの問題を解決します。アダプティブ バッチ サイズ マシンと手動バッチ サイズ マシンで YOLOv3 のトレーニング時間を比較すると、トレーニング時間とバッチ サイズの比較において、アダプティブには大きな利点があります。
AdaptDL を使用しない場合、小さすぎるバッチ サイズを選択すると、GPU が完全に活用されず、トレーニングが長引くことになります。逆に、大きすぎるバッチ サイズを選択すると、収束するためにより多くのエポックが必要となるため、トレーニング時間が長くなります。この比較は、AdaptDL が固定バッチ サイズを選択しなくても、自動的に優れたトレーニング パフォーマンスを達成できることを示しています。
クラスター管理には AdaptDL スケジューラーを使用します。
AdaptDL スケジューラは、トレーニング タスクで使用される GPU リソースを自動的に決定できます。これにより、共有クラスターでのトレーニング タスクがよりスマートになります。
柔軟性を活用して、クラスターのアイドル率が高い場合は、追加の GPU を使用するようにトレーニング タスクが拡張され、クラスターの使用率が高い場合は、トレーニング タスクを一時停止するのではなく、使用する GPU リソースが少なくなるようにトレーニング タスクが縮小されます。
AdaptDL スケジューラは追加機能も提供します。異なるタスク間のネットワーク競合を回避するためにクラスターを組織したり、競合するトレーニング タスク間の公平性を維持したりするなどです。
AdaptDL を使用すると、スケジューラーと各トレーニング タスク間の調整により、共有クラスターが効率的な使用率を維持できます。
タスクがより大きなバッチ サイズを効果的に使用できる場合、AdaptDL はより多くの GPU をジョブに自動的にシフトして、トレーニングを高速化します。一方、より小さいバッチ サイズしか使用できない場合は、アイドル状態の GPU が他のタスクにより効率的に割り当てられます。
AdaptDL スケジューラは、Helm を使用してワンクリックで任意の Kubernetes インスタンスにインストールできます。
helm install adaptdl adaptdl-sched \
-— repo https://github.com/petuum/adaptdl/raw/helm-repo \
-— namespace adaptdl — create-namespace \
-— set docker-registry.enabled=true
AdaptDL スケジューラをインストールした後、AdaptDL CLI を使用してトレーニング タスクを送信できます。トレーニング タスクは最初に 1 つの GPU を使用し、その後、異なる数の GPU を使用して複数回再起動します。その間に、AdaptDL は使用する最適な GPU の数を計算します。 GPUがいくらあっても、AdaptDL は常に最も効率的なバッチ サイズを選択し、それに応じて学習率を調整します。
AdaptDL クラスター トレースの例
色付きの棒グラフは、さまざまなタスクに割り当てられたコンピューティング インスタンスの数を示します。AdaptDL は、各タスクが取得するコンピューティング インスタンスの数を動的に最適化できます。
AdaptDL を使用すると、PyTorch トレーニング タスクは共有クラスターで 2 ~ 3 倍高速に実行されます。さらに、AdaptDL スケジューラーは AWS スポット インスタンスもサポートし、コストを 3 倍削減します。
最後に、AdaptDL と NNI を使用して、ハイパーパラメータ調整ワークロードを高速化することもできます (AdaptDL + NNI Post)。
プロジェクトアドレス:
https://github.com/petuum/adaptdl
この記事は PyTorch Medium ブログから翻訳されたものです。