본문 바로가기
AI

AWS SageMaker 로 머신러닝 맛보기 1탄

by david100gom 2019. 3. 7.

AWS SageMaker 로 머신러닝 맛보기 1탄

 

1. 전체 플로우


https://aws.amazon.com/ko/blogs/korea/build-a-serverless-frontend-for-an-amazon-sagemaker-endpoint/ 블로그 내용을 따라하면서 정리하는 차원에서 작성하였습니다~ 

인용 : https://aws.amazon.com/ko/blogs/korea/build-a-serverless-frontend-for-an-amazon-sagemaker-endpoint/ 

Amazon SageMaker는 AWS에서 기계 학습 모델을 구축 및 교육하고 프로덕션 환경에 배포할 수 있는 강력한 플랫폼을 제공합니다. 이 강력한 플랫폼과 Amazon Simple Storage Service(S3), Amazon API Gateway 및 AWS Lambda의 서버리스 기능을 결합하면, Amazon SageMaker 엔드포인트를 잠재적으로 다양한 소스로부터 새로운 입력 데이터를 수락하고 최종 사용자에게 결과로 나온 추론을 제시하는 웹 애플리케이션으로 변환할 수 있습니다.

이 블로그 게시물에서는 유명한 Iris dataset를 사용하여 간단한 SageMaker 모델을 생성하고 이를 Amazon SageMaker엔드포인트로서 배포하겠습니다. 그런 다음 Chalice 패키지를 통해 API Gateway 엔드포인트를 생성하여 고유한 예측을 생성하는 SageMaker 엔드포인트를 호출할 Lambda 함수를 트리거하겠습니다. 마지막으로 애플리케이션의 사용자 인터페이스 역할을 하도록 Amazon S3에서 정적 HTML 양식을 생성하겠습니다. 이 엔드포인트는 새로운 사용자 데이터를 수락하고 해당 데이터를 기반으로 온디맨드 예측을 생성하여 사용자의 브라우저로 반환할 수 있는 간단한 웹 앱입니다.

이는 SageMaker 설명서에 제안된 아키텍처와 유사한 AWS Lambda 아키텍처의 한 버전이지만, 모든 사용 사례에 해당하는 최적의 아키텍처가 아닐 수 있습니다. 지연 시간이 중요한 고려 사항인 경우, SageMaker 엔드포인트에 호스팅된 Docker 컨테이너에 직접 데이터 변환을 구축하는 것이 좋습니다. 하지만 단일 엔드포인트와 상호 작용하는 여러 잠재적 프런트엔드 및/또는 데이터 소스가 있는 복잡한 애플리케이션을 보유한 경우에는 API Gateway와 Lambda를 사용하는 것이 가장 적합합니다. 이 블로그 게시물을 통해 데모, 개념 증명 및 프로토타입을 시작할 수 있습니다. 하지만 프로덕션 아키텍처는 다음 예제와 상당히 다를 수 있습니다.

2. Create model


AWS Management Console 에서 Machine Learning > Amazon SageMaker 를 선택한다. 테스트를 위해서 US East (N. Virginia) 를 선택합니다.

아래와 같이 inference > Models > Create model 를 클릭합니다.

Model namedecision-trees 로 설정하고, IAM role 항목에서 Create a new role 를 선택합니다.

 아래와 같이 S3 buckets you specify 부분을 None 로 선택후 Create role 를 선택합니다.

아래와 같이 IAM role 이 생성됩니다.

Network 항목은 디폴트인 No VPC 로 놔둡니다.

Provide model artifacts and inference image 항목에는 아래와 같이 입력합니다.
  •  Location of inference code image : 305705277353.dkr.ecr.us-east-1.amazonaws.com/decision-trees-sample:latest
  •  Location of model artifacts : s3://aws-machine-learning-blog/artifacts/decision-trees/model.tar.gz

Create model를 클릭하면 아래와 같이 decision-trees 라는 이름의 Model 이 생성됩니다.

3. Create Endpoint 


이제는 Endpoint 를 생성해보도록 하겠습니다. Endpoint configurations 생성 > Endpoints 생성하는 순서로 진행하겠습니다. 참고로 Endpoints 메뉴에서도 Endpoint configurations 생성이 가능합니다. 

우선 Inference > Endpoints configurations 를 선택합니다.

3-1 Create Endpoints configurations


Endpoint configuration name 에 decision-trees 로 입력합니다. 그 다음으로 Add model 을 클릭해서 위에서 생성한 decision-trees 라는 이름의 model를 선택합니다.

그 다음 Create endpoint configuration 을 클릭하면 아래와 같이 Endpoint configuration 이 생성됩니다.

3-2 Create Endpoints


Endpoints 를 생성하도록 하겠습니다. 아래와 같이 Endpoint name 에 decision-trees 를 입력하고, Endpoint configuration 은 기존에 생성한  Endpoint configuration 인 decision-trees 를 선택하고 Select endpoint configuration 을 클릭합니다.

마지막으로 아래 있는 Create endpoints 를 클릭하면 Endpoint 가 생성됩니다.

주의 : Endpoint 를 실행해 두면 비용이 계속 발생합니다.

 

4. Chalice 를 이용한 서버리스 API 생성


최종 사용자에게 제공할 결과를 생성하기 위해서는 Endpoint 에 액세스할수 있는 API를 생성해야 합니다. 여기는 Chalice 프레임워크를 이용하도록 하겠습니다. 아래는 Chalice 에 대한 내용입니다.

Chalice github : https://github.com/aws/chalice

Chalice is a microframework for writing serverless apps in python. It allows you to quickly create and deploy applications that use AWS Lambda. It provides:

Chalice 는 AWS 를 위한 서버리스 마이크로 프레임워크입니다. 이를 사용하면 Amazon API Gateway 및 AWS Lambda 를 사용하는 애플리케이션을 신속하게 생성하고 배포할수 있습니다.

4-1 개발환경


테스트를 위한 EC2 인스턴스를 생성(저렴한 t2.micro) 하기 전에, IAM role 를 하나 생성합니다.

Security, Identity, & Compliance > IAM role 메뉴에서 Create role 를 클릭합니다. 그리고, 아래와 같이 Select type of trusted entity에서 AWS service >  EC2 선택합니다. 그런다음 밑에 있는 Next: Permissions 를 클릭합니다.

 

다음 단계인 아래의 화면에서 다음의 4개 권한을 검색을 통해 선택해 줍니다.

  • AmazonAPIGatewayAdministrator 
  • AWSLambdaFullAccess
  • AmazonS3FullAccess
  • IAMFullAccess

4개를 모두 선택했다면 아래에 있는 Next:Tags 버튼을 클릭합니다. Tags 는 그냥 입력없이 Next:Review 버튼을 클릭합니다.

마지막 화면에서 Role name 을 chalice-dev 로 입력하고, Role description 에는 "Allows an EC2 instance to deploy a Chalice application" 라고 입력 하신 후, 아래의 Create role 버튼을 클릭하면 role 이 생성됩니다.

다음으로 Amazon Linux AMI 를 이용하여 t2.micro 인스턴스를 생성한다. 생성 중 IAM role 를 chalice-dev 로 매핑시켜줍니다. (먼저 인스턴스 생성 후 Attach/Replace IAM role 메뉴를 이용하여 role를 매핑시켜 줘도 됩니다.)

4-2 Chalice 설정


EC2 인스턴스에  ssh로 접속하여 아래의 명령어로 Chalice와 Python용 AWS SDK(Boto3)를 설치합니다.

sudo pip install chalice boto3

 

아래와 같이 환경 변수를 설정합니다.

export AWS_DEFAULT_REGION=us-east-1

 

아래와 같이 샘플 애플리케이션을 다운로드 받습니다.

wget https://s3.amazonaws.com/aws-machine-learning-blog/artifacts/decision-trees/decision-trees.tgz
tar xzvf decision-trees.tgz --warning=no-unknown-keyword
cd decision-trees
 
 
이 패키지의 app.py 파일은 우리가 앞에서 배포한 사전에 구축된 모델과 상호 작용하도록 특별히 설계되었습니다. 또한, Chalice가 프런트엔드에서 필요한 종속성이 무엇인지 알 수 있도록 requirements.txt file을 다운로드했으며, “.chalice” 폴더에는 추가로 숨겨진 구성 파일이 있습니다. 이는 정책 권한을 관리하는 데 도움이 됩니다.

아래와 같이 deploy 를 실행합니다. 

chalice deploy
 

 

실행이 완료되면 아래와 같이 decision-trees-dev 라는 이름의 Lambda 함수를 생성하고 Rest API URL를 반환합니다. 다음에 생성할 테스트용 HTML 파일에 해당 URL를 입력해야 하기 때문에 따로 잘 적어둡니다.

 

그리고, Lambda 메뉴에 가면 decision-trees-dev function 이 생성되어 있는것을 볼수 있습니다.

 

4-3 테스트용 HTML 파일 생성


우선 AWS S3 에 sgmk-dev 라는 버킷을 하나 생성합니다. 아래 명령어중 하나로 생성합니다.

aws s3api create-bucket --bucket sgmk-dev --region us-east-1 
또는 
aws s3 mb s3://sgmk-dev --region us-east-1

아래 명령어로 sgmk-dev 버킷의 Static website hosting 을 활성화하고 index 및 Error document 을 설정해 줍니다.

aws s3 website s3://sgmk-dev/ --index-document index.html --error-document error.html
 
아래 명령어로 샘플 index.html 를 다운로드 받습니다.
 
wget https://s3.amazonaws.com/aws-machine-learning-blog/artifacts/decision-trees/index.html
 
 
sed 명령어로 index.html 소스 안에 있는 CHALICE_ENDPOINT 텍스트를 위에서 생성한 Rest API URL 로 교체합니다.

ex) sed -i s@CHALICE_ENDPOINT@<your rest api URL>@g index.html

sed -i s@CHALICE_ENDPOINT@https://wi0q8pjkzh.execute-api.us-east-1.amazonaws.com/api/@g index.html

 

cat index.html 를 실행하면 아래와 같이 CHALICE_ENDPOINT 가 https://wi0q8pjkzh.execute-api.us-east-1.amazonaws.com/api/ 로 변경된것을 보실수 있습니다.

아래 명령어로 방금 수정한 index.html 를 S3 sgmk-dev 버킷으로 업로드 합니다.

aws s3 cp index.html s3://sgmk-dev/index.html --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

 

5. 테스트 해보기


웹 브라우저에서 http://sgmk-dev.s3.amazonaws.com/index.html 를 호출합니다. 아래와 같은 화면이 나옵니다.

  • Sepal Length : 꽃받침 길이
  • Sepal Width : 꽃받침 폭
  • Petal Length : 꽃잎 길이
  • Petal Width : 꽃잎 폭 

입력하고 Submit 를 누르면 해당 데이터를 기반으로 온디맨드 예측을 생성하여 결과를 반환하게 됩니다.

지금까지 AWS SageMaker 로 머신러닝 맛보기 이였습니다.

 

참고 URL

 

'AI' 카테고리의 다른 글

머신러닝 맛보기 7탄  (0) 2019.05.09
머신러닝 맛보기 6탄  (0) 2019.05.02
머신러닝 맛보기 5탄  (0) 2019.04.18
머신러닝 맛보기 4탄 - 핸즈온  (0) 2019.04.08
머신러닝 맛보기 3탄  (0) 2019.03.19
머신러닝 맛보기 2탄  (0) 2019.03.19
머신러닝 맛보기 1탄  (0) 2019.03.18
딥러닝을 위한 준비 1탄 (윈도우 버전)  (0) 2019.03.06

댓글