AWS SageMaker でトレーニングしてみてわかったこと

この記事は[筋肉エンジニア アドベントカレンダー](https://qiita.com/advent-calendar/2017/mdd)の 23 日目です。

私は筋肉エンジニアというほど筋肉があるわけではないのですが、
今年からボルダリングにハマっていることもあり、筋肉に興味が湧いたため、参加してみることにしました。

# マクラ

私が最近筋肉について学んだことといえば、「筋力」と「パワー」は異なる、ということと、筋トレのパフォーマンスは「パワー」に着目するべきだ、ということです。
詳しくは下記の記事を参照していただきたいのですが、

https://ipping.jp/1835#13

> なぜなら、パワーは「力 × 速度」だからです。
...
> 縦軸が力(Force）で横軸が速度（Velocity）です。力と速度を掛けたものがパワーです。

つまり、競技パフォーマンス、私でいえばより良く壁を登る(ボルダリング) には、
Power、つまりP に着目することがとても重要なのです。

みなさん、**P が重要**ですよ。覚えておいてください。


... さて、筋肉といえばトレーニング、
トレーニングといえば機械学習ですね!

というわけで、今回は AWS Sage Maker を触ってみた、という記事です。

[公式ページ](https://aws.amazon.com/jp/sagemaker/) によると、

> 機械学習モデルを大規模に構築、トレーニング、デプロイ

> Amazon SageMaker は、開発者やデータサイエンティストが機械学習モデルをあらゆる規模ですばやく簡単に構築、トレーニング、デプロイできるようにするフルマネージドサービスです。Amazon SageMaker を使用すると、開発者による機械学習を通常減速させるような障害すべてを排除できます。

とのことです。

正直、機械学習を少しかじり始めているだけの自分にとっては、説明を読むだけでは何ができるのか、なんとな〜くしかわかりません。
なので、実際に触ってみることにしました。


# いきなり結論

- いわば、クラウド上にあるJupyter Notebook 環境。
- 学習(トレーニング) したモデルをS3 に置いておいておくこともできるし、エンドポイントを設定してモデルを利用することもできる。
- API もあるので、定期的にジョブを作成・学習を回して、常に最新のモデルを利用できる。
    - ※ CloudWatch のRule でできるかなと思ったけど、現時点ではターゲットで選択できなかったので、Lambda から呼び出す必要がありそう。

以上。。!
やばい、あんま書くことなかった。。
ということで、画像を貼ってごまかしておく。

サービスを有効化すると、こんな画面になります。
キャプチャは「ノートブックインスタンス」を作成したところです。

<img width="1060" alt="Screen Shot 2017-12-23 at 21.33.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/e90389c6-9cc4-fafb-d93a-1ec8133d7b7d.png">

ここから「オープン」のリンクをたどると、おなじみのJupyter Notebook 画面にアクセスできます。

<img width="966" alt="Screen Shot 2017-12-23 at 21.34.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/744db472-6588-3ae2-894e-ef630feb9566.png">

この、「sample-notebooks」の中を見ると、ご丁寧にチュートリアル的なNotebook がいくつか入っています。

<img width="809" alt="Screen Shot 2017-12-23 at 22.04.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/bad9be27-0bcd-402c-1193-b0efb1fd0a12.png">

試しに「sagemaker-python-sdk」の、「1P_kmeans_highlevel」を開いてみると、こんなかんじで、機械学習ではおなじみのMNIST (手書きの数字を当てるやつ) をK means 法で学習する、というのを、何も考えずにポチポチ実行していくだけでできちゃったりします。

<img width="943" alt="Screen Shot 2017-12-23 at 21.36.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/d759de37-2d7d-2879-9240-90327eb7fba6.png">

S3 に入力データを置いたり、学習結果をS3 に吐き出したりできます。

<img width="936" alt="Screen Shot 2017-12-23 at 21.36.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/881c50b0-856f-0bcc-2aa9-b33eb7f5f37c.png">

あとはこんなかんじで、「deploy」ってやると、勝手にendpoint にしてくれるのは便利っぽかったです。

<img width="925" alt="Screen Shot 2017-12-23 at 22.18.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/3e91da9a-442a-e6c1-dfbc-aeadf8305678.png">

ということで、AWS Sage Maker を使えば、環境の構築や運用のことはあまり考えることなく、大事なトレーニングに集中することができますね!


# つまづいたところ

[公式ページ](https://aws.amazon.com/jp/sagemaker/) の一番下に紹介されている[ブログ記事](https://aws.amazon.com/jp/blogs/aws/sagemaker/) に、「[CIFAR-10](http://www.cs.toronto.edu/~kriz/cifar.html)」というデータセットを使っている例がありました。

これを試そうと思い、Notebook の`sample-notebooks/sagemaker-python-sdk/mxnet_gluon_cifar10` を実行していったところ、

<img width="917" alt="Screen Shot 2017-12-23 at 22.36.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/27788/c96930ac-27de-e46c-5666-45bf6e0e1531.png">

こんなかんじでエラーになりました。

指定したインスタンスタイプはデフォルトで起動できる数が決まっているようですね。

[インスタンスタイプ](https://aws.amazon.com/jp/sagemaker/pricing/instance-types/)をあらためて見てみると、ml.p* ファミリーがGPU を積んでるインスタンスなんですね。

そう、**P** ファミリーが、ね。。


# Sage

AWS SageMaker のデフォルト設定とかけまして、
動きのノロいマッチョと解きます。
その心は。。。


**P** が足りません。


おあとがよろしいようで。