Amazon SageMaker Studioをつかってみる

## やりたいこと
Amazon SageMaker Studioってどんなことができるの？を疑問に、実際に手を動かしてサービスの感触などをつかんでみたい。

## 参考サイト
* [AWS再入門ブログリレー2022 Amazon SageMaker 編](https://dev.classmethod.jp/articles/re-introduction-2022-sagemaker/)
* [Amazon SageMaker Studioを使って機械学習をやってみる](https://dev.classmethod.jp/articles/try-sagemaker-studio/)

## SageMaker Studioとは
Amazon SagemakerとAmazon Sagemaker Studioはどのあたりが違うのでしょうか。
上記の参考サイトより：
>Amazon SageMaker は、機械学習モデルの構築から
トレーニング〜デプロイまで可能にするマネージド型サービスです。
機械学習を実際におこなっていく上で問題となるインフラ問題やトレーニング、
パラメータの設定やモデルの評価など多くの部分についてやってくれます。
※100%全部やってくれるわけではないし、機械学習に関する知識は必要です

>Amazon SageMaker Studioとは、「機械学習のための統合開発環境」です。
Amazon SageMaker Studio はウェブベースのUIを持ち、
機械学習に関連するすべての手順を実行可能です。
モデルの構築、モデルのトレーニング、パラメータの調整やデプロイ、
さらにエンドポイントに作成や推論実行もできます。
これらの作業はすべてAmazon SageMaker StudioのUI上で実行可能です。

詳しくは[こちら](https://dev.classmethod.jp/articles/try-sagemaker-studio/)

## やってみる
### SageMaker Studioの起動
SageMakerコンソールから「Studio」を選択し、「Create a SageMaker domain」をクリック。Studioの起動には「ドメイン」が必要らしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/f08f2502-4afe-4dab-3655-8af3bc6b1013.png)

今回はStandartd SetUpを使っていきます。Domain nameを設定し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/5d664a2e-ead5-618b-e7fd-94513c6a537f.png)

IAMロールを作成していきます。ロールに紐づけるS3バケットは事前に作成していたバケット名を指定します。(未作成であればS3コンソールから適当に作成)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/f9b7fdf9-41d4-d3e7-7487-8e54d82b7426.png)

ネットワーク部分は、今回はとりあえずインターネットとつなげられるようにPublic-subnetとWebSGを指定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/a6b653c0-8606-825f-62b3-e465065441df.png)

後はデフォルトで進めていき、最後まで進んだら「Submit」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/848c4932-947f-94b2-6547-4b0170c7d853.png)

5分くらい待ちました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/ae46d4f4-2bd4-9978-f39c-c80271de9fc1.png)

無事に作成できました。この画面からStudioを起動できるみたいです。StudioってAppの枠組みになるんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/19e386f2-6535-8341-12e2-68898439b83c.png)

どんな画面が起動するのか、、、ワクワクです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/83fa6deb-bb46-3296-d269-8e3957176f3f.png)

初回起動は時間かかりましたが、カッコいい画面が現れました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/2f7287d4-8680-3928-5378-a5c6e8c9ea59.png)

### Studioで手を動かしてみる
ひとまず今回用いるコードは上の[参考サイト内](https://dev.classmethod.jp/articles/re-introduction-2022-sagemaker/)で公開されていた[サンプルコード](https://github.com/cH6noota/SageMakerSample)を使わせていただきます![スクリーンショット 2023-04-07 164416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/4306a704-2bb0-64bd-0a7d-594c00938973.png)
。

クローンするにはSystem Terminalを選択すればよさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/ff860227-8901-9b2a-1ea3-239d2551ca12.png)

以下でクローン
```
$ git clone https://github.com/cH6noota/SageMakerSample.git
```
無事にクローンして、フォルダ内にファイルも確認できました。このように操作を少し実施しただけでも「統合開発環境」としてのイメージがつきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/e3a68441-4ac3-5e72-ce1f-7b9428247f28.png)

### データセット作成
[参考サイト内](https://dev.classmethod.jp/articles/re-introduction-2022-sagemaker/)の内容にそって、まずは`train.ipynb`を実行してみたいと思います。
こちらのファイルを開こうとした際に、以下のようなnotebook環境のセットアップウィンドウがポップアップされました。なるほど、ここでマシンのスペックを決めたりできるんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/ddb390d2-c2e3-35c4-e15f-40c818eec7a3.png)

こんな感じのファイルの中身なので、上から順に素直に実施してみます。
`backet_name`を指定しているところだけ、`sagemaker-studio-data-01`に変更してみました。
![スクリーンショット 2023-04-07 161644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/41ce995a-dd02-f696-4b27-c70cc249d9e0.png)

実行後にS3バケットを見てみると、データが入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/fd861bcb-9c77-334c-46ed-0cb9029f43f3.png)

### モデルの定義・学習
引き続きサンプルコードの実行を進めます。以下の部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/aa248989-f951-511d-9818-a536b6aeeea2.png)

モデル自体は別ファイルの`main.py`に記載されているみたいです。内容をのぞいてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/d657a92e-11a2-906a-9986-a9590f66debc.png)
全てはキャプチャーしてませんが、こちらで実施している内容は以下の内容のようです。
>今回は、Xceptionで転移学習を行ってます
>ノートブックからは、モデルの記述してあるファイル名、入力するパラメータやインスタンスタイプ、フレームワークのバージョンを指定し、fitで学習を行います。

このfitによる学習を実施する部分（上のキャプチャの[69]の部分）にて、以下のようなエラーとなってしまいました。どうやら今回の検証用のStudioではスペックが足りないようです。こちらのLimitを解除するにはAWSサポートからリクエストを送る必要があるとのことでした。（[stackoverflow](https://stackoverflow.com/questions/58535527/amazon-sagemaker-resourcelimitexceeded-error-for-xgboost-free-tier)）
![スクリーンショット 2023-04-07 164416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/0003b2f4-f06e-0eed-187f-f969e7cbed02.png)


続けるか迷いましたが、実際にStudioを起動してみて、「統合開発環境」と言われるゆえんやnotebookなどをネイティブに使えそうな部分が分かったので今回はここまででよしとしようかと思います。
もう少し軽いMLモデルのサンプル、もしくは自分で適当に作ったようなサンプルで今後の検証は実施していこうと思います。

## おわりに
このAmazon SageMaker Studioですが、この記事の執筆に際して触れたのはメインのNotebookへの記述の部分でしたが、他にも便利な機能「ExperimentやAutopilot」など豊富にありそうです。少しずつ触れて慣れていきたいと思います。