はじめに
本記事はAmazon SageMaker エンドポイント用のサーバーレスフロントエンドを構築するを一部変更して実施したものです。
変更内容は、開発環境をEC2からCloud9に変えた事です。
リージョンは「バージニア北部(us-east-1)」でお願いします。
ゴール
機械学習を使って、Sepal Length(がく片の長さ)、Sepal Width(がく片の幅)、Petal Length(花びらの長さ)、Petal Width(花びらの幅)の値からアヤメの品種(Setosa, Versicolor, Virginica)を特定するWebアプリの構築。
SageMaker - モデル作成~エンドポイント作成
コンソールのTOPページからSageMakerの画面に移動。
モデルの作成
左側のメニューの中の「モデル」をクリックして、「モデルの作成」をクリック。
「モデル名」にdecision-trees
を入力して、IAM ロールは「新しいロールの作成」を選択して、下図設定に合わせて「ロールの作成」をクリック。
そのまま下にスクロールして、「コンテナの定義1」に下記内容を入力して「モデルの作成」をクリック。
- 推論コードイメージの場所:
305705277353.dkr.ecr.us-east-1.amazonaws.com/decision-trees-sample:latest
- アーティファクトの場所 - オプション:
s3://aws-machine-learning-blog/artifacts/decision-trees/model.tar.gz
エンドポイント設定の作成
左側のメニューの中の「エンドポイント設定」をクリックして、「エンドポイント設定の作成」をクリック。
「エンドポイント設定名」にdecision-trees
を入力して、「モデルの追加」をクリック。
decision-trees
を選択して、「保存」をクリック。
元の画面に戻ったら下にスクロールして「エンドポイント設定の作成」をクリック。
エンドポイントの作成
左側のメニューの中の「エンドポイント」をクリックして、「エンドポイントの作成」をクリック。
エンドポイントの設定を下記の通りに入力して、「エンドポイント設定の選択」をクリック。
- エンドポイント名:
decision-trees
- エンドポイント設定のアタッチ:
既存のエンドポイント設定の使用
- エンドポイント設定:
decision-trees
「新しいエンドポイントの設定」が表示されるので内容を確認して、「エンドポイントの作成」をクリック。
IAM - Credentials(AdministratorAccess)の取得
Cloud9のターミナルでCLIによる操作を実行するための権限を持ったユーザーを作成。
アクセスキーIDとシークレットアクセスキーの取得
コンソールのTOPページからIAMの画面に移動。
左のメニューから「ユーザー」をクリックして、「ユーザーを追加」をクリック。
任意のユーザー名(画面はadmin
)を入力して、「アクセスの種類」-「プログラムによるアクセス」にチェックをいれて「次のステップ: アクセス権限」をクリック。
「既存のポリシーを直接アタッチ」をクリックして、「AdministratorAccess」にチェックをつけて「次のステップ: タグ」をクリック。
何も入力せずに「次のステップ: 確認」をクリック。
設定内容を確認して「ユーザーの作成」をクリック。
アクセスキーIDとシークレットアクセスキーをメモして「閉じる」をクリック。(注. シークレットアクセスキーは後で確認できません)
Cloud9
開発環境を構築。
Cloud9の環境構築・設定
コンソールのTOPページからCloud9の画面に移動して、「Create Envionment」をクリック。
確認画面が出るので、内容を確認して「Create Environment」をクリック
画面右上の「Preferences(歯車のアイコン)」をクリックして、Preferences画面が出現したら、「Python Support」をクリックして、「Python Version」をPython 3
に変更。
画面下のコンソール画面から呼び出すpythonを3系に変更
画面下のコンソール画面で下記コマンドを実行。
alias python=python36
alias pip=pip-3.6
リージョンを設定
「AWS SETTINGS」をクリックして、「AWS Region」をSageMakerのエンドポイントのリージョンに合わせる
Chaliceのセットアップ
Chaliceとは: AWS Lambda & API Gatewayを使ったPythonサーバーレスフレームワーク
Chaliceのメリット:ソースコードを解析して、必要なポリシーを特定、作成・更新・削除を自動的に行ってくれる。
Chaliceのインストール・設定
ChaliceとAWS SDK for Python (Boto3) をインストール
画面下のコンソール画面で下記コマンドを実行
sudo pip install chalice boto3
アプリケーションのリージョンをモデルと同じリージョンにする為とアクセス権限を設定する為に、次のコマンドで環境変数を設定
<YOUR_ACCESS_KEY>
と<YOUR_SECRET_ACCESS_KEY>
には「AdministratorAccess - Credentialsの取得」でメモした、アクセスキーIDとシークレットアクセスキーをそれぞれ入力
export AWS_ACCESS_KEY_ID=<YOUR_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<YOUR_SECRET_ACCESS_KEY>
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
サンプルアプリケーションのデプロイ
画面下のコンソール画面で下記コマンドを実行。
chalice deploy
※chalice delete
で削除可能
デプロイ後に表示される「Rest API URL」をメモしておくこと。
HTMLユーザーインターフェースの作成
ユーザーがSageMakerを使用するためのHTMLフォームを作成。
Webサイトホスティング用のS3バケットの作成
画面下のコンソール画面で下記コマンド(<bucket name>
は任意の値を入力。)を実行。
aws s3api create-bucket --bucket <bucket name> --region us-east-1
aws s3 website s3://<bucket name>/ --index-document index.html --error-document error.html
index.htmlファイルの作成
画面下のコンソール画面で下記コマンドを実行。
wget https://s3.amazonaws.com/aws-machine-learning-blog/artifacts/decision-trees/index.html
<your rest api URL>
にはデプロイしたときに記録したURLを入力(index.html内の<your rest api URL>
を置換しているだけ)
sed -i s@CHALICE_ENDPOINT@<your rest api URL>@g index.html
S3にアップロード
画面下のコンソール画面で下記コマンドを実行。
aws s3 cp index.html s3://<bucket name>/index.html --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
機械学習アプリを使ってみる
http://<bucket_name>.s3.amazonaws.com/index.html
にアクセスすると、冒頭のゴールで記載した通りの4項目が表示されるので、適当な値を入力して、「Submit」ボタンをクリック。