AWSのSage Makerを触ってみた。その時の感想を記しておく。
※初めてプログラミングに触って勉強しようとする努力家たちのために。
第1に、非常に「ラクラク」「楽しい」「ノンストレス」。(単に分析データを触るだけなら)
私自身は、エンジニアで社会人をはじめ、エンジニアを離れ、今はエンジニアをやっている。
だから、普通のエンジニア以上に、エンジニアじゃない人たちと接して、同じ感覚で仕事をしてきた感覚が強いと思う。また、最初の言語はアセンブラだった為、サーバー周り(インフラと表現する)という経験はなかった。もちろん役回りにもよると思うが。
広告代理店にいってその後、エンジニアに復帰して、Webアプリを作り始めた時に一番ストレスに感じ、苦労したのがインフラ環境を整えることだった。(未だに、恐怖意識が一番強く、DockerやChefなどインフラas a code の世界万歳と思っている。。。)
本の通りにやってもうまくインストールできなかったり、エラーが出まくったり・・・調べるだけで日が暮れて、イライラだけが募るという・
という経験から、おそらく皆そこでつまづいて、諦める人が多いのかな、と思う。
でもインフラ環境の準備がなくなれば、ノンエンジニアでもExcelを使いこなせている人は、少なくとも機会さえあればプログラミングができると思っている。(もちろん、Excelができない人を否定しているわけではなく)そういうのが向いてそうな人は、とてもたくさんいるし、そういう人が触れるようになったら、本当の分析がしやすくなると思う。
SageMakerに触った感覚。こんな、楽にプログラムにたどり着けたのはExcel以来だと思った。
明日、人にプログラミングを教えてくれ、と言われたら、SageMakerを使うな、と思った。機械学習とか関係なく。
AWSは正直ノンエンジニアからしたらハードルが高いかもしれない。他の機能は、多分、ほぼ想像の通り、今は触らないほうがいいかもしれない。バケットポリシーとか、未だにUI化されていないし(あれはできるでしょ、と思っている・・・)
でも、SageMakerは違う。めちゃくちゃ簡単。数分でプログラミングだけやっていれば良い環境が出来上がる。最高だ。(つまずきそうなところも記載しておいたので、これを読めば大丈夫、かと)
データが好きな人。マーケティングが好きな人、分析が好きな人。絶対触った方がいい。もちろん、Pythonの本を開きながらでいいから。
Pythonでつまずくとしたら、文字型(str ,int)などかな、キャスト(型変換)の仕方などを少し押さえておけば、なんかうまく処理できなければそこらへんを疑うといいかも。コードは書きやすいし、Notebookで順次やっていけばエラーもすぐ潰せる。
まだ、私自身も勉強中だが、一番ハードルになりそうなのは、S3(AWSのストレージサービス)からデータを持ってくるところは障壁になるかもしれない。そんな人たちのために書いておこう。
AWSはbucket(バケット)という親ディレクトリを作って、そこにディレクトリ階層を指定する使い方になる。
import os
import boto3
bucket = 'your_bucket_name' # 作成したバケット名を設定
prefix = 'dir/path/' # データを保存したいディレクトリの階層
local_path = 'tmp' # ノートブックインスタンスのディレクトリパス(事前に mkdirしておく)
# S3からデータを取得 (prefixとかbucketはglobalで定義)
def getfile(file_name):
obj = boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix,file_name))
response = obj.get()
data = response['Body'].read()
return data.decode('utf-8')
# S3にデータをPut (body引数は str( )で渡すと無難)
def putfile(file_name,body):
obj = boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix,file_name))
return obj.put(
Body=body.encode('utf-8'),
ContentEncoding='utf-8',
ContentType='text/plane'
)
# ローカルに保存したファイルをS3にputしてローカルの方は削除(必要かな?)
def move_file(file_name):
data = open(local_path + file_name,'r')
putfile(file_name,str(data))
os.remove(local_path + file_name)
data.close()
この関数を使いまわしてもらえれば、あとは、機械学習の本を開いて、データ分析をやれるんじゃないだろうか。
こういう環境づくりの選択肢としてあげるとすると、以下のような感じだろうか。
- 自分のPCにPythonをインストールして環境を作る
- Dockerを利用して、環境を作る
- AWS SageMakerで分析をはじめる
こう並べると、想像だと 簡単さで 1 > 2 > 3 と 予想してしまいそうだが、
実際は逆だ。 1 < 2 < 3 だと思う。
ぜひ、興味ある人は触ってみるといいのではないだろうか。
※初めてAWSを触る人が、つまずきそうなところを補足しておく
i ) AWS SageMakerは無償枠あり。詳細はこちら{:target="_blank"}
申し込み後最初の 2 か月間は、モデル構築用に t2.medium ノートブックの使用 250 時間の無料枠があり、加えてトレーニングに m4.xlarge を 50 時間、機械学習モデルの Amazon SageMaker でのホスティングに m4.xlarge を125 時間使えます。
ii ) 設定は基本デフォルトで大丈夫
インスタンスがt2.mediumになっているかだけ確認。これであれば、立ち上げっぱなしで渡しても1ヶ月$30強くらい?
iii ) IAMロールの作成が必要
初回だけ、IAMロールというのを作成しないといけない。こちらは、要は、SageMakerからS3(ストレージ)やEC2にアクセスできるようにする設定みたいなもの。画面に誘導されるがままに作成すればOK
iv ) 重い処理は、t2.medium だと落ちます。
これはなんども落ちました。Macだとうまく進むものも落ちてるので、重い処理はNotebook上でするべきではないみたい。(落ちたのは学習に1日以上かかる学習処理)
以上
ちなみに、2についても書いておく。いや、それでもコストゼロ円でやりたいけどコマンドラインを触りたたくない人に。Docker on Mac をインストールした上で、以下だけ、ターミナルで実行してください。(Windowsも同様になると思いますが、やっていないので省略します、すいません。でも、コマンドプロンプトでやればいけるのかと思います。最低限、ホストマシン側のパス(/notebooksのところ)は変更が必要と思います。)
$ PASSWORD='********'
$ docker run -d -p 8888:8888 -v `pwd`/notebooks:/home/jovyan/work -e PASSWORD="$PASSWORD" -e GRANT_SUDO=yes --user root mokemokechicken/jupyter-tensorflow start-notebook.sh
参考:https://qiita.com/mokemokechicken/items/18a760f4d7fe8a26351c
pip installなんて打たなくてもほとんど入ってる。
よくありがちなpipのパスが通っていないとか、python2系が動いてしまっているとか、みたいなややこしいことを経験しなくて良い。
(このイメージちょっと重いから自分でDockerfile作ろうとしてしまい、なんと無駄な2、3時間を過ごしたことか、まぁ、特殊なことやりたければそれしかないけども。。。)
これで、 localhost:8888 をブラウザでひらけば、すぐ環境が作れる。
(もちろん、Docker on Windowsでも同じだと思うけど試していないので。)
何れにしても個々の環境に邪魔されず、これほど簡単に環境が作れる。なんて、素晴らしい世界だ。
(ノンプログラマーは言い過ぎたかな。今はそうだけど、プログラミングに興味ある人になら。)
SageMakerは中学校のプログラミング教材に即使えると思う。こうやってどんどんプログラミングがしやすくなるんだろうな。ワクワクする。
と思った話。
*さらに、モデルが簡単に作れたり、既存環境から切り離して、機械学習ができるらしい。現在調査中。AWS素晴らしい。これからもテンションが上がるものを出し続けて欲しい。