BLOG

R3 Cloud Journey

太陽と Amazon SageMaker には騙されない

2018-09-10

夏が終わり涼しくなるかと思ったら、台風や地震で大変な日本列島ですが、皆さまはいかがお過ごしでしょうか。

JAWS-UG沖縄のイベント「試してみよう!機械学習ハンズオン 2018年08月」に参加してきたので(もちろん、PowerBudget で!)今さらですが、少し振り返ってみたいと思います。機械学習なんてチンプンカンプン?な方にも目を通していただければ嬉しいです。

JAWS-UG沖縄 試してみよう!機械学習ハンズオン 2018年08月
_2018-08-11(土)13:00 - 18:00 2018年8月のJAWS-UG沖縄は 【試してみよう!機械学習ハンズオン】です! 今回は先日公開されました「Amazon SageMaker…_jaws-ug-okinawa.doorkeeper.jp

Amazon SageMaker は AWSが現在最も力を入れているサービスの一つであることは間違いありません。今回のハンズオンでは AWSJより公開されている資料に沿って、一つずつ手順を試していきました。

まず、 Amazon SageMaker とは何か、大雑把に言えば SageMaker は

機械学習を行う上で必要な

1. モデルの開発
2. 学習
3. 推論

の 3つのプロセスを AWS 上で行うためのプラットフォームです。(ハンズオンで使った資料の 始めの 10数ページあたり)

まずは 1. モデルの開発 から

Amazon SageMaker では、データ・サイエンティストの方がモデルの開発を行うための環境として、Jupyter Notebook のホスティングサービスを提供しています。

Jupyter Notebook はインタラクティブに Python のコードを実行できる大変便利な環境で、弊社では kintone のデータを取得・加工する際に使用することがあります。

kintone のデータを取得して DataFrame を作成する例


kintone のデータを取得して DataFrame を作成する例

一般的に、データ・サイエンティストの方は、ご自身のパソコン上で(手慣れたツールを駆使しながら)モデルの開発と学習(試行錯誤)を行うことが多いですが、これを Web(AWS)上で行えるようにしています。

SageMaker は人気の高い TensorFlow や Chainer、PyTorch 等々、各種の機械学習フレームワークをサポートしており、自分のパソコンの環境に依存することなしに Web上で モデルの開発を進めることが出来ます。これにより、データ・サイエンティストの PCでは動作するのに 別の環境の PCでは動作しないといった環境依存の問題を避けられます。

また、 SageMaker では

import sagemaker

sess = sagemaker.Session()
role = get_execution_role()
bucket = sess.default_bucket()

と記述すれば `sagemaker-<リージョン名>–<AWSアカウント番号>` という名前のバケットへの参照を取得できます。各種データや 開発したモデルを S3 に置くことにより、容易に共有することができます。

Amazon SageMaker の Jupyter Notebook


Amazon SageMaker の Jupyter Notebook

2. 開発したモデルを用いた学習 について、 SageMaker では各機械学習フレームワークを薄い層でラップしており、どのフレームワークを使用する場合でも概ね

# 使用する Dockerイメージを選択
containers = {'ap-northeast-1': '501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/xgboost:latest'}

# 使用する Dockerコンテナのスペック、数を指定
xgb = sagemaker.estimator.Estimator(containers[boto3.Session().region_name],
role,
train_instance_count=1,
train_instance_type='ml.m4.4xlarge',
output_path='s3://{}/{}/output'.format(bucket, prefix),
sagemaker_session=sess)

# ハイパーパラメータの指定
xgb.set_hyperparameters(eta=0.1,
objective='multi:softmax',
num_class=10,
num_round=25)

# 学習の実行
xgb.fit({'train': train_input, 'validation': valid_input}, job_name = training_job_name)

の流れで学習を実行することができます。

ハンズオンではただ流れに沿って実行するだけですが、例えば MNIST という手書き文字識別の学習を TensorFlow で 10,000件のデータを対象に実行すると、通常スペックの PC で 1時間ぐらい平気で要したりします。

SageMaker は Dockerコンテナのスペック、数を指定して学習を分散実行できるので、データ・サイエンティストの方からすれば感動するほどの速さ(数分)で学習を完了させることができます。 AWS の知識が乏しくても Estimator にインスタンス・タイプとインスタンス数の指定パラメータを渡すだけなので、モデル開発のサイクルを早く回して、どんどん精度を改善していくことができます。

3. 推論の実行について、SageMaker では

xgb_predictor = xgb.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')

のように 1行実行するだけで 推論を実行する API(エンドポイント)を作成し、インターネット上に公開することができます。

開発した機械学習のモデルを使用して推論を実行したいアプリケーションからは

result = boto3.client('sagemaker-runtime').invoke_endpoint(
EndpointName='<deployで作成したエンドポイントの名前>',
Body=<入力値>,
ContentType='text/csv'
)

のように InvokeEndpoint するだけで推論の結果を得ることが出来ます。

(2. 学習においては、学習が完了した時点で使用した Docker コンテナは削除されますが、エンドポイントを作成した場合は削除するまで Docker コンテナが動いており料金がかかり続けます。)

いかがだったでしょうか。

AWSJ 亀田さんの解説によれば、SageMaker の Sage とは、英語の “賢者” が語源とのこと。使いこなすには機械学習フレームワークや数学、Python の知識が必要ですが、

1. モデルの開発(データの入手、クレンジング、変換を含む)
2. 学習の実行
3. 推論の実行

の流れが統一されておりシンプルになっているので、門外漢のエンジニアでも Jupyter Notebook の記述内で何を行っているか掴みやすくなっていると思います。

沖縄はどうだったかというと、ちょうど台風に見舞われ、最終日の帰る段になってようやく太陽を見ることができた感じで、大阪の方がずっと酷暑でした。

写真も沖縄では全く撮らなかったので、代わりに この週末に行ってきた Python合宿の琵琶湖岸の写真を貼っておきます。

Python合宿もずっと天気が悪く、最終日の朝に少し晴れたくらい


Python合宿もずっと天気が悪く、最終日の朝に少し晴れたくらい

Python 合宿で LTさせていただいた資料も添付しておきますので、よろしければご覧ください。

アールスリーインスティテュートで、これまでになかった画期的な kintoneカスタマイズサービス gusuku Customine(カスタマイン) を開発しています。 kintone認定アプリデザイン/カスタマイズ スペシャリスト

自社のシステム開発・移行などをご依頼したい方
お客様とともに
作りながら考える
新しいシステム開発
詳しく見る
kintone導入・アプリ開発・カスタマイズにお困りの方
ノーコードでらくらく
kintoneカスタマイズ
詳しく見る
kintoneアプリの
バージョン管理・バックアップ
詳しく見る
kintoneアプリの開発・運用を
強力サポート

詳しく見る
更新情報をメールでお届けします!

kintoneアプリのカスタマイズに役立つ情報や、イベントの情報をメールでお届けいたします。
ご登録をお待ちしております!

R3のご提供サービス
自社のシステム開発・移行などをご依頼したい方
お客様とともに作りながら考える
新しいシステム開発
詳しく見る
kintone導入・アプリ開発・カスタマイズにお困りの方
kintoneをもっと使いやすくする
gusukuシリーズ
詳しく見る
更新情報をメールでお届けします!
kintoneアプリのカスタマイズに役立つ情報や、イベントの情報をメールでお届けいたします。
ご登録をお待ちしております!