기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Flask와 Elastic Beanstalk를 사용하여 AI/ML 모델 결과 시각화
작성자: 크리스 코딜 (AWS) 과 두르가 서리
환경: PoC 또는 파일럿 | 기술: 기계 학습 및 AI, 분석, DevOps 웹 및 모바일 앱 | 워크로드: 오픈 소스 |
AWS 서비스: Amazon Comprehend, AWS Elastic Beanstalk |
요약
인공 지능 및 기계 학습(AI/ML) 서비스의 결과를 시각화하려면 개발자와 엔지니어가 사용자 지정해야 하는 복잡한 API 직접 호출이 필요한 경우가 많습니다. 분석가가 새 데이터 세트를 빠르게 탐색하려는 경우 이는 단점이 될 수 있습니다.
사용자가 자신의 데이터를 업로드하고 대시보드에서 모델 결과를 시각화할 수 있는 웹 기반 사용자 인터페이스(UI)를 사용함으로써 서비스의 접근성을 높이고 더 인터랙티브한 형태의 데이터 분석을 제공할 수 있습니다.
이 패턴은 Flask
사전 조건 및 제한 사항
사전 조건
활성 상태의 AWS 계정.
로컬 시스템에 설치 및 구성된 Command Line Interface(CLI). 이에 대한 자세한 내용은 CLI 설명서에서 기본 사항 구성을 참조하십시오. AWS Cloud9 통합 개발 환경(IDE)을 사용할 수도 있습니다. 이에 대한 자세한 내용은 Cloud9 설명서에서 Cloud9에 관한 Python 자습서 및 Cloud9 IDE의 실행 중인 애플리케이션 미리보기를 참조하십시오.
Flask의 웹 애플리케이션 프레임워크에 대한 이해. Flask에 대한 자세한 내용은 Flask 설명서에서 퀵스타트
를 참조하십시오. Python 버전 3.6 이상이 설치 및 구성되었습니다. Elastic Beanstalk 설명서에서 Python 개발 환경 설정의 지침을 따라 Python을 설치할 수 있습니다.
Elastic Beanstalk Command Line Interface(EB CLI)가 설치 및 구성되었습니다. 이에 대한 자세한 내용은 Elastic Beanstalk 설명서의 EB CLI 설치 및 EB CLI 구성을 참조하십시오.
제한 사항
이 패턴의 Flask 애플리케이션은 단일 텍스트 열을 사용하고 200행으로 제한되는 .csv 파일과 함께 작동하도록 설계되었습니다. 애플리케이션 코드는 다른 파일 유형 및 데이터 볼륨을 처리하도록 조정할 수 있습니다.
애플리케이션은 데이터 보존을 고려하지 않으며, 업로드된 사용자 파일을 수동으로 삭제할 때까지 계속 집계합니다. 영구 객체 스토리지를 위해 애플리케이션을 Amazon Simple Storage Service(Amazon S3)와 통합하거나, 서버리스 키 값 스토리지를 위해 Amazon DynamoDB와 같은 데이터베이스를 사용할 수 있습니다.
애플리케이션은 영어로 된 문서만 고려합니다. 하지만 Amazon Comprehend를 사용하여 문서의 기본 언어를 감지할 수 있습니다. 각 작업에 지원되는 언어에 대한 자세한 내용은 Amazon Comprehend 설명서에서 API 참조를 참조하십시오.
일반적인 오류와 해결 방법이 포함된 문제 해결 목록은 추가 정보 섹션에서 확인할 수 있습니다.
아키텍처
Flask 애플리케이션 아키텍처
Flask는 Python에서 웹 애플리케이션을 개발하기 위한 경량 프레임워크입니다. Python의 강력한 데이터 처리 기능과 풍부한 웹 UI를 결합하도록 설계되었습니다. 패턴의 Flask 애플리케이션은 사용자가 데이터를 업로드하고 추론을 위해 Amazon Comprehend로 데이터를 전송한 다음 결과를 시각화하는 웹 애플리케이션을 빌드하는 방법을 보여줍니다. 애플리케이션의 구조는 다음과 같습니다.
static
— 웹 UI를 지원하는 모든 정적 파일 (예: CSS JavaScript, 이미지) 을 포함합니다.templates
- 애플리케이션의 모든 HTML 페이지 포함userData
- 업로드된 사용자 데이터 저장application.py
- Flask 애플리케이션 파일comprehend_helper.py
- Amazon Comprehend에 대한 API 직접 호출 함수config.py
- 애플리케이션 구성 파일requirements.txt
- 애플리케이션에 필요한 Python 종속성
application.py
스크립트에는 4개의 Flask 경로로 구성된 웹 애플리케이션의 핵심 기능이 포함되어 있습니다. 다음 다이어그램은 이러한 Flask 경로를 보여줍니다.
![웹 애플리케이션의 핵심 기능을 구성하는 네 가지 Flask 경로.](images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/9ca6bad1-26e2-4262-98d0-d54c172336bf.png)
/
(은)는 애플리케이션의 루트이며 사용자를upload.html
페이지(templates
디렉토리에 저장되어 있음)로 디렉션합니다./saveFile
(은)는 사용자가 파일을 업로드한 후 호출되는 경로입니다. 이 경로는 사용자가 업로드한 파일이 포함된 HTML 양식을 통해POST
요청을 받습니다. 파일은userData
디렉터리에 저장되며 경로는 사용자를/dashboard
경로로 리디렉션합니다./dashboard
(은)는 사용자를dashboard.html
페이지로 보냅니다. 이 페이지의 HTML 내에서/data
라우트에서 데이터를 읽는 JavaScript 코드를 실행한 다음 페이지에 대한 시각화를 작성합니다.static/js/core.js
/data
(은)는 대시보드에서 시각화할 데이터를 제시하는 JSON API입니다. 이 경로는 사용자가 제공한 데이터를 읽고comprehend_helper.py
내 함수를 사용하여 사용자 데이터를 Amazon Comprehend로 전송해서 감정 분석 및 명명된 개체 인식(NER)을 수행합니다. Amazon Comprehend의 응답은 형식이 지정되고 JSON 객체로 반환됩니다.
배포 아키텍처
AWS 클라우드에서 Elastic Beanstalk를 사용하여 배포한 애플리케이션의 설계 고려 사항에 대한 자세한 내용은 AWS Elastic Beanstalk 설명서를 참조하십시오.
![플라스크와 Elastic Beanstalk를 사용하여 AI/ML 모델 결과를 시각화하기 위한 아키텍처 다이어그램.](images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/d691bfd2-e2ec-4830-8bff-ffa1e3a95c4a.png)
기술 스택
Amazon Comprehend
Elastic Beanstalk
Flask
자동화 및 규모 조정
Elastic Beanstalk 배포는 로드 밸런서 및 오토 스케일링 그룹을 사용하여 자동으로 설정됩니다. 추가 구성 옵션에 대해서는 Elastic Beanstalk 설명서에서 Elastic Beanstalk 환경 구성을 참조하십시오.
도구
AWS 명령줄 인터페이스 (AWS CLI) 는 AWS의 모든 부분과 상호 작용할 수 있는 일관된 인터페이스를 제공하는 통합 도구입니다.
Amazon Comprehend는 자연어 처리 (NLP) 를 사용하여 특별한 사전 처리 없이 문서 내용에 대한 통찰력을 추출합니다.
AWS Elastic Beanstalk를 사용하면 애플리케이션을 실행하는 인프라에 대해 배울 필요 없이 AWS 클라우드에서 애플리케이션을 빠르게 배포하고 관리할 수 있습니다.
Elastic Beanstalk CLI (EB CLI) 는 로컬 리포지토리에서 환경을 쉽게 생성, 업데이트 및 모니터링할 수 있는 대화형 명령을 제공하는 AWS Elastic Beanstalk의 명령줄 인터페이스입니다.
Flask
프레임워크는 Python을 사용하여 데이터 처리 및 API 호출을 수행하고 Plotly를 사용하여 대화형 웹 시각화를 제공합니다.
code
이 패턴의 코드는 플라스크와 AWS Elastic Beanstalk 리포지토리를 사용한 AI/ML 모델 결과 GitHub 시각화에서
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 복제합니다. GitHub | 다음 명령을 실행하여 Flask 및 AWS Elastic Beanstalk 리포지토리를 사용하여 GitHub 시각화 AI/ML 모델 결과에서
참고: SSH 키는 를 사용하여 구성해야 합니다. GitHub | 개발자 |
Python 모듈을 설치합니다. | 리포지토리를 복제하고 나면 새 로컬
| Python 개발자 |
로컬로 애플리케이션 테스트합니다. | 다음 명령을 실행하여 Flask 서버를 시작합니다.
이를 통해 실행 중인 서버에 대한 정보를 반환합니다. 브라우저를 열고 http://localhost:5000을 방문하여 애플리케이션에 액세스할 수 있어야 합니다. 참고: AWS Cloud9 IDE에서 애플리케이션을 실행하는 경우
배포하기 전에 이 변경 내용을 되돌려야 합니다. | Python 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Elastic Beanstalk 애플리케이션을 시작합니다. | 프로젝트를 Elastic Beanstalk 애플리케이션으로 시작하려면 애플리케이션의 루트 디렉터리에서 다음의 명령을 실행합니다.
중요:
더 많은 배포 구성 옵션을 보려면 | 아키텍트, 개발자 |
Elastic Beanstalk 환경을 배포합니다. | 애플리케이션의 루트 디렉터리에서 다음의 명령을 실행합니다.
참고: | 아키텍트, 개발자 |
Amazon Comprehend를 사용할 수 있도록 배포를 승인합니다. | 애플리케이션을 성공적으로 배포할 수 있더라도, Amazon Comprehend에 대한 액세스 권한과 함께 배포를 제공해야 합니다. 다음 명령을 실행하여
중요: | 개발자, 보안 아키텍트 |
배포된 애플리케이션을 방문합니다. | 애플리케이션이 성공적으로 배포되면
| 아키텍트, 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
새 모델에 액세스할 수 있도록 Elastic Beanstalk를 승인합니다. | Elastic Beanstalk에 새 모델 엔드포인트에 필요한 액세스 권한이 있는지 확인합니다. 예를 들어 Amazon SageMaker 엔드포인트를 사용하는 경우 배포에 엔드포인트를 호출할 권한이 있어야 합니다. 이에 대한 자세한 내용은 Amazon SageMaker 설명서를 참조하십시오. InvokeEndpoint | 개발자, 보안 아키텍트 |
사용자 데이터를 새 모델로 보냅니다. | 이 애플리케이션에서 기본 ML 모델을 변경하려면 다음 파일을 변경해야 합니다.
| 데이터 사이언티스트 |
대시보드 시각화를 업데이트합니다. | 일반적으로 새 ML 모델을 통합하면 새 결과를 반영하도록 시각화를 업데이트해야 합니다. 이 변경은 다음과 같이 이루어졌습니다.
| 웹 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
애플리케이션의 요구 사항 파일을 업데이트합니다. | 변경 내용을 Elastic Beanstalk에 보내기 전에 애플리케이션의 루트 디렉터리에서 다음 명령을 실행하여 새 Python 모듈을 반영하도록
| Python 개발자 |
Elastic Beanstalk 환경을 재배포합니다. | 애플리케이션 변경 사항이 Elastic Beanstalk 배포에 반영되도록 하려면 애플리케이션의 루트 디렉터리로 이동하여 다음 명령을 실행합니다.
그러면 최신 버전의 애플리케이션 코드가 기존 Elastic Beanstalk 배포로 전송됩니다. | 시스템 관리자, 아키텍트 |
관련 리소스
추가 정보
문제 해결 목록
다음은 6가지 일반적인 오류와 해결 방법입니다.
오류 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 설명서에서 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
(을)를 파일 이름으로 바꿔야 합니다.
Gunicorn 및 Procfile을 적극 활용할 수도 있습니다. 이 접근 방식에 대한 자세한 내용은 Elastic Beanstalk 설명서에서 Procfile을 사용하여 WSGI 서버 구성을 참조하십시오.
오류 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를 사용하여 어떤 키 페어를 사용할지 지정하거나 배포의 EC2 인스턴스를 위한 키 페어를 생성합니다. 오류를 해결하려면 eb init -i
(을)를 실행합니다. 그러면 옵션 중 하나에 다음 메시지가 표시됩니다.
Do you want to set up SSH for your instances?
Y
(으)로 응답하여 키 페어를 생성하거나 기존 키 페어를 지정합니다.
오류 5
코드를 업데이트하고 재배포했지만 배포에 변경 사항이 반영되지 않습니다.
해결 방법: 배포와 함께 Git 리포지토리를 사용하는 경우 재배포 전에 변경 내용을 추가하고 커밋해야 합니다.
오류 6
AWS Cloud9 IDE에서 Flask 애플리케이션을 미리보기 실행 중에 오류가 발생했습니다.
해결 방법: 이에 대한 자세한 내용은 AWS Cloud9 설명서에서 AWS Cloud9 IDE의 실행 중인 애플리케이션 미리보기를 참조하십시오.
Amazon Comprehend를 사용하는 자연어 처리
Amazon Comprehend를 사용을 선택하여 실시간 분석 또는 비동기 배치 작업을 실행함으로써 개별 텍스트 문서에서 사용자 지정 개체를 탐지할 수 있습니다. 또한 Amazon Comprehend를 사용하면 엔드포인트를 생성하여 실시간으로 사용할 수 있는 사용자 지정 개체 인식 및 텍스트 분류 모델을 훈련할 수 있습니다.
이 패턴은 비동기 배치 작업을 사용하여 여러 문서가 포함된 입력 파일에서 감성과 개체를 탐지합니다. 이 패턴에서 제공하는 샘플 애플리케이션은 사용자가 행당 하나의 텍스트 문서와 함께 하나의 열이 들어 있는 .csv 파일을 업로드하도록 설계되어 있습니다. 플라스크와 comprehend_helper.py
AWS Elastic Beanstalk 리포지토리를 사용한 AI/ML 모델 결과 GitHub 시각화에
BatchDetectEntities
Amazon Comprehend는 이름이 지정된 개체가 있는지 문서 배치의 텍스트를 검사하여 탐지된 엔터티, 위치, 엔터티 유형, 그리고 Amazon Comprehend의 신뢰 수준을 표시하는 점수를 반환합니다. 한 번의 API 직접 호출로 최대 25개의 문서를 전송할 수 있으며, 각 문서의 크기는 5,000바이트 미만입니다. 사용 사례에 따라 특정 엔터티만 표시하도록 결과를 필터링할 수 있습니다. 예를 들어 ‘quantity’
개체 유형을 건너뛰고 탐지된 개체에 대한 임계값 점수(예: 0.75)를 설정할 수 있습니다. 임계값을 선택하기 전에 특정 사용 사례에 대한 결과를 살펴보는 것이 좋습니다. 이에 대한 자세한 내용은 Amazon BatchDetectEntitiesComprehend 설명서를 참조하십시오.
BatchDetectSentiment
Amazon Comprehend는 수신 문서 배치를 검사하여 각 문서에 대한 일반적인 감성을 반환합니다(POSITIVE
, NEUTRAL
, MIXED
또는 NEGATIVE
). 한 번의 API 직접 호출로 최대 25개의 문서를 전송할 수 있으며, 각 문서의 크기는 5,000바이트 미만입니다. 감성에 대한 분석은 간단하며, 사용자가 가장 높은 점수의 감성을 선택하여 최종 결과에 표시합니다. 이에 대한 자세한 내용은 Amazon BatchDetectSentimentComprehend 설명서를 참조하십시오.
Flask 구성 처리
Flask 서버는 일련의 구성 변수
이 패턴에서는 구성이 config.py
에 정의되고 application.py
내에서 상속됩니다.
config.py
에는 애플리케이션의 스타트업 시 설정되는 구성 변수가 포함됩니다. 이 애플리케이션에서는 서버를 디버그 모드에서 실행하도록 애플리케이션에 지시하는 DEBUG
변수가 정의됩니다. 참고: 프로덕션 환경에서 애플리케이션을 실행할 때는 디버그 모드를 사용하면 안 됩니다.UPLOAD_FOLDER
(은)는 나중에 애플리케이션에서 참조하여 업로드된 사용자 데이터를 저장해야 하는 위치를 알려주도록 정의된 사용자 지정 변수입니다.application.py
(은)는 Flask 애플리케이션을 시작하고config.py
에서 정의된 구성 설정을 상속합니다. 이는 다음 코드에 의해 수행됩니다.
application = Flask(__name__) application.config.from_pyfile('config.py')