「過去のデータ、Ray、およびAmazon SageMakerを使用して装置のパフォーマンスを最適化する」
Optimize device performance using past data, Ray, and Amazon SageMaker.
効率的な制御ポリシーにより、産業企業は生産性を最大化し、予定外の停止時間とエネルギー消費を削減することで収益性を向上させることができます。最適な制御ポリシーを見つけることは複雑なタスクです。なぜなら、化学反応器や風力タービンなどの物理システムはモデル化が難しく、プロセスのダイナミクスのドリフトが時間とともに性能の低下を引き起こすことがあるためです。オフライン強化学習は、明示的なプロセスモデルの必要がないため、産業企業が履歴データだけで制御ポリシーを構築することができる制御戦略です。このアプローチは、安全性の重要なアプリケーションでの強化学習の採用の障壁の1つを取り除くため、プロセスとの直接的な対話を必要としません。この記事では、Amazon SageMakerを使用してRayのRLlibライブラリを使用してのみ、履歴データを使用して最適な制御ポリシーを見つけるためのエンドツーエンドのソリューションを構築します。強化学習について詳しくは、Amazon SageMakerでの強化学習の使用を参照してください。
使用例
産業制御は、製造ライン、エネルギーグリッド、化学プラントなどの複雑なシステムの管理を含み、効率的かつ信頼性の高い運用を確保します。多くの伝統的な制御戦略は、事前に定義されたルールとモデルに基づいており、しばしば手動で最適化が必要です。一部の産業では、機器の劣化や環境条件の変化などが発生した場合に、パフォーマンスを監視し、制御ポリシーを調整することが一般的な手法です。再調整には数週間かかる場合があり、試行錯誤的なアプローチでシステムに外部励起を注入することが必要な場合もあります。
強化学習は、環境との相互作用を通じて最適な制御ポリシーを学習するためのプロセス制御で新たなパラダイムとして登場しました。このプロセスでは、データを以下の3つのカテゴリに分解する必要があります。1) 物理システムから利用可能な測定値、2) システムに対して実行できるアクションのセット、3) 機器のパフォーマンスの数値化された指標(報酬)。ポリシーは、将来の報酬が最も高いと予想されるアクションを、与えられた観測値で見つけるために訓練されます。
オフライン強化学習では、本番環境にデプロイする前に履歴データでポリシーを訓練することができます。このブログ記事で訓練されるアルゴリズムは「Conservative Q Learning」(CQL)と呼ばれます。CQLには「actor」モデルと「critic」モデルが含まれており、推奨されたアクションを実施した後に、自身のパフォーマンスを保守的に予測するように設計されています。この記事では、具体的なカートポール制御問題を用いてプロセスをデモンストレーションします。この問題では、カート上のポールをバランスさせながら、同時にカートを指定された目標位置に移動させるエージェントを訓練することが目標です。トレーニング手順ではオフラインデータを使用し、エージェントは既存の情報から学習することができます。このカートポールのケーススタディは、トレーニングプロセスとその潜在的な実世界の応用における効果を示しています。
- 「PythonとMatplotlibを使用して米国のデータマップを作成する方法」
- 「データサイエンスのベストプラクティス、パート1 – クエリをテストする」
- 「2023年のトップ5 AIデータセキュリティの脅威」
ソリューションの概要
この記事で紹介するソリューションは、履歴データを使用したオフライン強化学習のためのエンドツーエンドのワークフローの展開を自動化します。以下のダイアグラムは、このワークフローで使用されるアーキテクチャを説明しています。計測データは、産業用機器によってエッジで生成されます(ここではAWS Lambda関数でシミュレートされています)。データはAmazon Kinesis Data Firehoseに入力され、Amazon Simple Storage Service(Amazon S3)に保存されます。Amazon S3は耐久性があり、パフォーマンスが高く、低コストのストレージソリューションであり、機械学習トレーニングプロセスに大量のデータを提供することができます。
AWS Glueはデータをカタログ化し、Amazon Athenaを使用してクエリ可能な形式にします。Athenaは計測データを強化学習アルゴリズムが摂取できる形式に変換し、それを再度Amazon S3にアンロードします。Amazon SageMakerはこのデータをトレーニングジョブにロードし、訓練されたモデルを生成します。SageMakerはそのモデルをSageMakerエンドポイントで提供します。産業用機器は、そのエンドポイントにクエリを送信してアクションの推奨を受け取ることができます。
図1:エンドツーエンドの強化学習ワークフローを示すアーキテクチャダイアグラム。
この記事では、以下のステップでワークフローを分解します:
- 問題を明確化します。実行可能なアクション、推奨の基準となる測定値、および各アクションのパフォーマンスを数値化します。
- データを準備します。測定テーブルを機械学習アルゴリズムが利用できる形式に変換します。
- そのデータでアルゴリズムを訓練します。
- 訓練メトリックに基づいて最適なトレーニングランを選択します。
- モデルをSageMakerエンドポイントにデプロイします。
- モデルの本番環境でのパフォーマンスを評価します。
前提条件
このウォークスルーを完了するには、AWSのアカウントとAWS SAMがインストールされたコマンドラインインターフェースが必要です。このワークフローを実行し、トレーニングデータを生成するために、以下の手順に従ってAWS SAMテンプレートをデプロイしてください:
-
コマンドでコードリポジトリをダウンロードします
git clone https://github.com/aws-samples/sagemaker-offline-reinforcement-learning-ray-cql
-
リポジトリに移動します:
cd sagemaker-offline-reinforcement-learning-ray-cql
-
リポジトリをビルドします:
sam build --use-container
-
リポジトリをデプロイします
sam deploy --guided --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND
-
以下のコマンドを使用して、AWS Lambda関数を使用してモックデータを生成するbashスクリプトを呼び出します。
sudo yum install jq
cd utils
sh generate_mock_data.sh
ソリューションのウォークスルー
問題の定式化
このブログポストのシステムは、ポールが上にバランスをとっているカートです。ポールが直立し、カートの位置が目標位置に近い場合、システムは良いパフォーマンスを発揮します。前提として、このシステムからの履歴データを生成しました。
以下の表は、システムから収集した履歴データを示しています。
カートの位置 | カートの速度 | ポールの角度 | ポールの角速度 | 目標位置 | 外力 | 報酬 | 時間 |
---|---|---|---|---|---|---|---|
0.53 | -0.79 | -0.08 | 0.16 | 0.50 | -0.04 | 11.5 | 5:37:54 PM |
0.51 | -0.82 | -0.07 | 0.17 | 0.50 | -0.04 | 11.9 | 5:37:55 PM |
0.50 | -0.84 | -0.07 | 0.18 | 0.50 | -0.03 | 12.2 | 5:37:56 PM |
0.48 | -0.85 | -0.07 | 0.18 | 0.50 | -0.03 | 10.5 | 5:37:57 PM |
0.46 | -0.87 | -0.06 | 0.19 | 0.50 | -0.03 | 10.3 | 5:37:58 PM |
Amazon Athenaを使用して、以下のクエリを使用して過去のシステム情報をクエリできます:
SELECT *
FROM "AWS CloudFormation Stack Name_glue_db"."measurements_table"
ORDER BY episode_id, epoch_time ASC
limit 10;
このシステムの状態は、カートの位置、カートの速度、ポールの角度、ポールの角速度、およびゴールの位置によって定義されます。各時間ステップで行われるアクションは、カートに対して外部力が加えられることを意味します。シミュレートされた環境は、カートがゴールの位置に近く、ポールがより直立している場合により高い報酬値を出力します。
データの準備
強化学習モデルにシステム情報を表示するために、それを状態(または観測とも呼ばれる)、アクション、および報酬のカテゴリに値を分類するキーを持つJSONオブジェクトに変換し、これらのオブジェクトをAmazon S3に格納します。次の表の時間ステップから生成されたJSONオブジェクトの例です。
{“obs”:[[0.53,-0.79,-0.08,0.16,0.5]], “action”:[[-0.04]], “reward”:[11.5] ,“next_obs”:[[0.51,-0.82,-0.07,0.17,0.5]]} |
{“obs”:[[0.51,-0.82,-0.07,0.17,0.5]], “action”:[[-0.04]], “reward”:[11.9], “next_obs”:[[0.50,-0.84,-0.07,0.18,0.5]]} |
{“obs”:[[0.50,-0.84,-0.07,0.18,0.5]], “action”:[[-0.03]], “reward”:[12.2], “next_obs”:[[0.48,-0.85,-0.07,0.18,0.5]]} |
AWS CloudFormationスタックには、AthenaQueryToCreateJsonFormatedData
という出力が含まれています。このクエリをAmazon Athenaで実行して変換を行い、JSONオブジェクトをAmazon S3に保存します。強化学習アルゴリズムは、これらのJSONオブジェクトの構造を使用して、どの値を基に推奨を行い、履歴データでアクションを取った結果を理解します。
エージェントのトレーニング
今、トレーニングジョブを開始して訓練されたアクション推奨モデルを作成できます。Amazon SageMakerを使用して、さまざまな設定が結果の訓練されたモデルにどのように影響するかをすばやく確認するため、複数のトレーニングジョブを迅速に起動できます。TuningJobLauncherFunction
という名前のLambda関数を呼び出して、アルゴリズムをトレーニングするときに4つの異なるハイパーパラメータセットで実験するハイパーパラメータのチューニングジョブを開始します。
最適なトレーニングランの選択
どのトレーニングジョブが最適なモデルを生み出したかを見つけるために、トレーニング中に生成された損失曲線を調べます。CQLの評価モデルは、推奨されたアクションを取った後のアクターのパフォーマンス(Q値と呼ばれる)を推定します。評価モデルの損失関数の一部には、時間差エラーが含まれます。このメトリックは、評価モデルのQ値の精度を測定します。平均Q値が高く、時間差エラーが低いトレーニングランを探します。この論文「オフラインモデルフリーロボット強化学習のワークフロー」では、最適なトレーニングランの選択方法について詳しく説明しています。コードリポジトリには、最新のトレーニングジョブを説明するPlotlyのHTMLフィギュアを作成する/utils/investigate_training.py
というファイルがあります。このファイルを実行し、出力を使用して最適なトレーニングランを選択します。
訓練されたモデルのパフォーマンスを予測するために、平均Q値を使用できます。Q値は、割引率を(1 – “割引率”)で乗算することにより、将来の報酬値の合計を慎重に予測するように訓練されています。長時間実行されるプロセスでは、この数値を指数加重平均に変換できます。このセットの最適なトレーニングランでは、平均Q値は539でした。割引率は0.99なので、モデルは少なくとも1つのタイムステップあたり5.39の平均報酬を予測しています。この値を過去のシステムパフォーマンスと比較することで、新しいモデルが過去の制御ポリシーを上回るかどうかの指標として使用できます。この実験では、過去のデータの平均報酬は4.3でしたので、CQLモデルはシステムの過去の成果よりも25%優れたパフォーマンスを予測しています。
モデルの展開
Amazon SageMakerのエンドポイントを使用すると、さまざまなユースケースに合わせて機械学習モデルをいくつかの異なる方法で提供することができます。この記事では、エンドポイントが需要に応じて自動的にスケールし、推論を生成しているときにのみコンピュート使用量を支払うようにするため、サーバーレスエンドポイントタイプを使用します。サーバーレスエンドポイントを展開するには、SageMakerエンドポイント構成のプロダクションバリアントにProductionVariantServerlessConfigを含めます。以下のコードスニペットは、この例のサーバーレスエンドポイントを展開するためにAmazon SageMakerのPython用ソフトウェア開発キットを使用しています。モデルを展開するために使用されるサンプルコードは、sagemaker-offline-reinforcement-learning-ray-cqlにあります。
predictor = model.deploy(
serverless_inference_config=ServerlessInferenceConfig(
memory_size_in_mb=2048,
max_concurrency=200
),
<…>
)
訓練済みモデルファイルは、各トレーニングランのS3モデルアーティファクトに保存されています。機械学習モデルをデプロイするには、最良のトレーニングランのモデルファイルを見つけ、このモデルデータを含むイベントで「ModelDeployerFunction
」というLambda関数を呼び出します。Lambda関数はSageMakerサーバーレスエンドポイントを起動して、訓練済みモデルを提供します。「ModelDeployerFunction
」を呼び出す際に使用するサンプルイベント:
{ "DescribeTrainingJob":
{ "ModelArtifacts":
{ "S3ModelArtifacts": "s3://your-bucket/training/my-training-job/output/model.tar.gz"}
}
}
訓練済みモデルのパフォーマンスを評価する
製品環境で訓練済みモデルのパフォーマンスを確認しましょう!新しいモデルのパフォーマンスを確認するには、「RunPhysicsSimulationFunction
」というLambda関数をSageMakerエンドポイント名とイベントとして呼び出します。これにより、エンドポイントが推奨するアクションを使用してシミュレーションが実行されます。「RunPhysicsSimulatorFunction
」を呼び出す際に使用するサンプルイベント:
{"random_action_fraction": 0.0, "inference_endpoint_name": "sagemaker-endpoint-name"}
以下のAthenaクエリを使用して、訓練済みモデルのパフォーマンスを過去のシステムのパフォーマンスと比較します。
WITH
sum_reward_by_episode AS (
SELECT SUM(reward) as sum_reward, m_temp.action_source
FROM "<AWS CloudFormation Stack Name>_glue_db"."measurements_table" m_temp
GROUP BY m_temp.episode_id, m_temp.action_source
)
SELECT sre.action_source, AVG(sre.sum_reward) as avg_total_reward_per_episode
FROM sum_reward_by_episode sre
GROUP BY sre.action_source
ORDER BY avg_total_reward_per_episode DESC
以下は結果テーブルの例です。訓練済みモデルは、過去のデータと比べて報酬が2.5倍多く得られました!さらに、モデルの真のパフォーマンスは、保守的なパフォーマンス予測よりも2倍優れていました。
アクションソース | エピソードごとの平均報酬 |
trained_model |
10.8 |
historic_data |
4.3 |
以下のアニメーションは、トレーニングデータからのサンプルエピソードと、訓練済みモデルを使用してどのアクションを選択するかを示すエピソードの違いを示しています。アニメーションでは、青いボックスがカート、青い線がポール、緑の長方形がゴール位置です。赤い矢印は各タイムステップでカートに適用される力を示しています。トレーニングデータの赤い矢印は、データがエキスパートアクションとランダムアクションを50%ずつ使用して生成されたため、かなり前後にジャンプします。訓練済みモデルは、非エキスパートのデモンストレーションを観察するだけで、カートを目標位置に迅速に移動させながら安定性を保つ制御ポリシーを学習しました。
クリーンアップ
このワークフローで使用したリソースを削除するには、Amazon CloudFormationスタックのリソースセクションに移動し、S3バケットとIAMロールを削除します。その後、CloudFormationスタック自体を削除します。
結論
オフライン強化学習は、過去のデータを使用して最適なポリシーを探索することで、産業企業が安全を損なうことなく自動化を実現するのに役立ちます。このアプローチをオペレーションに実装するためには、状態決定システムを構成する測定値、制御できるアクション、および望ましいパフォーマンスを示すメトリクスを特定することから始めます。そして、RayとAmazon SageMakerを使用した自動エンドツーエンドソリューションの実装については、このGitHubリポジトリにアクセスしてください。
この投稿は、Amazon SageMaker RLでできることの一部を紹介しています。ぜひ試してみて、Amazon SageMakerのディスカッションフォーラムまたは通常のAWSの連絡先を介してフィードバックをお送りください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles