2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSAdvent Calendar 2019

Day 14

Sagemakerのアップデートで機械学習を完全に理解…したかった

Last updated at Posted at 2019-12-14

先日のre:Inventで多くのアップデートが発表された中、Sagemakerにかなり多くのアップデートが発表されました。

参考
https://dev.classmethod.jp/cloud/aws/reinvent2019-summary-sagemaker/
https://aws-seminar.smktg.jp/public/seminar/view/892

AWSとして機械学習に力を入れてるなあというのがはっきり見て取れますね。
また、おそらくAWS自身が機械学習を使って自分たちのサービスに組み込んでいるだろうと思われる機能追加も出てきています。

re:Inventの前ですけど、アノマリーディテクションとかは完全にそれですね。

さて、せっかく色々出たので「ここらで一つ触ってみよう」というエントリです。
既に知ってる人には特に得るものはないと思いますw

筆者の現在のレベルとしては

  • 機械学習に触れたことがない(聞いたことはありますが)
  • Sagemakerに触れたことがない

というわけで、ほぼ素人です。
色々参考にしながらやっていきます。

※なお、「完全に理解した」の定義についてはこちらを参考にしてください。
https://togetter.com/li/1268851

ノートブックインスタンスの作成

まずはコンソールに従ってノートブックインスタンスを作成します…と言いたいとこですが、どうやらその前にS3バケットが必要らしいので適当な名前で作っておきます。
ただし、名前に「sagemaker」を含める必要があるようです。
※今回は設定はすべてデフォルトで作成しています。

スクリーンショット 2019-12-14 16.17.36.png

ここで作ったバケットは、IAMロールを作成するときに指定します。
今回は初めてノートブックインスタンスを作成するので、過去に作成したIAMロールはもちろんありません。
なのでインスタンス作成時に合わせて作成することとします。

スクリーンショット 2019-12-14 16.18.52.png

それ以外の設定はデフォルトのまま作ります。

スクリーンショット 2019-12-14 16.20.44.png

作成には少し時間がかかりますが、ボタンを押してしばらく待っているとインスタンスが利用可能になります。

スクリーンショット 2019-12-14 16.34.28.png

Jupyter Notebookについての説明は(あまり詳しくできないというのもありますが)このへんの記事を参照
https://deepage.net/machine_learning/2016/12/13/jupyter_notebook.html

Pythonを実行するための環境と思い込んでたんですが、いろんな言語に対応してるんですね。

トレーニングしてみる

AWSの公式ドキュメントGetting Started的なものがあるのでそれに従います。

今回はConda_Python3の環境を利用します。
やることはぶっちゃけるとドキュメントに従ってコードを貼り付けて実行するだけです。
それぞれのコードで何やってるかはドキュメント内で解説されてるのでここでは割愛します。

最初に下記を貼り付けてRunを押します。
元のコードはこちら
バケット名は今回作成したものにしています。
※実はこれを最初にしていなかったがために後でエラーになったのでやり直しています。
なのでスクショの順番が少し変わっているところがあります。

import os
import boto3
import re
import copy
import time
from time import gmtime, strftime
from sagemaker import get_execution_role

role = get_execution_role()

region = boto3.Session().region_name

bucket='sagemaker-completely-understood' # Replace with your s3 bucket name
prefix = 'sagemaker/xgboost-mnist' # Used as part of the path in the bucket where you store data
bucket_path = 'https://s3-{}.amazonaws.com/{}'.format(region,bucket) # The URL to access the bucket

まずはデータセットをダウンロードします。
上記のドキュメントのコードを貼り付け、「Run」を押します。

スクリーンショット 2019-12-14 16.46.07.png

すると、データセットがダウンロードされます。
スクリーンショット 2019-12-14 16.46.39.png

次にデータセットを変換しS3にアップロードします。
うまくいくとこんな感じになるはずです。

スクリーンショット 2019-12-14 17.10.11.png スクリーンショット 2019-12-14 17.09.18.png

次はステップ5、モデルのトレーニングをします。

今回は流れに従ってXGBoostアルゴリズムを使うことにします。

そのまま実行しようとしたら下記のようなWARNINGが出てしまったので、少し貼り付けるコードを改変しました。

スクリーンショット 2019-12-14 17.12.50.png
import sagemaker

from sagemaker.amazon.amazon_estimator import get_image_uri

container = get_image_uri(boto3.Session().region_name, 'xgboost', '0.90-1')

このステップはこんな感じ

スクリーンショット 2019-12-14 17.16.25.png

コンソールに戻ってトレーニングジョブを見ると動いているのがわかりますね。

スクリーンショット 2019-12-14 17.17.29.png

最大15分ほどかかるそうなので待ちます。(自分は4分で終わりました。)
さすがに貼ったコードの意味を何も理解していないのはまずいので待っている間にコードを見返すのもいいでしょう。

次にステップ6のモデルのデプロイですが、今回はステップ 6.1: Amazon SageMaker ホスティングサービスにモデルをデプロイするに従います。
どうやらdeployメソッド一発で行えるようです。
6.1を選んだのでそのままステップ7.1: Amazon SageMaker ホスティングサービスにデプロイされるモデルの検証に進みます。

そのまま検証に進んだんですが、最後の検証でエラーになってしまいました。
ちょっと解消できそうにないのでここで断念。
うーん、でも大まかなここまでの流れはつかめたので今度やり直します。

完全に理解…できなかったよ…

AutoPilot

これだけだとあんまりなので、先日のre:Inventで発表されたAutoPilotを試してみます。
書こうと思った内容がほぼこちらの記事に書いてあったので、詳細はこちらを見てください(手抜き)
AutoPilotのサンプルはここにあります。

スクリーンショット 2019-12-14 18.27.30.png スクリーンショット 2019-12-14 18.27.34.png

useを選択して保存するとここに保存されます。
スクリーンショット 2019-12-14 18.28.18.png

こちら
に従ってやっていきます。
サンプルに文章も細かく書いてあるので、そのまま実行していきます。

途中でMLを実行してステータスを表示します。
ここでかなり待ちます。

スクリーンショット 2019-12-14 19.39.50.png

終わるとこんな感じになります。

スクリーンショット 2019-12-14 20.58.59.png

ここまで数時間ぐらいかかりました。

こんな感じでモデルががっつりできています。

スクリーンショット 2019-12-14 21.01.52.png

最終的にバッチ変換ジョブを実行して結果を見るとこんな感じになりました。
なんとなくそれっぽい?

スクリーンショット 2019-12-14 21.13.47.png

あとがき

ネタに走ったタイトルですが、いい加減機械学習のほうも少し触らなきゃと思って、その第一歩として手を付けました。
何もしてないと中々仕事で触ることもなくなってしまうので自分でやってみないといけませんね。
というわけで、理解はともかくとして「まず触ってみた」というものでした。
何をやってるか理解していくのはこれからですね、とかいうとタイトルに反してしまうw
環境を自分で用意するのは大変だなと思うので、サクッと実行環境つくれるのはいいかもしれませんね。

こんなことやってますが、明日DevOpsの試験を受けるために今日はがっつり対策しようと思ったのにだいぶ時間を取られちゃいました。
頑張ってきます。

参考にさせていただいた記事

全然前提知識がなかったので既に触っている記事を参考にさせていただきました。
いつも本当に助かっています。
https://dev.classmethod.jp/machine-learning/getting-started-with-amazon-sagemaker/
https://dev.classmethod.jp/cloud/aws/try-amazon-sagemaker-autopilot/

あとはもちろん公式ドキュメントも
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/gs.html

※追記

あとから見たら、ここに書いたことをやっただけで8ドルくらいかかってました。
ご利用は計画的に。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?