使用燒瓶和 AWS Elastic Beanstalk 以視覺化方式呈現 AI/ML 模型結果 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用燒瓶和 AWS Elastic Beanstalk 以視覺化方式呈現 AI/ML 模型結果

由克里斯·考迪爾(AWS)和杜爾加蘇里(AWS)創建

:Entiment PoC 或試驗

機器學習與 AI;分析;DevOps;網站與網路應用程式

工作負載:開放原始碼

AWS 服務:Amazon Comprehend; AWS Elastic Beanstalk

Summary

將人工智慧和機器學習 (AI/ML) 服務的輸出視覺化通常需要複雜的 API 呼叫,這些呼叫必須由您的開發人員和工程師自訂。如果您的分析師想要快速探索新的資料集,這可能是一個缺點。

您可以使用 Web 型使用者介面 (UI) 來增強服務的可存取性,並提供更具互動性的資料分析形式,讓使用者能夠上傳自己的資料,並在儀表板中視覺化模型結果。

此模式使用Flask陰謀,將 Amazon Comprehend 與自訂 Web 應用程式整合,並將使用者提供的資料中的情緒和實體視覺化。該模式也提供了使用 AWS Elastic Beanstalk 部署應用程式的步驟。您可以使用Amazon Web Services (AWS) AI 服務或裝載在端點上的自訂訓練模型 (例如,Amazon SageMaker 端點

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶 

  • AWS Command Line Interface (AWS CLI),已安裝並設定在您的本機電腦。如需此項目的詳細資訊,請參閱組態基礎概念儲存在 AWS CLI 文件中。您也可以使用 AWS Cloud9 整合式開發環境 (IDE);如需有關此方面的詳細資訊,請參閱AWS Cloud9 的教學課程預覽 AWS Cloud9 IDE 中執行的應用程式儲存在 AWS Cloud9 文件中。

  • 瓶的 Web 應用程序框架的理解。如需 Flask 的詳細資訊,請參閱快速指南在瓶文檔中。

  • 已安裝並設定 Python 3.6 或更新版本。您可以遵循中的指示安裝 Python設定您的 Python 開發環境AWS Elastic Beanstalk 文件中的。

  • 已安裝並設定 Elastic Beanstalk 命令列界面 (EB CLI)。如需此項目的詳細資訊,請參閱安裝 EB CLI設定 EB CLI來自 AWS Elastic Beanstalk 文件。

限制

  • 這種模式的 Flask 應用程序被設計為與使用單個文本列的 .csv 文件一起工作,並且限制為 200 行。應用程式程式碼可以調整以處理其他檔案類型和資料磁碟區。

  • 應用程式不會考慮資料保留,而且會繼續彙總上傳的使用者檔案,直到手動刪除為止。您可以將應用程式與 Amazon Simple Storage Service (Amazon S3) 整合以進行永久性物件儲存,或使用資料庫 (例如 Amazon DynamoDB) 來進行無伺服器鍵值儲存。

  • 申請只考慮英語文件。但是,您可以使用 Amazon Comprehend 來檢測文檔的主要語言。如需每個動作支援語言的詳細資訊,請參閱API 參考在 Amazon Comprehend 文檔中。

  • 包含常見錯誤及其解決方案的疑難排解清單可在其他資訊區段。

Architecture

Flask 應用程式架構

瓶是用於在 Python 開發 Web 應用程序的輕量級框架。它被設計來結合 Python 強大的數據處理與豐富的 Web 用戶界面。該模式的 Flask 應用程序向您展示如何構建一個 Web 應用程序,使用戶能夠上傳數據,將數據發送到 Amazon Comprehend 進行推斷,然後將結果視覺化。 應用程式的結構如下:

  • static— 包含支援 Web UI (例如 JavaScript、CSS 和影像) 的所有靜態檔案 (例如,JavaScript、CSS 和影像)

  • templates— 包含應用程式的所有 HTML 網頁

  • userData-存儲上傳的用戶數據

  • application.py-瓶應用程序文件

  • comprehend_helper.py— 函數,使 API 呼叫 Amazon Comprehend

  • config.py— 應用程式組態檔

  • requirements.txt-應用程序所需的 Python 依賴關係

所以此application.py腳本包含 Web 應用程序的核心功能,它由四個 Flask 路由組成。下圖顯示了這些 Flask 路由。

  • /是應用程序的根目錄,並將用戶導向upload.html頁面 (儲存在templates目錄)。

  • /saveFile是用戶上傳檔案後叫用的路由。此路由接收POST請求,其中包含由用戶上傳的文件。檔案會儲存在userData目錄,並且路由會將使用者重新導向至/dashboard路由。

  • /dashboard會將使用者傳送至dashboard.html(憑證已建立!) 頁面上的名稱有些許差異。在這個頁面的 HTML 中,它 JavaScript 在static/js/core.js,從/data路由,然後建置頁面的視覺效果。

  • /data是一個 JSON API,它呈現要在儀表板中可視化的數據。此路由讀取用戶提供的數據,並使用comprehend_helper.py將使用者資料傳送至 Amazon Comprehend 以進行情緒分析和命名實體辨識 (NER)。亞馬遜理解的響應被格式化並返回為 JSON 對象。

部署架構

如需有關在 AWS 雲端上使用 Elastic Beanstalk 部署的應用程式之設計考量的詳細資訊,請參閱設計考量AWS Elastic Beanstalk 文件中的。

技術堆疊

  • Amazon Comprehend 

  • Elastic Beanstalk 

  • Flask 

自動化和擴充

Elastic Beanstalk 部署會自動設定負載平衡器和自動調整群組。如需更多組態選項,請參閱設定 Elastic Beanstalk 環境AWS Elastic Beanstalk 文件中的。

Tools

  • AWS 命令列界面 (AWS CLI)— AWS CLI 是統一的工具,可提供一致的界面,讓您與 AWS 的所有服務互動。

  • Amazon Comprehend-Amazon Comprehend 使用自然語言處理 (NLP) 擷取文件內容的洞察,無需特殊預處理。

  • AWS Elastic Beanstalk— Elastic Beanstalk 可協助您在 AWS 雲端快速部署和管理應用程式,無需了解執行這些應用程式的基礎設施。

  • EElastic Beanstalk CLI (EB CLI)— EB CLI 是 AWS Elastic Beanstalk 的命令列界面,可提供互動式命令,簡化自本機儲存庫建立、更新和監控環境的作業。

  • Flask-瓶框架使用 Python 執行數據處理和 API 調用,並提供交互式 Web 可視化與 Plotly。

Code

這種模式的代碼可以在 GitHub使用燒瓶和 AWS Elastic Beanstalk 以視覺化方式呈現 AI/ML 模型結果儲存庫。

Epics

任務描述所需技能
複製 GitHub 儲存庫。

從 GitHub 中提取應用程式程式碼使用燒瓶和 AWS Elastic Beanstalk 以視覺化方式呈現 AI/ML 模型結果儲存庫,方法是執行以下命令:

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 開發人員
在本機測試應用程式。

執行以下命令啟動 Flask 服務器:

python application.py

這會傳回關於執行中伺服器的資訊。您應該可以通過打開瀏覽器並訪問 http://localhost:5000 訪問該應用程序

請注意:如果您是在 AWS Cloud9 IDE 中執行應用程式,則需要將application.run()命令在application.py檔案,其中包含以下這一行:

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

您必須在部署之前還原此變更。

Python 開發人員
任務描述所需技能
啟動 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是 AWS 受管政策,可為已部署的應用程式提供對 Amazon 理解進行 API 呼叫的許可。

將附加ComprehendFullAccess原則aws-elasticbeanstalk-ec2-role(執行以下命令,會自動為您部署的 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

Important (重要)aws-elasticbeanstalk-ec2-role是在您的應用程序部署時創建的。您必須先完成部署程序,才能連結 AWS Identity and Access Management (IAM) 政策。

開發人員、安全架構師
造訪您已部署的應用程式。

成功部署應用程式之後,您可以透過執行eb open命令。

您也可以eb status命令來接收部署的詳細資料。部署 URL 列在CNAME

建築師、開發人員
任務描述所需技能
授權 Elastic Beanstalk 存取新模型。

確保 Elastic Beanstalk 具有新模型端點所需的存取權限。例如,如果您使用 Amazon SagMaker 終端節點,您的部署必須具有叫用終端節點的權限。 

如需此項目的詳細資訊,請參閱InvokeEndpoint在 Amazon SagMaker 文件中。

開發人員、安全架構師
將用戶數據發送到一個新模型。

若要變更此應用程式中的基礎 ML 模型,您必須變更下列檔案:

  • comprehend_helper.py-這是與 Amazon Comprehend 連接的 Python 腳本,處理響應,並將最終結果返回到應用程序。在此指令碼中,您可以將資料路由至 AWS 雲端上的其他 AI 服務,也可以將資料傳送至自訂模型終端節點。我們建議您也格式化這個指令碼中的結果,以進行邏輯分離和此模式的可重複使用性。

  • application.py— 如果您變更comprehend_helper.py指令碼或函數,您必須將應用程式更新為application.py指令碼來反映這些變更。

DataScientist
更新儀表板視覺效果。

通常,納入新的 ML 模型表示必須更新視覺效果才能反映新的結果。這些變更會在下列檔案中進行:

  • templates/dashboard.html— 預先建置的應用程式僅會說明兩個基本視覺效果。您可以在此檔案中調整整頁面的整個佈局。

  • static/js/core.js-這個腳本捕獲 Flask 服務器的/data路由,並使用 Pplotly 創建可視化。您可以新增或更新頁面的圖表。

網頁開發人員
任務描述所需技能
更新應用程式的需求檔案。

在將變更傳送至 Elastic Beanstalk 之前,請先更新requirements.txt文件通過在應用程序的根目錄中運行以下命令來反映任何新的 Python 模塊:

pip freeze > requirements.txt

Python 開發人員
重新部署 Elastic Beanstalk 環境。

若要確保您的應用程式變更會反映在 Elastic Beanstalk 部署中,請瀏覽至應用程式的根目錄,然後執行下列命令:

eb deploy

這會將最新版本的應用程式程式碼傳送到您現有的 Elastic Beanstalk 部署。

系統管理員, 架構師

其他資訊

故障診斷清單

以下是六個常見錯誤及其解決方案。

錯誤 1

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 主控台建立範例應用程式,以建立預設執行個體設定檔。如需此項目的詳細資訊,請參閱建立 Elastic Beanstalk 環境AWS Elastic Beanstalk 文件中的。

錯誤 2

Your WSGIPath refers to a file that does not exist.

解決方案:此錯誤發生在部署日誌中,因為 Elastic Beanstalk 期望將 Flask 代碼命名為application.py。如果您選擇了不同的名稱,請執行eb config並編輯 WSGiPath,如下程式碼範例所示:

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

請確定您將application.py使用您的檔案名稱。

您也可以利用甘尼康和加速檔案。如需此方法的詳細資訊,請參閱使用 Procfile 設定 WSGI 伺服器AWS Elastic Beanstalk 文件中的。

錯誤 3

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

解決方案:Elastic Beanstalk 期望代表您的 Flask 應用程序的變量被命名為application。請確定application.py檔案使用application作為變量名稱:

application = Flask(__name__)

錯誤 4

The EB CLI cannot find your SSH key file for keyname

解決方案使用 EB CLI 指定要使用的 key pair,或為部署的 EC2 執行個體建立 key pair。若要解決此錯誤,請執行eb init -i,其中一個選項會問:

Do you want to set up SSH for your instances?

回應Y建立 key pair 或指定現有金鑰對。

錯誤 5

我已經更新了我的代碼並重新部署,但我的部署沒有反映我的更改。

解決方案:如果您在部署中使用 Git 存放庫,請務必在重新部署之前新增並提交變更。

錯誤 6

您正在從 AWS Cloud9 IDE 預覽燒瓶應用程序並遇到錯誤。

解決方案如需此項目的詳細資訊,請參閱預覽 AWS Cloud9 IDE 中執行的應用程式儲存在 AWS Cloud9 文件中。

使用 Amazon Comprehend 的自然語言處理

選擇使用 Amazon Comprehend,您可以透過執行即時分析或非同步批次任務來偵測個別文字文件中的自訂實體。Amazon Comprehend 還可讓您訓練自訂實體辨識和文字分類模型,這些模型可透過建立終端節點即時使用。

此模式使用非同步批次工作,從包含多個文件的輸入檔中偵測情緒和實體。此模式提供的示例應用程序旨在為用戶上傳包含單列的 .csv 文件,每行包含一個文本文件。所以此comprehend_helper.py文件中的使用燒瓶和 AWS Elastic Beanstalk 以視覺化方式呈現 AI/ML 模型結果存儲庫讀取輸入文件,並將輸入發送到 Amazon Comprehend 進行處理。

批次偵測

Amazon Comprehend 檢查一批文檔的命名實體的文本,並返回檢測到的實體,位置,實體類型,以及表示亞馬遜理解的信心水平的分數。一次 API 呼叫最多可傳送 25 份文件,每份文件的大小小於 5,000 個位元組。您可以篩選結果,以僅顯示基於使用案例的特定實體。例如,您可以跳過‘quantity’實體類型,並為偵測到的實體設定臨界值分數 (例如,0.75)。建議您在選擇臨界值之前,先瀏覽特定使用案例的結果。如需此項目的詳細資訊,請參閱批次偵測在 Amazon Comprehend 文檔中。

BatchDetectSentiment

Amazon Comprehend 檢查一批傳入文檔,並返回每個文檔的普遍情緒(POSITIVENEUTRALMIXED, 或NEGATIVE。一次 API 呼叫最多可傳送 25 份文件,每份文件的大小小於 5,000 個位元組。分析情緒非常簡單,您可以選擇要在最終結果中顯示得分最高的情緒。如需此項目的詳細資訊,請參閱BatchDetectSentiment在 Amazon Comprehend 文檔中。

 

Flask 配置處理

燒瓶服務器使用一系列組態變數來控制伺服器的執行方式。這些變數可以包含偵錯輸出、工作階段 Token 或其他應用程式設定。您也可以定義可在應用程式執行時存取的自訂變數。設定組態變數有多種方法。

在這種模式中,配置在config.py,並繼承於application.py

  • config.py包含在應用程式啟動時設定的組態變數。在此應用程式中,DEBUG變量被定義為告訴應用程序在除錯模式請注意:在生產環境中執行應用程式時,不應使用偵錯模式。UPLOAD_FOLDER是一個自定義變量,該變量被定義為稍後在應用程序中引用,並通知它上傳的用戶數據應該存儲在哪裡。

  • application.py啟動瓶應用程序,並繼承在定義的配置設置config.py。這是由下列程式碼執行:

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