View a markdown version of this page

Flask と を使用して AI/ML モデルの結果を視覚化する AWS Elastic Beanstalk - AWS 規範ガイダンス

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

Flask と を使用して AI/ML モデルの結果を視覚化する AWS Elastic Beanstalk

Amazon Web Services、Chris Caudill、Durga Sury

概要

人工知能と機械学習 (AI/ML) サービスからの出力を視覚化するには、開発者やエンジニアがカスタマイズする必要な複雑な API 呼び出しが必要になることがよくあります。アナリストが新しいデータセットを迅速に探索する場合、これは欠点になる可能性があります。

ウェブベースのユーザーインターフェイス (UI) を使用することで、サービスのアクセシビリティを高め、よりインタラクティブなデータ分析を実現できます。これにより、ユーザーが独自のデータをアップロードし、ダッシュボードでモデルの結果を視覚化できます。

このパターンでは、FlaskPlotly を使用して、 Amazon Comprehend をカスタムウェブアプリケーションと統合し、ユーザーが提供したデータからセンチメントとエンティティを視覚化します。このパターンでは、 を使用してアプリケーションをデプロイする手順も示します AWS Elastic Beanstalk。AWS AI サービスを使用するか、エンドポイントでホストされているカスタムトレーニング済みモデル (Amazon SageMaker エンドポイントなど) を使用してアプリケーションを適応させることができます。

前提条件と制限事項

前提条件

制限事項

  • このパターンの Flask アプリケーションは、単一のテキスト列を使用し、200 行に制限されている.csv ファイルで動作するように設計されています。アプリケーションコードは他のファイルタイプやデータ量を処理するように調整できます。

  • アプリケーションはデータの保持を考慮せず、アップロードされたユーザーファイルは手動で削除されるまで集計を続けます。アプリケーションを Amazon Simple Storage Service (Amazon S3) と統合して永続的なオブジェクトストレージを作成したり、Amazon DynamoDB などのデータベースを使用してサーバーレスのキーバリューストレージを作成したりできます。

  • このアプリケーションは英語のドキュメントのみを考慮します。ただし、Amazon Comprehend を使用してドキュメントの主要言語を検出することはできます。各アクションに適用される言語の詳細については、Amazon Comprehend ドキュメントのAPI リファレンス を参照してください。

アーキテクチャ

アプリケーションのアーキテクチャ

Flaskは、Pythonでウェブアプリケーションを開発するための軽量フレームワークです。Python の強力なデータ処理と豊富な ウェブ UI を組み合わせるように設計されています。パターンの Flask アプリケーションでは、ユーザーがデータをアップロードし、そのデータを Amazon Comprehend に送信して推論し、結果を視覚化するウェブアプリケーションの構築方法を示しています。  マッピングドキュメントの構造は次のとおりです。

  • static — ウェブ UI が適用されるすべての静的ファイル (JavaScript、CSS、画像など) が含まれています。

  • templates — アプリケーションのすべての HTML ページが含まれます。

  • userData — アップロードされたユーザーデータを格納します。

  • application.py — Flask アプリケーションファイル

  • comprehend_helper.py — Amazon Comprehend に API 呼び出しを行う関数

  • アプリケーション設定ファイル。

  • requirements.txt — アプリケーションに必要な Python の依存関係

application.py このスクリプトには、4 つの Flask ルートで構成されるウェブアプリケーションのコア機能が含まれています。以下の図に、これらの Flask ルートを示します。

ウェブアプリケーションのコア機能を構成する 4 つの Flask ルート。

  • / はアプリケーションのルートで、ユーザーを upload.html ページ ( templates ディレクトリに格納) にガイドします。

  • /saveFile は、ユーザーがファイルをアップロードした後に呼び出されるルートです。このルートは、ユーザーがアップロードしたファイルを含む HTML フォームを介して POST リクエストを受け取ります。userData ファイルがディレクトリに保存され、ルートはユーザーを /dashboard ルートにガイドします。

  • /dashboard がユーザーを dashboard.html ページにがガイドします。このページの HTML、/data ルートからデータを読み取る static/js/core.js に JavaScript コードを実行して、ページの視覚化を構築します。

  • /data は、ダッシュボードに視覚化されるデータを表示する JSON API です。このルートでは、ユーザーが提供したデータを読み取り、comprehend_helper.py の関数を使用してユーザーデータを Amazon Comprehend にガイドして、センチメント分析と名前付けのエンティティ認識 (NER) を行います。Amazon Comprehend レスポンスはフォーマットされ、JSON オブジェクトとして返されます。

デプロイアーキテクチャ

フラスコと Elastic Beanstalk を使用して AI/ML モデルの結果を視覚化するためのアーキテクチャ図。

設計上の考慮事項

で Elastic Beanstalk を使用してデプロイされたアプリケーションの設計上の考慮事項の詳細については AWS クラウド、 AWS Elastic Beanstalk ドキュメントの「」を参照してください。

テクノロジースタック

  • Amazon Comprehend

  • (Elastic Beanstalk)

  • Flask 

自動化とスケール

Elastic Beanstalk のデプロイは、ロードバランサーとauto スケーリンググループを使用して自動的にセットアップされます。その他の設定オプションについては、Elastic Beanstalk ドキュメントの「Elastic Beanstalk 環境の設定」を参照してください。

ツール

  • AWS Command Line Interface (AWS CLI) は、AWS のすべての部分とやり取りするための一貫したインターフェイスを提供する統合ツールです。

  • Amazon Comprehend では、ドキュメントの内容に関するインサイトの抽出用に自然言語処理 (NLP) を使用しています。

  • AWS Elastic Beanstalk を使用すると、これらのアプリケーションを実行するインフラストラクチャについて知る AWS クラウド ことなく、 でアプリケーションをすばやくデプロイおよび管理できます。

  • Elastic Beanstalk CLI (EB CLI) は、ローカルリポジトリからの環境の作成、更新、モニタリングを簡素化するインタラクティブなコマンド AWS Elastic Beanstalk を提供する のコマンドラインインターフェイスです。

  • Flask フレームワークは Python を使用してデータ処理と API コールを実行し、Plotly を使用してインタラクティブなウェブビジュアライゼーションを提供します。

コードリポジトリ

このパターンのコードは、GitHub Visualize AI/ML model results using Flask and repository AWS Elastic Beanstalkで入手できます。

エピック

タスク説明必要なスキル

GitHub リポジトリのクローン作成

次のコマンドを実行して、Flask とリポジトリを使用して GitHub Visualize AI/ML モデルの結果からアプリケーションコードをプルします。 AWS Elastic Beanstalk

git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git

注記

必ず GitHub に SSH キーを設定します。

開発者

Python モジュールをインストールします。

リポジトリをクローンすると、新しいローカル aws-comprehend-elasticbeanstalk-for-flask ディレクトリが作成されます。そのディレクトリでは、requirements.txt ファイルには、アプリケーションを実行する Python モジュールとバージョンが含まれています。 と をインストールするには、次のコマンドを使用します。

cd aws-comprehend-elasticbeanstalk-for-flask

pip install -r requirements.txt

Python 開発

アプリケーションのローカルテスト

次のコマンドを実行して、Weka サーバーを作成します。

python application.py

これにより、実行中のサーバーに関する情報が返されます。ブラウザを開いて http://localhost:5000 にアクセスすると、アプリケーションにアクセスできます。

注記

AWS Cloud9 IDE でアプリケーションを実行している場合は、 application.py ファイル内の application.run() コマンドを次の行に置き換える必要があります。

application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))

デプロイする前にこの変更を元に戻す必要があります。

Python 開発
タスク説明必要なスキル

AWS Elastic Beanstalk アプリケーション

Elastic Beanstalk アプリケーションとしてプロジェクトを起動するには、アプリケーションのルートディレクトリから以下のコマンドを実行します。

eb init -p python-3.6 comprehend_flask --region us-east-1

重要

 

  • comprehend_flask は Elastic Beanstalk アプリケーションの名前で、必要に応じて変更できます。 

  • を任意のリージョン AWS リージョン に置き換えることができます。リージョンを指定しない場合、 のデフォルトのリージョン AWS CLI が使用されます。

  • このアプリケーションは Python バージョン 3.6 でビルドされました。他の Python バージョンを使用すると、エラーが発生する可能性があります。

eb init -i コマンドを実行する場合、より多くのデプロイ設定オプションが表示されます。

アーキテクト、開発者

Elastic Beanstalk 環境をデプロイします。

プロジェクトルートディレクトリから以下のコマンドを実行すると、アプリケーションが構築されます。

eb create comprehend-flask-env

注記

comprehend-flask-env は Elastic Beanstalk 環境の名前で、必要に応じて変更できます。含むことができるのは、英文字、数字、およびダッシュのみです。

アーキテクト、開発者

Amazon Comprehend を使用するようにデプロイを承認します。

アプリケーションは正常にデプロイされている可能性がありますが、Amazon Comprehend へのアクセスをデプロイに提供する必要があります。 ComprehendFullAccessは、デプロイされたアプリケーションに Amazon Comprehend への API コールを行うアクセス許可を付与する AWS マネージドポリシーです。

次のコマンドを実行して、aws-elasticbeanstalk-ec2-roleComprehendFullAccess ポリシーを添付します(このロールがデプロイの Amazon Elastic Compute Cloud (Amazon EC2 インスタンスに自動的に作成)。

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role

重要

aws-elasticbeanstalk-ec2-role は、アプリケーションのデプロイ時に作成されます。 AWS Identity and Access Management (IAM) ポリシーをアタッチする前に、デプロイプロセスを完了する必要があります。

開発者、セキュリティアーキテクト

デプロイしたアプリケーションにアクセスします。

アプリケーションが正常にデプロイされた後、 eb open コマンドを実行して、そのアプリケーションにアクセスできます。

eb status コマンドを実行して、デプロイに関する詳細を取得することもできます。デプロイ URL は CNAME に記載されています。

アーキテクト、開発者
タスク説明必要なスキル

Elastic Beanstalk が新しいモデルにアクセスすることを許可します。

Elastic Beanstalk に新しいモデルエンドポイントに必要なアクセス権限があることを保証します。例えば、Amazon SageMaker AI エンドポイントを使用する場合、デプロイにはエンドポイントを呼び出すアクセス許可が必要です。 

詳細については、Amazon SageMaker InvokeEndpoint」を参照してください。

開発者、セキュリティアーキテクト

ユーザーデータを新しいモデルに送信します。

このアプリケーションの基になる ML モデルを変更するには、以下のファイルを変更する必要があります。

  • comprehend_helper.py — これは Amazon Comprehend に接続してレスポンスを処理し、最終結果をアプリケーションに返す Python スクリプトです。このスクリプトでは、 の別の AI サービスにデータをルーティングするか AWS クラウド、カスタムモデルエンドポイントにデータを送信できます。このパターンを論理的に分離して再利用できるように、結果をこのスクリプトでフォーマットすることも推薦します。

  • application.pycomprehend_helper.py スクリプトまたは関数の名前を変更した場合、その変更を反映するために、アプリケーション application.py スクリプトを更新する必要があります。

データサイエンティスト

ダッシュボードのビジュアライゼーションを更新します。

通常、新しい ML モデルを組み込むと、新しい結果を反映するようにビジュアライゼーションを更新する必要があります。これらのフラグは、次のファイルで定義されています。

  • templates/dashboard.html — ビルド済みのアプリケーションでは、2 つの基本的なビジュアライゼーションしか考慮されていません。このファイルでは、ページのレイアウト全体を調整できます。

  • static/js/core.js — このスクリプトは Flask サーバーの /data ルートのフォーマットされた出力をキャプチャし、Plotly を使用してビジュアライゼーションを作成します。ページのチャートを追加または更新できます。

ウェブ開発者
タスク説明必要なスキル

アプリケーションの要件ファイルを更新します。

Elastic Beanstalk に変更を送信する前に、アプリケーションのルートディレクトリで以下のコマンドを実行して、新しい Pythonモジュールを反映するように requirements.txt ファイルを更新します。

pip freeze > requirements.txt

Python 開発

Elastic Beanstalk 環境をセットアップします。

アプリケーションの変更が Elastic Beanstalk デプロイに確実に反映されるようにするには、アプリケーションのルートディレクトリに移動し、以下のコマンドを実行します。

eb deploy

これにより、アプリケーションのコードの最新バージョンが既存の Elastic Beanstalk デプロイに送信されます。

システム管理者、アーキテクト

トラブルシューティング

問題ソリューション

Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.

の実行時にこのエラーが発生した場合はeb create、Elastic Beanstalk コンソールでサンプルアプリケーションを作成して、デフォルトのインスタンスプロファイルを作成します。詳細については、 AWS Elastic Beanstalk ドキュメントの「Elastic Beanstalk 環境の作成」を参照してください。

Your WSGIPath refers to a file that does not exist.

このエラーは、Elastic Beanstalk が Flask コードの名前を と想定しているため、デプロイログで発生しますapplication.py。別の名前を選択した場合は、次のコードサンプルに示すように WSGIPath eb config を実行して編集します。

aws:elasticbeanstalk:container:python: NumProcesses: '1' NumThreads: '15' StaticFiles: /static/=static/ WSGIPath: application.py

自分のファイル名で application.py を置き換えます。

Gunicorn と Procfile を利用することもできます。このアプローチの詳細については、 AWS Elastic Beanstalk ドキュメントの「Procfile を使用した WSGI サーバーの設定」を参照してください。

Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.

Elastic Beanstalk では、Flask アプリケーションを表す変数に という名前が付けられることを想定していますapplicationapplication.py ファイルが変数名として application を使用していることを確認します。

application = Flask(__name__)

The EB CLI cannot find your SSH key file for keyname

EB CLI を使用して、使用するキーペアを指定するか、デプロイの Amazon EC2 インスタンスのキーペアを作成します。エラーを解決するには、eb init -i を実行します。一つのオプションでは、下記のように提示されます。

Do you want to set up SSH for your instances?

Y と回答して、キーペアを作成するか、既存のキーペアを指定します。

コードを更新して再デプロイしましたが、デプロイには変更が反映されていません。

デプロイで Git リポジトリを使用している場合は、再デプロイする前に必ず変更を追加してコミットしてください。

IDE から Flask AWS Cloud9 アプリケーションをプレビューしていて、エラーが発生します。

詳細については、 AWS Cloud9 ドキュメントの IDE AWS Cloud9 で実行中のアプリケーションのプレビューを参照してください。

関連リソース

追加情報

自然言語処理に Amazon Comprehend を使用

Amazon Comprehend を使用することを選択すると、リアルタイム分析または非同期バッチジョブを実行して、個々のテキストドキュメント内のカスタムエンティティを検出できます。Amazon Comprehend では、エンドポイントを作成することでリアルタイムで使用できるカスタムエンティティ認識モデルとテキスト分類モデルをトレーニングすることもできます。

このパターンでは、非同期バッチジョブを使用して、複数のドキュメントを含む入力ファイルからセンチメントとエンティティを検出します。このパターンで提供されるサンプルアプリケーションは、ユーザーが 1 つの列と 1 行に 1 つのテキストドキュメントを含む.csv ファイルをアップロードできるように設計されています。GitHub の comprehend_helper.pyファイルは、Flask とリポジトリを使用して AI/ML モデルの結果を視覚化し、入力ファイルを読み取り、Amazon Comprehend に入力を送信して処理します。 AWS Elastic Beanstalk

BatchDetectEntities

Amazon Comprehend は、名前付きエンティティのドキュメントのバッチのテキストを検査し、検出されたエンティティ、場所、エンティティのタイプ、および Amazon Comprehend の信頼レベルを示すスコアを返します。1 つの API 呼び出しで送信できるドキュメントは最大 25 個で、各ドキュメントのサイズは 5,000 バイト未満です。結果をフィルタリングして、ユースケースに基づいて特定のエンティティのみを表示できます。たとえば、‘quantity’ エンティティタイプをスキップして、検出されたエンティティのしきい値スコア (0.75 など) を設定できます。しきい値を選択する前に、特定のユースケースの結果を調べることを推薦します。これに関する詳細については、Amazon Comprehend ドキュメントのBatchDetectEntities を参照してください。

BatchDetectSentiment

Amazon Comprehend は、受信した複数のドキュメントを検査し、各ドキュメントの一般的なセンチメント(POSITIVENEUTRALMIXED、または NEGATIVE)を返します。1 つの API 呼び出しで送信できるドキュメントは最大 25 個で、各ドキュメントのサイズは 5,000 バイト未満です。センチメントの分析は簡単で、スコアが最も高いセンチメントを選択して最終結果に表示します。これに関する詳細については、Amazon Comprehend ドキュメントのBatchDetectSentiment を参照してください。

フラスコの設定処理

Flask サーバーは一連の設定変数 を使用して、サーバーの実行方法を制御します。これらの変数には、デバッグ出力、セッショントークン、その他のアプリケーション設定を含めることができます。アプリケーションの実行中にアクセスできるカスタム変数を定義することもできます。設定変数を設定する方法は複数あります。

このパターンでは、設定が config.py で定義され、application.py の内部で継承されます。

  • config.py には、アプリケーションの起動時に設定される設定変数が含まれます。このアプリケーションでは、サーバーをデバッグモード で実行するようにアプリケーションに指示する DEBUG 変数が定義されています。

    注記

    本番稼働環境でアプリケーションを実行するときは、デバッグモードを使用しないでください。 UPLOAD_FOLDERは、アプリケーションの後半で参照するように定義されたカスタム変数であり、アップロードされたユーザーデータを保存する場所を通知します。

  • application.py はFlask アプリケーションを初期化し、config.py で定義されている設定を継承します。これは以下のコードによって実行されます。

application = Flask(__name__) application.config.from_pyfile('config.py')