[レポート]AIM403: Amazon SageMakerとApache Sparkの統合 #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

本記事は現地時間2018/11/26-30で行われてたre:Invent 2018のセッション「Integrate Amazon SageMaker with Apache Spark, ft. Moody's」のレポートとなります。

セッション概要

本セッションの概要は以下の通りです。

セッションタイトル:
 Integrate Amazon SageMaker with Apache Spark, ft. Moody's


登壇者:
Keith Steward - Sr. Specialist SA, Macine Learning & AI - AWS Lauren Ottaviano Shukla - Data Architect, Moody's

セッション概要:
Amazon SageMaker, our fully managed machine learning platform, comes with pre-built algorithms and popular deep learning frameworks. Amazon SageMaker also includes an Apache Spark library that you can use to easily train models from your Spark clusters. In this code-level session, we show you how to integrate your Apache Spark application with Amazon SageMaker. We also dive deep into starting training jobs from Spark, integrating training jobs in Spark pipelines, and more.
(Amazon SageMakerは、完全に管理されたマシン学習プラットフォームで、あらかじめ構築されたアルゴリズムと一般的な深い学習フレームワークを備えています。 Amazon SageMakerには、Sparkクラスタからモデルを簡単に訓練するために使用できるApache Sparkライブラリも含まれています。 このコードレベルのセッションでは、Apache SparkアプリケーションとAmazon SageMakerを統合する方法を説明します。 また、Sparkの訓練業務の開始、Sparkパイプラインの訓練業務の統合などにも深く関わっています。)

セッション資料は以下で公開されています。

セッションレポート

なぜSageMakerとSparkをセットで使うのか

SageMakerは機械学習のためのマネージドサービスです。 SageMakerを使うことで、ノートブックインスタンスを利用して機械学習に関する一連のコードを記述したのち、学習や推論のためのエンドポイント作成まで行えます。 では、ここになぜSparkが必要になるのでしょうか?

SageMakerを利用するとデータに対する前処理などはすべてノートブックインスタンス上で行うことになります(※ 現在はパイプライン機能もあるためこの限りではありません)。ノートブックインスタンスは高性能なものを選択することも可能ですが、単一インスタンで動くことになります。 SageMakerでは学習処理がスケール可能であることからもわかる通り、機械学習を行う際には分散処理が不可欠となる大規模なデータを扱う必要がある場面が多くあります。

そこで

  • データに対する前処理はEMR上のSparkを使って分散処理させる
  • 前処理済みのデータをSageMakerで学習させる

という連携方法が考えられます。

SageMaker-Spark SDKはそられの間で相互に連携する仕組みを持っています。

SageMaker-Spark SDKはオープンソースでライブラリとして公開されています。

SageMaker-Spark SDKに関しては当ブログでも紹介エントリがあります。 どのようなことが実現できるのかはそちらも併せてご参照ください。

SageMaker-Spark SDKでは以下のアルゴリズムをサポートしています。

  • K-means
  • Linear Learner Regressor
  • Linear Learner Binary Classifier
  • PCA
  • XGBoost
  • Factorization Machines
  • LDA
  • SageMakerEstimatorを使ったカスタムアルゴリズム

SageMaker-Spark SDKの使い方

SageMaker-Spark SDKの使い方を見ていきます。

ここでは3つの利用方法が紹介されています。

  • ノートブックインスタンス上でSparkを動かして実行
  • EMR上でSparkを動かしてノートブックインスタンスから利用
  • EMR上でSparkを動かしてそのまま学習・推論インスタンスで利用

一番上は開発時のデバッグ用途などがメインとなるでしょう。 した2つに関しては、Sparkでの処理も含めて一連の処理の流れをコードで記述しておきたい場合は前者、AWSCLIやboto3などを利用してSageMakerを使いたい場合は後者のように使い分けるといいでしょう。

実際の処理の流れは以下のようになります。

Spark上でのDataFrameを使って各種前処理を行ったのち、SageMakerのEstimatorを作成しています。 fit()関数呼出し後は実際に処理が動く部分がSparkからSageMakerに移り、学習・モデル作成・エンドポイント作成といった処理が行われます。 その後はSpark側に戻り、transform()関数を使ってSageMakerによって作成されたエンドポイントを使って推論を行うという流れになります。

この一連の流れはSparkの機能であるML Pipelineとして全体を定義してやることも可能です。

Moody'sでの活用例

最後にSageMakerとSparkの連携の事例としてMoody'sでどのようなアーキテクチャを実装しているのかの紹介となります。

データサイエンティストがSageMakerとEMRを使って分析・モデリング・デプロイなどを行います。 データはS3に保存されているのでAthenaを使って確認なども可能です。 アプリケーションレイヤとしては推論結果をDynamoDBに保存してAPI Gatewayから利用できるようにもしているようです。

おわりに

今回は「Integrate Amazon SageMaker with Apache Spark, ft. Moody's」のセッションレポートを書かせていただきました。

機械学習では多くのデータが必要になります。 それらに対して実際に学習の処理が行える状態に加工するまでプロセスはデータ分析プロセス全体のうち8割の時間を使っているともいわれます。

ただし、1台の環境で扱えるデータ量であればノートブックインスタンス内で前処理をしてしまうほうが楽ではあります。 扱うデータ量や処理内容に応じて適切なアーキテクチャを選択する必要があるといえるでしょう。