【ML初心者アドベントカレンダー】パフォーマンスの確認とコストの最適化について


# この記事の目的

モデルのパフォーマンスを分析し、コストを最適化するための手法について学ぶ


# 主要なパフォーマンスメトリクス 

モデルのパフォーマンスを確認するにあたり、確認しておくべきメトリクスについて簡単にまとめます。

そもそもメトリクスとは？等の記載は下記が参考になりました。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/working_with_metrics.html

## 使用率

リソース (CPU、GPU、メモリ、ディスク、ネットワークなど) が今現在どの程度使用されているかを示す値。低使用率だとインスタンスのスペック等に無駄が生じている可能性があり、高使用率だと負荷が高く、パフォーマンスが一部機能していない可能性がある。ほどほどに使われている状態が良い。

## スループット

時間あたりに処理されるデータの量やリクエスト数の値。システムの処理能力を評価する指標になる。高いほどよく、低いときはパフォーマンスが低下している可能性がある。
レイテンシー（遅延）とは違う意味。

https://aws.amazon.com/jp/compare/the-difference-between-throughput-and-latency/

## 可用性

システムが利用可能である時間の割合のこと。システムがダウンした際の回復力を計測するためにもつかわれる。AWSは高可用性を推進している。

https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/reliability-pillar/availability.html

## スケーラビリティ

ワークロードが増加し、複雑になってもシステムが適切に対応できるか。つまりちゃんとスケーリングできるかということ。水平スケーラビリティ（インスタンスの台数を追加）と垂直スケーラビリティ（今動いているインスタンスのCPUなどを増加）がある。


## 耐障害性 

障害が発生しても、システムを動かし続けることができるかの指針。


障害隔離とは別。

https://docs.aws.amazon.com/ja_jp/whitepapers/latest/availability-and-beyond-improving-resilience/fault-tolerance-and-fault-isolation.html


# 問題を検知するためのツール

メトリクスについて詳しくなったところで、それを分析、監視するツールについて簡単にまとめます。


## AWS X-Ray

分散アプリケーションの分析とデバッグが行える。アプリケーション全体の依存関係や処理の遅延等を分析することができる。

https://aws.amazon.com/jp/xray/

BlackBelt

https://www.youtube.com/watch?v=biYBazxFwxk


## Amazon CloudWatch Lambda Insights

AWS Lambda関数専用のモニタリングを行う CloudWatch の拡張機能。メモリ、ディスク、ネットワークなどのシステムレベルメトリクスとログを閲覧できる。
Lambda 自体のパフォーマンス分析が行えるので、どのリクエストで遅延が生じているのか、などのトラブルシューティングが行える。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Lambda-Insights.html


## Amazon CloudWatch Logs Insights

CloudWatch に存在するログデータを簡単なクエリで解析できるサービス。クエリを使うので高度なフィルタリングと集約ができるほか、フィルタリング等も可能。特定のエラーログだけを検出する、といった動かし方もできる。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AnalyzingLogData.html


## Amazon DevOps Guru

機械学習を活用したクラウドオペレーションツール。CloudWatchやX-Rayと連携したダッシュボードを作成し、分析が行える。サービス全体のパフォーマンスや異常を特定できる。
アラームを手動で作成しなくても、機械学習に基づき何かおかしな動作があったら自動でアラートを挙げてくれる。すごい。

https://aws.amazon.com/jp/devops-guru/

https://aws.amazon.com/jp/devops-guru/features/?pg=ln&sec=hs

## Amazon OpenSearch Service

ログやメトリクスデータを分析・可視化する検索サービス。ログの**インデックス化**が行えるため、大量のログデータを素早く検索できる。クエリも使用可能。リアルタイム分析も可能。RAGを組み込むこともできる。

https://aws.amazon.com/jp/opensearch-service/


# インスタンスサイズの最適化について

モデルを動かすインスタンスサイズについては、事前に適切なものを選択することでコストの最適化を行うことができます。

**インスタンスタイプ簡易まとめ**
|種類|概要|ファミリー|
|---|---|---|
|汎用|全体的にバランスの取れた性能で、様々なアプリケーションに使用できる|t系、m系|
|コンピューティング最適化|大きなCPUを積んでいるため計算能力が高い。機械学習推論にもおすすめ|c系|
|ストレージ最適化|ローカルストレージとの通信を最適に行える。データへ低レイテンシで接続したい場合など|i系、d系|
|メモリ最適化|メモリ内の大きいデータセットを処理するときに最適。大規模データ分析など|r系、u系、x系|
|グラフィック最適化|高い並列処理能力を持つため、マルチインスタンスの場合はこちらを選択する。コンピューティング最適化より高速|p系、g系|
|推論最適化|推論を行うのに最適|inf系、trn系|

https://aws.amazon.com/jp/ec2/instance-types/

https://docs.aws.amazon.com/ja_jp/dlami/latest/devguide/gpu.html

https://aws.amazon.com/jp/ec2/instance-types/inf1/

https://docs.aws.amazon.com/ja_jp/dlami/latest/devguide/trainium.html


## インスタンスサイズを適正化するツール


### SageMaker Inference Recommender

Amazon SageMaker の機能の一つ。SageMakerのエンドポイントにモデルをデプロイした後に使用できる。モデルといくつかの条件を入力すると、要件に合わせておススメのインスタンスタイプを提案してくれる。
ジョブの実行中に使用されたインスタンスに対してのみ課金。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/inference-recommender.html

### AWS Compute Optimizer

EC2 や RDS など AWS の各種リソースの使用状況を機械学習を用いて分析し、最適なインスタンスタイプとサイズを提案してくれるサービス。使っていないリソースの発見もできる。

https://aws.amazon.com/jp/compute-optimizer/


# コスト分析、管理ツール

## AWS Cost Explorer

AWS のコストと使用量を可視化、把握、管理できるツール。レポートも作成可能。こちらを目安にリザーブドインスタンスの購入を検討する等の使い方ができる。

https://aws.amazon.com/jp/aws-cost-management/aws-cost-explorer/

https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-what-is.html

## AWS Billing and Cost Management

請求書の支払いとコストの最適化に役立つ機能。Cost Explorerがコスト分析に特化しているのに対し、このツールは請求全般を管理できる。

https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-what-is.html


## AWS Trusted Advisor

AWS のベストプラクティスに基づき、環境を継続的に評価してくれるサービス。コスト最適化の原理に基づき、未使用のリソースを検出してくれたりする。

https://aws.amazon.com/jp/premiumsupport/technology/trusted-advisor/

## AWS Budgets 

AWSの使用料金があらかじめ設定した予算を超過した場合にアラートを挙げてくれるサービス。

https://aws.amazon.com/jp/aws-cost-management/aws-budgets/



# 関連メモ

インスタンスの支払い方法に**SageMaker Savings Plans**が追加された。

> Savings Plans は、1 年または 3 年の期間で一貫した使用量 (USD/時間で測定) を確約するのと引き換えに、Amazon SageMaker についての柔軟な使用量ベースの料金モデルを提供します。Machine Learning Savings Plans にサインアップすると、契約した量までの使用については Savings Plans 料金で請求されます。

言葉通りSageMakerで使用できるSavings Plansのこと。もちろんオンデマンドもあり。

https://aws.amazon.com/jp/savingsplans/ml-pricing/