ガジェット通信 GetNews

見たことのないものを見に行こう

体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

Scalaプログラマから見た機械学習サーバー「Apache PredictionIO」とは?─by Scala福岡2017

機械学習の課題

竹添直樹さんはビズリーチでScalaのプログラマを務めながら、OSS開発や技術書(「Scalaパズル」「Scala逆引きレシピ」)の執筆、さらにはPredictionIOやGitBucket、Scalatraのコミッターを務めている。

今回は、セッションではScala製機械学習サーバ「Apache PredictionIO」について紹介した。

機械学習の一般的な課題は大きく2つある。1つはスケーラビリティ。データが増えたときに学習させたり予測する処理、学習用のデータが大量にあるのでストレージのスケーラビリティが求められる。

もう一つがガバナンス。開発・メンテナンス、運用などの効率などだ。これらの課題を解決するのがオープンソースの機械学習サーバ「Apache PredictionIO」である。

PredictionIOの特徴は、第一にカスタマイズ可能なテンプレートから予測APIをWebサービスとしてデプロイできること。

第二にライブラリとしてSparl MLlibやOpenNLPをサポートしていること。第三に学習データやモデルを格納するためのストレージの管理も統合していることだ。

つまりPredictionIOとは、AWSやGCPなどが提供するような機械学習サービスを自前で構築するための基盤ソフトウェア。細かいチューニングが可能でクラウドロックインが回避でき、オンプレでの活用ができるというものだ。

一般的に、機械学習はCPUのリソースを非常に使う。その際にマネージドサービスでは費用対効果が悪くなる場合があり、オンプレサーバで運用する方がコストメリットが出るケースが多い。

株式会社ビズリーチ 竹添直樹さん

Apache Software Foundationの役割

PredictionIOは2013年、PredictionIO社が設立され、オープンソースでの提供が始まる。2016年にSalesforceに買収されて、ASF(Apache Software Foundation)に寄贈された。現在、Apache Incubatorで開発が続けられている。

ASFはもともとApacheのためにできた非営利団体で、オープンソースのソフトウェアプロジェクトを支援。JavaやBigDataとオープンソースのトレンドを支え続けている。

具体的な役割は大きく3つ。まずは、オープンソースプロジェクトへのインフラ提供。次に法的訴訟から開発者の保護。第三はソフトウェアの法的権利の保障である。

最近、ReactなどFacebook製のOSSで採用されているBDS+patentsライセンスに関する議論が起こった。

このライセンスは当該ソフトウェアの利用ユーザに対してFacebookが保有する特許の利用許諾を与えるものの、ユーザがFacebookを特許侵害で訴えた場合にはその許諾を取り消すというものだ。

これは事実上、利用ユーザはFacebookに対して特許侵害の訴訟を起こすことができないということを意味する。

ASFではBSD+patents licenseはApache Licenseに適合しないとし、ASFのプロダクトでは使ってはならないという判断がなされた。

問題の発端になったのは、FacebookのオープンソースDB、RocksDBである。先のライセンスを採用していたため、ASFから使ってはいけないというアナウンスがされたのである。RocksDBが急遽、ライセンスを変更して解決したが、ReactについてはライセンスはそのままなのでASFのプロダクトでReactを使えないという問題は残ったままだ。

現在、AFSはReactのプロジェクトに対して、ライセンスを見直してもらえないかという働きかけをしているという。(その後、Reactもライセンスが変更された)

オープンソースにはこういうややこしい問題があるが、ASFのプロダクトであれば安心なので、そういう法的権利の保障という大きな役割をしている。

一方で、ASFはインフラが使いにくい、リリースや重要な意思決定の際などはコミッター内で投票する必要があるなど官僚的なルールが多く、開発が停滞しがちな側面もある。

PredictionIOが提供している機能

PredictionIOの基本的な利用フローは、以下の図の通り。最初にレコメンド、クラスタリングなど、用途別にベースとなるテンプレートの中から、やりたいことができるテンプレートを選び、GitHubからクローンする。

クローンしたテンプレートをカスタマイズしてエンジンを作ったら、学習するためのデータ(ユーザーの行動のログやアクセスログなど)を、イベントサーバに入れる。

pio trainというコマンドで学習したものをエンジンに食わせて予測モデルを作る。そこの処理はSparkで行う。そうすると予測モデルができるので、モデルストレージに入れる。これで準備が完了だ。

pio deployでエンジンサーバをWebサービスとしてデプロイし、アプリで問い合せると結果を返すJSONベースのWeb APIを立ち上げることができる。こういう一連の仕組みを作れるのがPredictionIOである。

1 2 3次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。