次の方法で共有


Azure インフラストラクチャ (IaaS) 上の AI ワークロードに関する適切に設計された考慮事項

Azure インフラストラクチャ上の AI に関する適切に設計された考慮事項には、AI ソリューションの信頼性、セキュリティ、運用効率、コスト管理、パフォーマンスを最適化するベスト プラクティスが含まれます。 これらの原則により、Azure の IaaS プラットフォームでの堅牢なデプロイ、セキュリティで保護されたデータ処理、効率的なモデル操作、スケーラブルなインフラストラクチャが保証されます。 これらの原則を適用することで、組織はビジネス ニーズを満たす回復力があり、セキュリティで保護され、コスト効率の高い AI モデルを構築できます。

信頼性

信頼性には、ダウンタイムを最小限に抑え、Azure インフラストラクチャ上の AI アプリケーションの一貫したパフォーマンスを確保する必要があります。 分散仮想マシン (VM) 全体で信頼性の高い操作を確保し、インフラストラクチャの変更中にパフォーマンスを維持することで、サービスの中断を防ぐことができます。 これらのプラクティスは、継続的なモデルの可用性を保証し、ユーザー エクスペリエンスを向上させるので重要です。

  • 可用性ゾーン間で VM を分散します。 Availability Zones を使用して、ハードウェア障害やメンテナンス イベントによるダウンタイムを最小限に抑えます。 VM は障害ドメインと更新ドメインに分散され、アプリケーションの継続的な操作が保証されます。

  • Azure Monitor を使用して正常性監視を設定します。 Azure Monitor を使用して VM の CPU、メモリ、ネットワーク のパフォーマンスを追跡し、モデルをサポートするインフラストラクチャのパフォーマンスの低下または障害を通知するアラートを構成します。 詳細については、「 Azure Monitor VM Insights」を参照してください。

  • ローリング インスタンスを使用して修正プログラムの適用と更新を自動化します。 Azure Update Management を使用して、ローリング方式でパッチを適用し、1 つのインスタンスを更新し、他のインスタンスがトラフィックを処理し続け、メンテナンス中のダウンタイムを防ぎます。

  • 部分的な障害時に正常に低下するように設計します。 複雑な AI モデルを提供したり、一部の VM が使用できなくなったときに特定の機能を制限したりすることで、コア機能を引き続き利用できるようにします。これにより、停止中でもユーザーが重要なサービスにアクセスできるようになります。

  • 主要な資産の定期的なバックアップを実装します。 モデル データ、トレーニング データセット、および構成を定期的にバックアップして、障害が発生した場合に迅速な復元を可能にし、貴重な進行状況とデータを保護します。

セキュリティ

セキュリティでは、不正アクセスや脅威から AI モデル、データ、インフラストラクチャを保護するための保護対策が対象となります。 機密情報を侵害する可能性のある脆弱性を防ぐために、更新プログラムを実装し、モデルの整合性を監視し、アクセスを制御します。 これらの手順は、運用環境で AI ソリューションのデータ プライバシーと信頼性を維持するために不可欠です。

  • Azure リソースの更新をスケジュールします。 メンテナンス構成を使用して、VM と拡張機能の特定の更新スケジュールを設定し、脆弱性ウィンドウを減らします。

  • 仮想マシンとコンテナー イメージに定期的にパッチを適用します。 VM とスケール セット 自動ゲスト 修正プログラムの適用 を有効にして、新しい脅威に対するセキュリティを維持します。 詳細については、「 Guest 更新プログラムとホスト メンテナンスの概要を参照してください。

  • モデルの誤差を監視し、整合性を確保します。 未承認の変更を防ぐために、モデル ファイルのデジタル署名やハッシュ検証などのセキュリティ メカニズムを実装して、モデルの整合性を確保します。 Azure Monitor を使用して、主要なパフォーマンス メトリックを追跡し、潜在的なセキュリティの脆弱性やデータシフトを示す可能性があるモデルの誤差を特定します。 Azure Monitor Metrics SDK を使用して、コード内でカスタム メトリック (精度、F1 スコア、およびモデルのデータ分散) を定義できます。 Azure Monitor Metrics SDK を使用すると、モデルのパフォーマンス統計とデータ ドリフト測定を Azure Monitor に送信できます。 時間の経過に伴うパフォーマンスの変化の監視は、モデルの動作が逸脱し、攻撃や再トレーニングの必要性を通知する可能性があるタイミングを検出するのに役立ちます。 このプロアクティブなアプローチは、モデルの整合性を保護し、セキュリティ コンプライアンスを維持するのに役立ちます。

  • 監査ログとアクセス ログを実装します。 Azure Monitor と Log Analytics を使用してモデルや VM へのアクセスをログに記録し、不正アクセスや通常とは異なる使用パターンを特定できます。 詳細については、Azure Monitor の Activity ログを参照してください。

  • モデル ファイルのバージョン 管理を使用します。 変更を追跡するためのバージョン管理を使用して Azure Storage (BLOB、ファイル、またはディスク) にモデル ファイルを格納し、有害な変更を特定してロールバックするための明確な監査証跡を確保します。 バージョン管理に Azure DevOps を使用すると、コードの変更へのアクセスを管理し、コード レビューでベスト プラクティスを適用することで、セキュリティが強化されます。 この階層化されたアプローチは、承認されていない変更のリスクを軽減し、アカウンタビリティを提供します。 詳細については、「 Blob Versioning in Azure Storage」を参照してください。

  • モデル出力の異常検出を設定します。 Azure Monitor を使用して、モデルの出力メトリックを追跡し、異常な動作のアラートを設定します。 たとえば、モデルからの API 応答を監視すると、異常な出力を検出するのに役立ちます。 予測精度などのメトリックに異常検出を設定して、予測範囲外になったときに自動的に検出することができます。 詳細については、「 動的しきい値を使用したメトリック アラートの作成と管理を参照してください。

  • モデル アクセス ポリシーを適用します。 Azure ロールベースのアクセス制御 (RBAC) と Microsoft Entra ID を使用して、VM とモデル ファイルへのアクセスをセキュリティで保護し、承認されたユーザーのみにアクセスを制限します。

  • 更新されたデータに対してモデルを定期的に再検証します。 VM で自動スクリプトまたはワークフローを使用してモデルの定期的な再検証を実装すると、モデルが現在のデータセットに対して正確かつ効果的であり、古い予測や不正確な予測からのリスクが軽減されます。 これらのタスクを Azure Automation または Azure Logic Apps でスケジュールすることで、データ標準への準拠を維持し、モデル全体のセキュリティを強化できます。 このプロアクティブなアプローチは、脆弱性を早期に特定し、継続的な改善と潜在的な脅威からの保護に役立ちます。 自動化ワークフローをスケジュールして、定期的に再有効化タスクをトリガーできます。 Azure Automation Runbook から開始し、仮想マシンで実行検証結果を取得するための適切なスケジュールを作成します。

  • データ系列とモデル ファイルの変更を追跡します。 Azure Blob Storage でバージョン管理を有効にし、トレーニングと推論で使用されるデータを追跡し、承認されていないデータがモデルの結果に影響を与えないことを確認します。

  • リソース クォータとレート制限を適用します。 Azure API Management を使用してモデル API のレート制限とクォータを実装し、過剰使用や不正使用を防ぎ、システムの脆弱性やサービスの停止につながる可能性があります。 この戦略により、トラフィックが多い間もシステムの応答性が維持され、サービス拒否攻撃に関連するリスクが軽減されます。 アクセスを制御することで、パフォーマンスを維持し、API 管理クォータと制限 潜在的な悪用から機密データを保護

  • 定期的な脆弱性スキャンを実施します。 Microsoft Defender 脆弱性スキャンを使用して、VM と関連リソースの脆弱性評価を実施します。 モデルを公開する可能性がある VM セットアップのセキュリティの問題や構成の誤りを定期的に確認します。 Microsoft Defender 脆弱性スキャン

コストの最適化

コストの最適化には、不要な費用を回避するために、リソースの使用量をワークロード要件に合わせる必要があります。 VM の適切なサイズ設定、予約インスタンスへのコミット、自動スケーリングの設定は、パフォーマンスを損なうことなくコストを管理するのに役立ちます。 AZURE インフラストラクチャのコストを制御することは、AI デプロイの長期的な持続可能性とスケーラビリティのために不可欠です。

  • 予約インスタンスにコミットします 割引料金を提供する 1 年または 3 年の期間にコミットすることで、仮想マシン (VM) のコストを節約できます。

  • 自動スケーリングに Azure 仮想マシン スケール セットを使用する.自動スケールCPU 使用率などのメトリックに基づく VM インスタンス。必要な分だけ支払い、過剰プロビジョニングを防ぎます。

  • アイドル状態のインスタンスの自動シャットダウンを設定します。 特に開発環境とテスト環境では、自動シャットダウンを有効にすることで、未使用のリソースのコストを回避します。

  • 予測可能な使用量には、 Azure の節約プラン を使用します。 VM のサイズとリージョン間で一貫した使用をコミットすることで、従量課金制の価格と比較してコストを削減します。

  • フォールト トレラントなワークロードには、 Azure スポット インスタンス を使用します。 中断を許容できるワークロードの予備容量を大幅に割引します。

  • 適切なストレージ ソリューションを選択します。 ワークロードのニーズに基づいてコストとパフォーマンスのバランスを取ります。 高スループット、大規模なアプリケーションには Azure Managed Lustre (AMLFS) を、高度なデータ管理と信頼性には Azure NetApp Files (ANF) を選択します。

オペレーショナルエクセレンス

オペレーショナル エクセレンスには、AZURE リソースの構成と管理を最適化して、AI アプリケーションの機能を向上させる必要があります。 効率的なリソース割り当て、パフォーマンス チューニング、分散トレーニングは、さまざまな要求に対するスムーズな運用と適応性をサポートします。 運用効率に焦点を当てることで、AI モデルは過剰なリソース使用なしで意図したとおりに動作します。

  • リソースの割り当てを最適化します。 ワークロードのニーズに合わせて、実際のリソース使用量に基づいて Azure VM のサイズと構成を定期的に確認します。 最適なサイズ設定とスケーリングに関する推奨事項については、Azure Advisor を使用してください。

  • 効率を高める自動スケールを構成します。 過剰なプロビジョニングを行わずにワークロードの需要を処理するように、VM またはコンテナーの自動スケールを設定します。 Azure Virtual Machine Scale Sets を使用して、必要に応じてリソースを動的に調整します。 詳細については、「Azure Virtual Machine Scale Sets」を参照してください。

  • 定期的なパフォーマンス チューニングを行います。 パフォーマンスのボトルネックを特定して解決するために、アプリケーションを継続的にプロファイリングします。 Application Insights Profiler を使用して、モデル コードとリソースの使用状況を分析します。

  • 効率を高める分散トレーニングを実装します。 分散トレーニング手法 (該当する場合) を使用して、複数の VM を使用してトレーニング時間を短縮します。 Horovod や PyTorch などのフレームワークでは、Azure での分散トレーニングがサポートされています。

  • Azure Blob Storage にチェックポイントを保存します。 モデルの状態、重み、構成を Azure Blob Storage に定期的に保存します。 LLM に使用しているプログラミング言語で使用できる Azure SDK またはライブラリを使用できます。 TensorFlow SavedModel や PyTorch チェックポイント ファイルなどの構造化された形式でチェックポイントを格納します。 チェックポイント ロジックを含むようにトレーニングコードまたは推論コードを変更します。 モデルの状態を保存するには、間隔の設定 (エポックごと、またはイテレーションの後) から開始します。 チェックポイント ファイルの一貫性のある名前付け規則を使用して、最新の状態を簡単に追跡します。

  • 状態回復の設計。 保存されたチェックポイントからアプリケーションが回復できることを確認します。 アプリケーションの起動時に Azure Blob Storage からモデルの状態を読み込むロジックを実装します。 これには、既存のチェックポイントのチェック、最新のチェックポイント (使用可能な場合) の読み込みが含まれるため、進行状況を失うことなくアプリケーションを再開できます。

パフォーマンス効率

パフォーマンス効率とは、AI モデルの需要を満たすために Azure インフラストラクチャの処理能力を最大化することです。 GPU 設定を調整し、入出力 (I/O) プロセスを最適化し、ベンチマーク テストを実行して計算速度と応答性を向上させる必要があります。 高パフォーマンスを確保することで、大規模な複雑な AI モデルの実行がサポートされます。これにより、ユーザーの満足度が向上し、待機時間が短縮されます。

GPU チューニング

グラフィックス処理装置 (GPU) のクロック レートを上げてパフォーマンスを向上させます。特に、高いグラフィカル処理や複雑な計算が必要なタスクの場合は、パフォーマンスが向上します。 クロック速度が高いほど、GPU は特定の期間内により多くの操作を実行できるため、全体的な効率が向上します。 GPU クロック周波数を最大値に設定するにはこのGPU 最適化スクリプトを使用します。

  • 高速ネットワークを有効にします。 高速ネットワークは、サポートされている仮想マシンの種類で仮想マシンがシングル ルート I/O 仮想化 (SR-IOV) を使用できるようにするハードウェア アクセラレーション テクノロジです。 待機時間が短く、ジッターが減り、CPU 使用率が低下します。 高速ネットワークを有効にすると、フロントエンド のネットワーク パフォーマンスが大幅に強化されます。

I/O チューニング

  • スクラッチ ストレージを最適化します。 スクラッチのスループットが高く、待機時間が短い必要があります。 トレーニング ジョブでは、データの読み取り、処理、およびジョブの実行中にこのストレージの場所をスクラッチ領域として使用する必要があります。 各 VM でローカル SSD を直接使用するのが理想的です。 スクラッチ用の共有ファイルシステムが必要な場合は、すべての NVMe SSD を組み合わせて並列ファイル システム (PFS) を作成すると、十分な容量が確保されていると仮定して、コストとパフォーマンスの面で優れたオプションになる可能性があります。 1 つの方法は、 Azure Managed Lustre を使用する方法です。 Azure Managed Lustre が適していない場合は、 Azure NetApp FilesAzure Native Qumulo などのストレージ オプションを調べることができます。

  • チェックポイント ストレージを実装します。 大規模なディープ ラーニング トレーニング ジョブは、使用される VM の数に応じて数週間実行できます。 他の HPC クラスターと同様に、InfiniBand の問題、デュアル インライン メモリ モジュール (DIMM) エラー、GPU メモリ内のエラー修正 ode (ECC) エラーなどのエラーが発生する可能性があります。 チェックポイント戦略を立つことが重要です。 チェックポイント間隔 (データの保存時) を把握します。 毎回転送されるデータの量を把握します。 容量とパフォーマンスの要件を満たすストレージ ソリューションを用意します。 パフォーマンスのニーズを満たす場合は、Blob Storage を使用します。

ベンチマーク テスト

ベンチマーク テストは、特に大規模なモデルの場合、GPU での分散ディープ ラーニング トレーニングのパフォーマンスを評価および改善するのに役立ちます。 これらのテストはノード間の GPU 通信の効率を測定し、分散トレーニング中のデータ転送のボトルネックを軽減することを目的としています。 説明する 3 つのテストは次のとおりです。

  • Megatron フレームワーク: 分散トレーニングの効率を向上させることで、大規模な言語モデルをサポートします。
  • NVIDIA 集合通信ライブラリ (NCCL) および ROCm Communication Collectives Library (RCCL) テスト: NCCL または RCCL ライブラリを使用してマルチ GPU 通信のパフォーマンスと精度を評価し、オールリジュースや散布などのテスト パターンを行います。

これらのテストは、モデル トレーニングと GPU 通信の NCCL/RCCL に重点を置いた Megatron を使用して、LLM のスケーラビリティと最適なパフォーマンスを保証します。

NVIDIA Megatron-LM テスト

NVIDIA Megatron-LM は、大規模な言語モデルをトレーニングするためのオープンソース フレームワークです。 これにより、開発者は次のような機能を備えた NLP タスク用の大規模なニューラル ネットワークを作成できます。

  • 並列処理: 10 億パラメーター モデルのモデル、データ、パイプラインの並列処理をサポートします。
  • スケーラビリティ: 効率的な大規模なモデル トレーニングのために、複数の GPU とノード間でスケーリングします。
  • 柔軟性: モデル アーキテクチャ、データ読み込み、トレーニング戦略を構成できます。
  • 最適化: パフォーマンス向上のために NVIDIA GPU 最適化を使用します。

Megatron-LM は Azure HPC インフラストラクチャにデプロイされ、オンプレミスのハードウェアを必要とせずに、大規模な言語モデルに対して Azure のスケーラビリティを使用します。

Megatron-LM テストのセットアップ

Megatron-LM をデプロイするには、特定のソフトウェアとハードウェアが必要です。

  • 適切なデプロイ オプションを選択します。 CycleCloud Workspace for Slurm を使用してデプロイを簡略化します。 GPU パーティションの NC シリーズまたは ND シリーズ SKU を選択します。 マルチノード トレーニングの場合、RDMA のサポートには ND シリーズ SKU が推奨されます。 Azure の HPC Marketplace イメージには、通常、これらのドライバーとライブラリが含まれています。 カスタマイズが必要な場合は、azhpc-images リポジトリで互換性を確保できます。

  • 適切なイメージを使用します。 プロジェクトのソフトウェア要件には、Linux ベースのオペレーティング システム (通常は Ubuntu) が含まれます。 マルチ GPU およびマルチノード通信では、NCCL や MPI などの通信ライブラリが必要です。 さらに、GPU アクセラレーションを確保するために、適切な NVIDIA ドライバーをインストールする必要があります。 Azure の HPC Marketplace イメージ には、これらのドライバーとライブラリがプレインストールされています。 ただし、カスタマイズが必要な場合は、互換性を確保するために azhpc-images リポジトリを使用できます。

Megatron-LM テストの使用

Megatron-LM は、 NGC の PyTorch コンテナーの最新リリースを使用して実行する必要があります。 従来の Slurm ベースの HPC クラスターに対してコンテナーを実行するには、クラスターに次の他のコンポーネントをインストールして構成する必要があります。

  • enroot: ユーザーがルート特権を必要とせず、ホスト システムを変更することなく、HPC クラスター上でコンテナー化されたアプリケーションを実行できるようにするツール。
  • pyxis: Slurm との enroot のシームレスな統合を可能にする Slurm 用のプラグインです。これにより、ユーザーはコンテナー化されたジョブを Slurm キューに送信し、HPC ノードで実行できます。

これらのコンポーネントはどちらも CycleCloud Workspace for Slurm に含まれていますが現在、CycleCloud を介して構築された Slurm クラスターには含まれていません。 これらの追加コンポーネントは、CycleCloud プロジェクト cluster-init を使用して導入できます。 これらの要件が満たされた場合、次の方法で LLM トレーニングに Megatron-LM を使用できます。

  • クラスターのパフォーマンスの確認: Node 正常性チェックでワークロードを実行する前に、ハードウェアの潜在的な問題を特定します。 NCCL テストを使用して、クラスターの分散オール削減パフォーマンスを確認します。
  • トレーニング データの選択: ワークフローを検証するための開始点として、 codeParrot モデルを使用します。
  • データの前処理: Megatron-LM リポジトリ内の preprocess_data.py スクリプトを使用して、Megatron-LM と互換性のある形式にデータを変換します。
  • Megatron-LM を使用したトレーニング: Megatron-LM 内の サンプル を参考にして、トレーニング用に Megatron を構成します。

このセットアップにより、Azure のインフラストラクチャでの大規模な言語モデルの効率的なデプロイとトレーニングが保証されます。

NCCL 帯域幅テスト

ノード間の GPU 通信を検証して最適化するには、NCCL 帯域幅テストを実行します。 NCCL 帯域幅テストは、GPU 間の高速通信を容易にするライブラリである NCCL 内の特殊なツールです。 NCCL は、単一またはマルチ GPU ノード間で、オールリデュース、オールギャザリング、reduce、ブロードキャスト、reduce-scatter などの集合操作をサポートし、PCIe、NVLink、NVswitch、または InfiniBand や TCP/IP などのネットワーク セットアップを使用するプラットフォームで最適なパフォーマンスを実現します。 詳細については、 NVIDIA/NCCL テストを参照してください。

NCCL パフォーマンス メトリック

NCCL 帯域幅テストを使用して、時間や帯域幅などの主要なメトリックを評価します。 "時間" (ミリ秒) は、操作のオーバーヘッドまたは待機時間を測定し、小さなデータ サイズの操作を評価するのに役立ちます。 "帯域幅" (GB/秒) は、送受信などのポイントツーポイント操作の効率を評価します。 "バス帯域幅" は、NVLink や PCI などのコンポーネントの GPU 間通信速度とボトルネックを把握することで、ハードウェアの使用効率を反映します。 AllReduce、ReduceScatter、AllGather、Broadcast、Reduce など、さまざまな集合操作の計算が提供されます。

NCCL テストの開始

CycleCloud デプロイ内でこれらのテストを開始するには、SSH 経由でスケジューラ ノードに接続し、GPU 搭載のコンピューティング ノードにアクセスします。 NCCL テスト用の Git リポジトリを複製し、 nccl-tests ディレクトリに移動し、テスト用のノードを一覧表示するホスト ファイルを作成します。 CycleCloud の Web アプリからスケジューラ ノードの IP アドレスを取得します。

NCCL テスト引数

テストを実行する前に、 スレッドあたりの GPU の数 (-g)、データ サイズ範囲 (最小バイトの場合は-b、最大バイト数の場合は-e)、ステップの増分 (-iまたはなど)、異なるを指定します -f)、削減操作の種類 (-o)、データ型 (-d)、ルート デバイス (-r)、反復回数 (-n)、ウォームアップカウント (-w)、CUDA グラフ設定 (-G)。 調整可能なパラメーターの完全な一覧については、NCCL テストのドキュメントを参照してください。

RCCL テスト

ROCm Communication Collectives Library (RCCL) は、AMD GPU 間の効率的な通信用に設計された特殊なライブラリです。 これは、ノード内 GPU 通信とノード間 GPU 通信の両方をサポートする、all-reduce、all-gather、broadcast、reduce などの集合的な操作を提供します。 PCIe と InfiniBand などのネットワーク テクノロジを使用するプラットフォーム向けに最適化された RCCL は、マルチ GPU 環境でのスケーラブルなデータ転送を保証します。 MPI を使用するワークフローなど、単一プロセスワークフローとマルチプロセス ワークフローの両方への統合がサポートされています。 詳細については、「 ROCm コミュニケーション・コレクティブ・ライブラリ」を参照してください。

  • 環境を設定します。 ROCm をインストールし、RCCL がすべてのノードに正しくインストールされていることを確認します。
  • RCCL テストをビルドします。 リポジトリを複製し、rccl-tests ディレクトリに移動して、テストをコンパイルします。
  • 帯域幅テストを実行します。 提供されたテスト実行可能ファイル (rccl-tests) を使用し、all-reduce などの通信操作を指定します。
  • パフォーマンスを分析します。 ノードと GPU 間で帯域幅と待機時間の結果を比較します。

次のステップ