Scala製機械学習サーバ「Apache PredictionIO」

29
Introduction to Apache PredictionIO Naoki Takezoe @takezoen BizReach, Inc

Transcript of Scala製機械学習サーバ「Apache PredictionIO」

Page 1: Scala製機械学習サーバ「Apache PredictionIO」

Introduction toApache PredictionIO

Naoki Takezoe@takezoen

BizReach, Inc

Page 2: Scala製機械学習サーバ「Apache PredictionIO」

自己紹介

● 竹添 直樹: @takezoen● ビズリーチという会社でScalaを書いてます

● OSS開発や技術書の執筆などもしています

Page 3: Scala製機械学習サーバ「Apache PredictionIO」

今日はPredictionIOという機械学習サーバを紹介します

Page 4: Scala製機械学習サーバ「Apache PredictionIO」

Introduction to

Page 5: Scala製機械学習サーバ「Apache PredictionIO」

システム面から見る機械学習の課題

● スケーラビリティ○ 主に学習・予測処理、ストレージ

● ガバナンス○ 開発・メンテナンス・運用などの効率

Page 6: Scala製機械学習サーバ「Apache PredictionIO」

Apache PredictionIOとは?

● オープンソースの機械学習サーバ

● カスタマイズ可能なテンプレートから予測APIをWebサービスとしてデプロイできる

● Spark MLlibやOpenNLPをサポート

● 学習データやモデルを格納するためのストレージ

も統合

Page 7: Scala製機械学習サーバ「Apache PredictionIO」

簡単に言うと...

● AWSやGCPなどの機械学習サービスを自前で

構築するための基盤ソフトウェア

● 細かいチューニングが可能、クラウドロックインの

回避、オンプレ活用などのメリット

Page 8: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの歴史

2013年 PredictionIO社設立

2014年 $2.5Mのシード資金調達

2016年 Salesforce社に買収されASFに寄贈

現在はApache Incubatorで開発中

Page 9: Scala製機械学習サーバ「Apache PredictionIO」

Apache Software Foundationとは?

● オープンソースのソフトウェアプロジェクトを支援

する非営利団体(1999年発足)

● もとはWebサーバApacheのために発足

● その後Java→BigDataとオープンソースのトレン

ドを支え続けている

Page 10: Scala製機械学習サーバ「Apache PredictionIO」

Apache Software Foundationの役割

● オープンソースプロジェクトにインフラ提供

● 法的訴訟から開発者を保護する

● ソフトウェアの法的権利を保障する

Page 11: Scala製機械学習サーバ「Apache PredictionIO」

一方で…

● インフラが使いにくい

● ルールが多い

● などの理由により開発が停滞しがちな側面も

Page 12: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Page 13: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Engine

git clonecreate enginefrom template

Page 14: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Engine

EventServer

Event Storage

git clonecreate enginefrom template

import training data

Page 15: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Engine

EventServer

Event Storage

pio buildcompile enginegit clone

create enginefrom template

import training data

Page 16: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Model

Engine

EventServer

Event Storage Model Storage

pio traintrain and store model

pio buildcompile enginegit clone

create enginefrom template

import training data

Page 17: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Model

Engine

EventServer

Event Storage Model Storage

EngineServer

pio deploydeploy as web service

pio traintrain and store model

pio buildcompile enginegit clone

create enginefrom template

import training data

Page 18: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIOの基本的な利用フロー

Model

Engine

EventServer

Event Storage Model Storage

EngineServer

pio deploydeploy as web service

pio traintrain and store model

App

query

result

pio buildcompile enginegit clone

create enginefrom template

import training data

図には書いていませんが、evaluationの機能もあります

Page 19: Scala製機械学習サーバ「Apache PredictionIO」

ストレージ

● メタデータ(エンジンの情報など)○ PostgreSQL, MySQL, Elasticsearch

● イベントデータ(学習用データ)○ PostgreSQL, MySQL, Elasticsearch, HBase

● モデルデータ(予測モデル)○ PostgreSQL, MySQL, HDFS, S3, Local File System

Page 20: Scala製機械学習サーバ「Apache PredictionIO」

テンプレート

用途に応じた様々なエンジンのテンプレートが用意されている。GitHubリポジトリで提供されているのでgit cloneして使用する。

Page 21: Scala製機械学習サーバ「Apache PredictionIO」

テンプレート Algorithmクラスに学習を行うtrain()、推定を行うpredict()などのメソッドが定義されている

Page 22: Scala製機械学習サーバ「Apache PredictionIO」

クイックスタート日本語版

http://takezoe.hatenablog.com/entry/2017/05/11/132410

Page 23: Scala製機械学習サーバ「Apache PredictionIO」

in BizReach, Inc

Page 24: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIO導入の動機

● 機械学習エンジニアが本業に集中できない○ 構築や運用も担当していた

○ 得意分野ではないので効率が悪い

● 属人化が発生していた○ 特にスタンダードなやり方が決まっていない

○ 少人数で作るので各自が独自のやり方で作ってしまう

PredictionIOを導入することで開発・運用をテンプレート化開発・運用を効率化し、本来の作業に集中できる

Page 25: Scala製機械学習サーバ「Apache PredictionIO」

We have four committers!

@marevol

@takezoen @shimamoto

@haginot

Page 26: Scala製機械学習サーバ「Apache PredictionIO」

これまでの主なコントリビューション

● Elasticsearch 5.xやS3のサポート

● Scalaコードのリファクタリングやサンプル、ドキュ

メントの整理

● バイナリディストリビューションの作成

● デフォルトのサポートバージョンの最新化

● 依存ライブラリのライセンス問題の解決

地味な作業ばかりですがTLP昇格のため...

Page 27: Scala製機械学習サーバ「Apache PredictionIO」

将来の計画

● リッチなWebコンソールを作りたい

● Pythonサポート(scikit-learnなどMLlib以外の

ライブラリも使えるようになるかも?)

● オンライン学習のためにストリーム形式のデータ

を処理できるようにする

● Windowsでも動かせるようにしたい

Page 28: Scala製機械学習サーバ「Apache PredictionIO」

JPIOUG: Japan PredictionIO User Group

http://jpioug.org/

Page 29: Scala製機械学習サーバ「Apache PredictionIO」

PredictionIO Meetup #38月30日(水) @ 渋谷(予定)