Azure Machine Learning のコストを管理して最適化する
この記事では、機械学習モデルをトレーニングして Azure Machine Learning にデプロイする際のコストを管理して最適化する方法について説明します。
次のヒントを使用して、コンピューティング リソースのコストを管理して最適化します。
- Azure Machine Learning コンピューティング クラスターの使用
- 自動スケーリングされるようにトレーニング クラスターを構成する
- マネージド オンライン エンドポイントを自動スケーリング用に構成する
- サブスクリプションとワークスペースにクォータを設定する
- トレーニング ジョブに終了ポリシーを設定する
- 優先順位の低い仮想マシン (VM) を使用する
- 自動的にシャットダウンおよび起動するようにコンピューティング インスタンスのスケジュールを設定する
- Azure 予約 VM インスタンスを使用する
- トレーニングの並列化
- データ保持と削除のポリシーを設定する
- リソースを同じリージョンにデプロイする
- 失敗したデプロイを削除する
コストの計画と監視については、「Azure Machine Learning のコストを計画して管理する」を参照してください。
重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビュー バージョンは、サービス レベル 契約なしに提供されます。 プレビュー バージョンは、運用ワークロードにはお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
Azure Machine Learning コンピューティング クラスターの使用
データは絶えず変化するので、モデルのトレーニングと再トレーニングを短時間で実行できるように合理化し、正確なモデルを維持する必要があります。 ただし、継続的にトレーニングを行うとコストがかかり、GPU 上でのディープ ラーニング モデルの場合は特にそうです。
Azure Machine Learning ユーザーは、マネージド Azure Machine Learning コンピューティング クラスター (AmlCompute とも呼ばれる) を使用できます。 AmlCompute では、GPU と CPU のさまざまなオプションがサポートされています。 AmlCompute は、Azure Machine Learning によってサブスクリプションの代わりに内部でホストされます。 Azure IaaS クラウド スケールで、同じエンタープライズ レベルのセキュリティ、コンプライアンス、ガバナンスが提供されます。
これらのコンピューティング プールは Azure の IaaS インフラストラクチャ内にあるため、インフラストラクチャの他の部分と同じセキュリティ要件とコンプライアンス要件で、トレーニングをデプロイ、スケーリング、管理できます。 これらのデプロイは、お客様のサブスクリプションで実行され、ガバナンス ルールに従います。 詳細については、「Azure Machine Learning のコストを計画して管理する」を参照してください。
自動スケーリングされるようにトレーニング クラスターを構成する
ワークロードの要件に基づいてクラスターを自動スケーリングすると、必要なものだけが使用されるようにして、コストを削減できます。
AmlCompute クラスターは、ワークロードに基づいて動的にスケーリングするように設計されています。 クラスターは、構成するノードの最大数までスケールアップできます。 ジョブが完了するたびに、クラスターによってノードが解放され、構成された最小ノード数にスケーリングされます。
重要
ジョブが実行されていない場合の課金を回避するには、最小ノード数を 0 に設定します。 この設定により、 Azure Machine Learning では使用されていないノードの割り当てが解除されます。 0 より大きい値を指定すると、ノードが使用されていない場合でも、指定した数のノードが実行され続けます。
また、スケールダウンまでのノードのアイドル時間を構成することもできます。 既定では、スケールダウンまでのアイドル時間は 120 秒に設定されます。
- 反復の少ない実験を実行する場合は、この時間を短くしてコストを節約します。
- 反復の多い Dev/Test 実験を実行する場合は、トレーニング スクリプトまたは環境を変更するたびに、スケールアップとスケールダウンで頻繁に料金が発生しないように、時間を長くする必要がある場合があります。
以下を使用することで、ワークロード要件の変化に応じて AmlCompute クラスターを構成できます。
- Azure ポータル
- AmlCompute SDK クラス
- AmlCompute CLI
- REST API。
マネージド オンライン エンドポイントを自動スケーリング用に構成する
自動スケールでは、アプリケーションの負荷を処理するために適切な量のリソースが自動的に実行されます。 マネージド オンライン エンドポイントでは、Azure Monitor 自動スケーリング機能との統合によって、自動スケーリングをサポートします。 詳細については、「リアルタイムの推論のためのオンライン エンドポイントとデプロイ」を参照してください。
Azure Monitor 自動スケーリングでは、豊富なルール セットがサポートされています。
- メトリックベースのスケーリング (たとえば、CPU 使用率 > 70%)
- スケジュールベースのスケーリング (たとえば、ピーク時営業時間のスケーリング規則)
- この 2 つの組み合わせ
詳しくは、「オンライン エンドポイントを自動スケーリングする」をご覧ください。
リソースにクォータを設定する
AmlCompute には、クォータ (制限) の構成が付随します。 このクォータは、たとえば、Dv2 シリーズまたは NCv3 シリーズなど、VM ファミリ別です。 クォータは、サブスクリプションごとにリージョンによって異なります。 サブスクリプションは、小さな既定値で始まります。 この設定を使用して、サブスクリプションでスピン アップできる AmlCompute リソースの量を制御します。 詳細については、「Azure Machine Learning コンピューティング」を参照してください。
また、サブスクリプション内の各ワークスペースに対して、VM ファミリごとにワークスペース レベルのクォータを構成することもできます。 この方法により、各ワークスペースで発生する可能性のあるコストをより細かく制御し、特定の VM ファミリを制限できます。 詳細については、「ワークスペース レベルのクォータ」を参照してください。
ワークスペース レベルでクォータを設定するには:
Azure portal を開き、サブスクリプション内の任意のワークスペースを選択します。
ワークスペース メニューで [サポート + トラブルシューティング]>[使用量 + クォータ] を選択します。
Azure Machine Learning スタジオでクォータを表示するには、[クォータの表示] を選択します。
このページから、クォータを設定するためにサブスクリプションとリージョンを確認できます。
この設定は複数のワークスペースに影響するため、クォータを設定するにはサブスクリプション スコープでの特権が必要です。
ジョブ終了ポリシーを設定する
場合によっては、期間を制限したり、早期に終了したりするようにトレーニングの実行を構成する必要があります。 たとえば、Azure Machine Learning の組み込みのハイパーパラメーターのチューニングや自動機械学習を使用する場合などです。
使用できるオプションを次に示します。
- RunConfiguration で
max_run_duration_seconds
というパラメーターを定義して、選択したコンピューティング (ローカルまたはリモート クラウド コンピューティング) で実行を延長できる最長期間を制御します。 - ハイパーパラメーターのチューニングの場合は、バンディット ポリシー、中央値の停止ポリシー、または切り捨て選択ポリシーから、早期終了ポリシーを定義します。 ハイパーパラメーター スイープをさらに制御するには、
max_total_runs
やmax_duration_minutes
などのパラメーターを使用します。 詳細については、「早期終了ポリシーを指定する」を参照してください。 - 自動機械学習の場合は、
enable_early_stopping
フラグを使用して同様の終了ポリシーを設定します。 また、iteration_timeout_minutes
やexperiment_timeout_minutes
などのプロパティを使用して、ジョブまたは実験全体の最長期間を制御することもできます。 詳細については、「終了基準」を参照してください。
優先順位の低い仮想マシンを使用する
Azure では、仮想マシン スケール セット、Batch、Machine Learning service 全体で、使用されていない余剰容量を優先順位の低い VM として使用できます。 これらの割り当ては優先使用可能ですが、専用 VM に比べて低価格で提供されます。 一般に、Batch ワークロードには優先順位の低い VM を使用することをお勧めします。 また、Batch 推論の再送信またはチェックポイントを使用したディープ ラーニング トレーニングの再起動によって中断を回復できる場合にもそれらを使用します。
低優先順位の VM には、専用のクォータ値とは別に、VM ファミリ別の 1 つのクォータがあります。 AmlCompute クォータの詳細については、クォータの管理と引き上げに関するページを参照してください。
コンピューティング インスタンスは、対話型のノートブック エクスペリエンスをサポートする必要があるため、低優先順位の VM では機能しません。
コンピューティング インスタンスのスケジュールを設定する
コンピューティング インスタンスを作成する場合、VM はそのまま維持されるため、ご自身の作業に使用できます。
- アイドリングからのシャットダウンを有効にする (プレビュー) と、VM が指定された期間アイドル状態のときにコストを節約できます。 「アイドリングからのシャットダウンを構成する」を参照してください。
- 使用されていないときのコンピューティング インスタンスを自動的に起動および停止するスケジュールを設定 (プレビュー) して、コストを節約できます。 「自動開始と停止をスケジュール設定する」を参照してください。
予約インスタンスを使用する
コンピューティング リソースのコストを削減するもう 1 つの方法は、Azure 予約 VM インスタンスです。 このオファリングでは、1 年間または 3 年間の契約を結びます。 これらの割引は、従量課金制料金の最大 72% までの範囲で、毎月の Azure の請求に直接適用されます。
Azure Machine Learning コンピューティングでは、予約インスタンスがもともとサポートされています。 1 年間または 3 年間の予約インスタンスを購入すると、Azure Machine Learning のマネージド コンピューティングに対して自動的に割引が適用されます。
トレーニングの並列化
コストとパフォーマンスを最適化する主な方法の 1 つは、Azure Machine Learning で並列コンポーネントを利用してワークロードを並列化することです。 並列コンポーネントを使用すると、多数の小さなノードを使用してタスクを並列実行できるため、水平方向にスケーリングできます。 並列化にはオーバーヘッドがあります。 ワークロードと、実現できる並列処理の程度によっては、この方法が選択肢になる場合があります。 詳細については、「ParallelComponent クラス」を参照してください。
データ保持と削除のポリシーを設定する
パイプラインが実行されるたびに、各ステップで中間データセットが生成されます。 時間が経過すると、これらの中間データセットはストレージ アカウントの領域を使用します。 データセットをアーカイブおよび削除するには、ライフサイクル全体を通してデータを管理するポリシーを設定することを検討します。 詳細については、「データ ライフサイクルを自動管理してコストを最適化する」を参照してください。
リソースを同じリージョンにデプロイする
異なるリージョンにあるコンピューティングでは、ネットワークの待機時間が発生し、データ転送コストが増加する可能性があります。 Azure ネットワーク コストは、Azure データ センターからの送信帯域幅から発生します。 ネットワーク コストを削減するには、リージョン内のすべてのリソースをデプロイします。 データと同じリージョンにある Azure Machine Learning ワークスペースと依存リソースをプロビジョニングすると、コストを削減し、パフォーマンスを向上させることができます。
Azure ExpressRoute を使用するようなハイブリッド クラウド シナリオでは、ネットワーク コストと待機時間を最適化するために、すべてのリソースを Azure に移動した方がコスト効率が高くなる場合があります。
失敗したデプロイを削除する
マネージド オンライン エンドポイントは、デプロイに VM を使用します。 オンライン デプロイを作成する要求を送信して失敗した場合、その要求はコンピューティングが作成される段階を通過している可能性があります。 その場合、デプロイが失敗しても料金が発生します。 失敗のデバッグまたは調査が完了したら、失敗したデプロイを削除してコストを節約します。