カスタム SageMaker HyperPod クラスターメトリクスの作成 - Amazon SageMaker AI

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

カスタム SageMaker HyperPod クラスターメトリクスの作成

Amazon SageMaker HyperPod (SageMaker HyperPod) オブザーバビリティアドオンは、数百のヘルス、パフォーマンス、効率メトリクスout-of-the-box提供します。これらのメトリクスに加えて、モデル固有のパフォーマンス指標、データ処理統計、アプリケーション固有の測定値など、デフォルトのメトリクスではキャプチャされないアプリケーションやビジネスニーズに固有のカスタムメトリクスをモニタリングする必要がある場合があります。このニーズに対応するために、Python コードスニペットをアプリケーションに統合することで、OpenTelemetry を使用してカスタムメトリクスコレクションを実装できます。

カスタムメトリクスを作成するには、まず次のシェルコマンドを実行して、オブザーバビリティのために Python アプリケーションを計測するために必要なコア OpenTelemetry コンポーネントをインストールします。このインストールにより、SageMaker HyperPod クラスターで実行される Python アプリケーションがカスタムテレメトリデータを出力できるようになります。このデータは OpenTelemetry コレクターによって収集され、オブザーバビリティインフラストラクチャに転送されます。

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc

次のスクリプト例では、メトリクスにポッドとノードの情報を自動的にタグ付けし、クラスター内の適切な属性を確保し、これらのメトリクスを毎秒 SageMaker HyperPod 組み込みオブザーバビリティスタックに送信する OpenTelemetry メトリクスパイプラインを設定します。このスクリプトは、SageMaker HyperPod メトリクスコレクターへの接続を確立し、識別に適切なリソース属性を設定し、さまざまなタイプのメトリクス (カウンター、ゲージ、ヒストグラム) を作成してアプリケーションのパフォーマンスのあらゆる側面を追跡できるメーターインターフェイスを提供します。カスタムメトリクスは、システムメトリクスとともに SageMaker HyperPod モニタリングダッシュボードと統合されます。この統合により、1 つのインターフェイスで包括的なオブザーバビリティが可能になり、カスタムアラート、視覚化、レポートを作成してワークロードの完全なパフォーマンスプロファイルをモニタリングできます。

import os from opentelemetry import metrics from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import Resource # Get hostname/pod name hostname = os.uname()[1] node_name = os.getenv('NODE_NAME', 'unknown') collector_endpoint = "hyperpod-otel-collector.hyperpod-observability:4317" # Configure the OTLP exporter exporter = OTLPMetricExporter( endpoint=collector_endpoint, insecure=True, timeout=5000 # 5 seconds timeout ) reader = PeriodicExportingMetricReader( exporter, export_interval_millis=1000 ) resource = Resource.create({ "service.name": "metric-test", "pod.name": hostname, "node.name": node_name }) meter_provider = MeterProvider( metric_readers=[reader], resource=resource ) metrics.set_meter_provider(meter_provider) # Create a meter meter = metrics.get_meter("test-meter") # Create a counter counter = meter.create_counter( name="test.counter", description="A test counter" ) counter.add(1, {"pod": hostname, "node": node_name})