プラトンデータインテリジェンス。
バーティカルサーチ&アイ。

Amazon EKS クラスター内の AWS Inferentia ノードのオープンソースの可観測性 |アマゾン ウェブ サービス

日付:

機械学習 (ML) の最近の発展により、モデルはますます大規模になり、その中には数千億のパラメーターを必要とするものもあります。これらはより強力ですが、これらのモデルのトレーニングと推論には大量の計算リソースが必要です。高度な分散トレーニング ライブラリが利用できるにもかかわらず、トレーニングと推論のジョブには数百のアクセラレータ (GPU や、次のような専用の ML チップ) が必要になるのが一般的です。 AWS トレーニング & AWSインフェレンティア)、したがって、インスタンスは数十または数百になります。

このような分散環境では、インスタンスと ML チップの両方の可観測性がモデルのパフォーマンスの微調整とコストの最適化の鍵となります。メトリクスにより、チームはワークロードの動作を理解し、リソースの割り当てと使用率を最適化し、異常を診断し、全体的なインフラストラクチャ効率を向上させることができます。データ サイエンティストにとって、ML チップの使用率と飽和状態はキャパシティ プランニングにも関係します。

この投稿では、次の手順を説明します。 AWS Inferentia のオープンソースの可観測性パターンで使用される ML チップのパフォーマンスを監視する方法を示します。 Amazon Elastic Kubernetesサービス (Amazon EKS) クラスター、に基づくデータプレーンノードを含む アマゾン エラスティック コンピューティング クラウド (Amazon EC2) タイプのインスタンス Inf1 & Inf2.

パターンはその一部です AWS CDK 可観測性アクセラレータ、Amazon EKS クラスターの可観測性を設定するのに役立つ独自のモジュールのセット。 AWS CDK Observability Accelerator は、複数のリソースをデプロイするための再利用可能な単位であるパターンを中心に編成されています。オープンソースの可観測性パターン セットは、可観測性を計測します。 AmazonマネージドGrafana ダッシュボード、 OpenTelemetry の AWS ディストリビューション メトリクスを収集するコレクター、および プロメテウス向け Amazon マネージド サービス それらを保管します。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

このソリューションは、Inf1 インスタンスを含むノードグループを含む Amazon EKS クラスターをデプロイします。

ノード グループの AMI タイプは次のとおりです。 AL2_x86_64_GPUこれは Amazon EKS に最適化され、高速化された Amazon Linux AMI。標準の Amazon EKS に最適化された AMI 構成に加えて、高速化された AMI には以下が含まれます。 NeuronX ランタイム.

Kubernetes から ML チップにアクセスするために、パターンは AWS ニューロン デバイスプラグイン。

メトリクスは、 neuron-monitor DaemonSet は、最小限のコンテナをデプロイします。 ニューロンツール インストールされています。具体的には、 neuron-monitor DaemonSet が実行するのは、 neuron-monitor にパイプされたコマンド neuron-monitor-prometheus.py コンパニオン スクリプト (両方のコマンドはコンテナの一部です):

neuron-monitor | neuron-monitor-prometheus.py --port <port>

このコマンドは次のコンポーネントを使用します。

  • neuron-monitor システム上で実行されている Neuron アプリケーションからメトリクスと統計を収集し、収集されたデータを stdout にストリーミングします。 JSONフォーマット
  • neuron-monitor-prometheus.py テレメトリ データを JSON 形式から Prometheus 互換形式にマッピングして公開します

データは、Amazon Managed Grafana の対応するダッシュボードによって視覚化されます。

Amazon Managed Service for Prometheus および Amazon Managed Grafana を使用してメトリクスを収集および視覚化するための残りのセットアップは、他のオープンソース ベースのパターンで使用されるものと似ています。 AWS Observability Accelerator for CDK GitHubリポジトリ

前提条件

この投稿の手順を完了するには、次のものが必要です。

環境をセットアップする

環境をセットアップするには、次の手順を実行します。

  1. ターミナル ウィンドウを開き、次のコマンドを実行します。
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. 既存の Amazon Managed Grafana ワークスペースのワークスペース ID を取得します。
aws grafana list-workspaces

以下は出力例です。

{
  "workspaces": [
    {
      "authentication": {
        "providers": [
          "AWS_SSO"
        ]
      },
      "created": "2023-06-07T12:23:56.625000-04:00",
      "description": "accelerator-workspace",
      "endpoint": "g-XYZ.grafana-workspace.us-east-2.amazonaws.com",
      "grafanaVersion": "9.4",
      "id": "g-XYZ",
      "modified": "2023-06-07T12:30:09.892000-04:00",
      "name": "accelerator-workspace",
      "notificationDestinations": [
        "SNS"
      ],
      "status": "ACTIVE",
      "tags": {}
    }
  ]
}

  1. の値を割り当てます。 id & endpoint 次の環境変数に追加します。
export COA_AMG_WORKSPACE_ID="<<YOUR-WORKSPACE-ID, similar to the above g-XYZ, without quotation marks>>"
export COA_AMG_ENDPOINT_URL="<<https://YOUR-WORKSPACE-URL, including protocol (i.e. https://), without quotation marks, similar to the above https://g-XYZ.grafana-workspace.us-east-2.amazonaws.com>>"

COA_AMG_ENDPOINT_URL 含める必要があります https://.

  1. Amazon マネージド Grafana ワークスペースから Grafana API キーを作成します。
export AMG_API_KEY=$(aws grafana create-workspace-api-key 
--key-name "grafana-operator-key" 
--key-role "ADMIN" 
--seconds-to-live 432000 
--workspace-id $COA_AMG_WORKSPACE_ID 
--query key 
--output text)

  1. にシークレットを設定します AWS システム マネージャー:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

シークレットは、外部シークレット アドオンによってアクセスされ、EKS クラスター内のネイティブ Kubernetes シークレットとして利用できるようになります。

AWS CDK 環境をブートストラップする

AWS CDK デプロイの最初のステップは、環境をブートストラップすることです。あなたが使用するのは、 cdk bootstrap AWS CDK CLI のコマンドを使用して、その環境へのデプロイメントを実行するために AWS CDK が必要とするリソースを備えた環境 (AWS アカウントと AWS リージョンの組み合わせ) を準備します。 AWS CDK ブートストラップはアカウントとリージョンの組み合わせごとに必要であるため、リージョンで AWS CDK をすでにブートストラップしている場合は、ブートストラップ プロセスを繰り返す必要はありません。

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

ソリューションを展開する

ソリューションを展開するには、次の手順を実行します。

  1. クローン cdk-aws-observability-accelerator リポジトリを作成し、依存関係パッケージをインストールします。このリポジトリには、TypeScript で記述された AWS CDK v2 コードが含まれています。
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

Grafana ダッシュボードの JSON ファイルの実際の設定は、AWS CDK コンテキストで指定されることが期待されます。更新する必要があります context セクションに cdk.json ファイルは現在のディレクトリにあります。ダッシュボードの場所は、 fluxRepository.values.GRAFANA_NEURON_DASH_URL パラメータ、および neuronNodeGroup インスタンスのタイプ、数、および Amazon Elastic Blockストア ノードに使用される (Amazon EBS) サイズ。

  1. 次のスニペットを入力します cdk.json、置き換える context:
"context": {
    "fluxRepository": {
      "name": "grafana-dashboards",
      "namespace": "grafana-operator",
      "repository": {
        "repoUrl": "https://github.com/aws-observability/aws-observability-accelerator",
        "name": "grafana-dashboards",
        "targetRevision": "main",
        "path": "./artifacts/grafana-operator-manifests/eks/infrastructure"
      },
      "values": {
        "GRAFANA_CLUSTER_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/cluster.json",
        "GRAFANA_KUBELET_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/kubelet.json",
        "GRAFANA_NSWRKLDS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/namespace-workloads.json",
        "GRAFANA_NODEEXP_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodeexporter-nodes.json",
        "GRAFANA_NODES_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodes.json",
        "GRAFANA_WORKLOADS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/workloads.json",
        "GRAFANA_NEURON_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/neuron/neuron-monitor.json"
      },
      "kustomizations": [
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/infrastructure"
        },
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/neuron"
        }
      ]
    },
     "neuronNodeGroup": {
      "instanceClass": "inf1",
      "instanceSize": "2xlarge",
      "desiredSize": 1, 
      "minSize": 1, 
      "maxSize": 3,
      "ebsSize": 512
    }
  }

必要に応じて、Inf1 インスタンス タイプを Inf2 に置き換え、サイズを変更できます。選択したリージョンでの可用性を確認するには、次のコマンドを実行します (修正 Values あなたが適切だと思うように):

aws ec2 describe-instance-type-offerings 
--filters Name=instance-type,Values="inf1*" 
--query "InstanceTypeOfferings[].InstanceType" 
--region $AWS_REGION

  1. プロジェクトの依存関係をインストールします。
npm install

  1. 次のコマンドを実行して、オープンソースの可観測性パターンをデプロイします。
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

ソリューションを検証する

ソリューションを検証するには、次の手順を実行します。

  1. 実行する update-kubeconfig 指示。前のコマンドの出力メッセージからコマンドを取得できるはずです。
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. 作成したリソースを確認します。
kubectl get pods -A

次のスクリーンショットは、サンプル出力を示しています。

  1. ことを確認してください neuron-device-plugin-daemonset DaemonSet が実行中です:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

以下は予想される出力です。

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-device-plugin-daemonset   1         1         1       1            1           <none>          2h

  1. その neuron-monitor DaemonSet が実行中です:
kubectl get ds neuron-monitor --namespace kube-system

以下は予想される出力です。

NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-monitor   1         1         1       1            1           <none>          2h

  1. Neuron デバイスとコアが表示されていることを確認するには、次のコマンドを実行します。 neuron-ls & neuron-top たとえば、ニューロン モニター ポッドからのコマンド (ポッドの名前は、の出力から取得できます) kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

次のスクリーンショットは、予想される出力を示しています。

kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-top"

次のスクリーンショットは、予想される出力を示しています。

Grafana Neuron ダッシュボードを使用してデータを視覚化する

Amazon Managed Grafana ワークスペースにログインし、 ダッシュボード パネル。という名前のダッシュボードが表示されるはずです。 ニューロン/モニター.

Grafana ダッシュボードで興味深いメトリクスを確認するには、次のマニフェストを適用します。

curl https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/k8s-deployment-manifest-templates/neuron/pytorch-inference-resnet50.yml | kubectl apply -f -

これは、 トーチビジョン ResNet50 モデル ループ内で反復推論を実行してテレメトリ データを生成します。

ポッドが正常にデプロイされたことを確認するには、次のコードを実行します。

kubectl get pods

という名前のポッドが表示されるはずです。 pytorch-inference-resnet50.

数分後、覗いてみると、 ニューロン/モニター ダッシュボードに、次のスクリーンショットのような収集されたメトリクスが表示されるはずです。

Grafana Operator と Flux は常に連携してダッシュボードを Git と同期します。ダッシュボードを誤って削除した場合、ダッシュボードは自動的に再プロビジョニングされます。

クリーンアップ

次のコマンドを使用して、AWS CDK スタック全体を削除できます。

make pattern single-new-eks-inferentia-opensource-observability destroy

まとめ

この投稿では、オープンソース ツールを使用して、EC2 Inf1 インスタンスを実行するデータ プレーンを特徴とする EKS クラスターに可観測性を導入する方法を説明しました。まず、データプレーンノード用に Amazon EKS に最適化された高速 AMI を選択しました。これには Neuron コンテナランタイムが含まれており、AWS Inferentia および Trainium Neuron デバイスへのアクセスを提供します。次に、Neuron コアとデバイスを Kubernetes に公開するために、Neuron デバイス プラグインをデプロイしました。テレメトリ データの実際の収集と Prometheus 互換形式へのマッピングは、次の方法で実現されました。 neuron-monitor & neuron-monitor-prometheus.py。メトリクスは Amazon Managed Service for Prometheus から取得され、Amazon Managed Grafana の Neuron ダッシュボードに表示されます。

追加の可観測性パターンを調査することをお勧めします。 CDK 用 AWS オブザーバビリティ アクセラレータ GitHub リポジトリ。 Neuron について詳しくは、以下を参照してください。 AWS Neuron ドキュメント.


著者について

リッカルド・フレスキ AWS のシニア ソリューション アーキテクトであり、アプリケーションのモダナイゼーションに重点を置いています。彼はパートナーや顧客と緊密に連携し、既存のアプリケーションをリファクタリングして新しいアプリケーションを構築することで、AWS クラウドへの移行における IT 環境の変革を支援しています。

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?