web-dev-qa-db-ja.com

Spark MLlibモデルを提供するには?

私はプロダクションMLベースのアプリケーション用のツールを評価しています。オプションの1つはSpark= MLlibです。

たとえば、Azure MLでは、トレーニングが完了すると、モデルは任意のアプリケーションから使用できるWebサービスとして公開されます。これは、Amazon MLの場合と同様です。

ApacheでMLモデルをどのように提供/デプロイしますかSpark?

35
Luis Leal

一方では、spark=で構築された機械学習モデルは、従来の方法でAzure MLまたはAmazon MLで提供する方法では提供できません。

Databricksは、ノートブックを使用してモデルを展開できると主張していますが、実際にはまだ試していません。

一方、次の3つの方法でモデルを使用できます。

  • アプリケーション内でオンザフライでトレーニングし、予測を適用します。これは、sparkアプリケーションまたはノートブックで実行できます。
  • MLWriterを実装している場合はモデルをトレーニングして保存し、アプリケーションまたはノートブックにロードしてデータに対して実行します。
  • Spark=を使用してモデルをトレーニングし、 jpmml-spark を使用してPMML形式にエクスポートします。PMMLでは、同じ言語を話すための異なる統計およびデータマイニングツールを使用できます。このように。 、予測ソリューションは、カスタムコーディングを必要とせずにツールやアプリケーション間で簡単に移動できます。たとえば、Spark MLからR.

これらは3つの可能な方法です。

もちろん、RESTfulサービスを備えたアーキテクチャを考えることができます。その背後には、例に従ってspark-jobserverを使用して構築し、トレーニングとデプロイを行いますが、開発が必要です。すぐに使えるソリューションではありません。

Oryx 2などのプロジェクトを使用して、完全なラムダアーキテクチャを作成し、モデルをトレーニング、展開、および提供することもできます。

残念ながら、上記の各ソリューションを説明することは非常に広く、SOの範囲に収まりません。

18
eliasah

1つのオプションは、 MLeap を使用してSpark PipelineModelをオンラインでSpark/SparkContextに依存しないとすることです。SparkContextを使用する必要はありません単一レコードのスコアリング時間を〜100msから1桁のマイクロ秒に落とすため、重要です。

それを使用するには、以下を行う必要があります。

  • Spark MLeapユーティリティでモデルをシリアル化する
  • モデルをMLeapにロードします(SparkContextまたはSpark依存関係は必要ありません)
  • 入力レコードをJSONで作成します(DataFrameではありません)
  • MLeapで記録を記録する

MLeapは、Spark MLlib(この記事の執筆時点でのLDAを除く)で使用可能なすべてのパイプラインステージと統合されています。ただし、カスタムを使用している場合は、少し複雑になります推定器/変圧器。

カスタムトランスフォーマー/推定器、パフォーマンス、統合の詳細については、 MLeap FAQ をご覧ください。

8
Gevorg

2つのかなり異なるものを比較しています。 Apache Sparkは計算エンジンですが、AmazonとMicrosoftのソリューションはサービスを提供しています。これらのサービスには、背後にMLlibがあるSparkがあります。 Webサービスを自分で構築する手間を省きますが、追加料金がかかります。

Domino Data Lab、Cloudera、IBMなどの多くの企業が、独自に展開できる製品を提供しています。Spark=クラスターで、さまざまな柔軟性を備えたモデルを中心にサービスを簡単に構築できます。

当然、さまざまなオープンソースツールを使用して自分でサービスを構築します。具体的には?それはすべてあなたが何を求めているかにかかっています。ユーザーはどのようにモデルを操作する必要がありますか?何らかの種類のUIまたはjest a REST API?モデルまたはモデル自体のパラメーターを変更する必要がありますか?ジョブはバッチまたはリアルタイムの性質ですか?当然、オールインワンソリューションを構築できますが、それは多大な労力を費やすことになります。

私の個人的な推奨事項は、可能であれば、Amazon、Google、Microsoft、その他のサービスを利用することです。オンプレミス展開が必要ですか? Domino Data Labを確認してください。製品は成熟しており、モデルの構築(展開から展開まで)を簡単に行うことができます。 Clouderaはクラスターコンピューティング(Sparkを含む)に重点を置いていますが、成熟するまでにはしばらく時間がかかります。

[編集] Apache PredictionIO 、オープンソースの機械学習サーバーをご覧になることをお勧めします-多くの可能性を持つ素晴らしいプロジェクト。

3

これを機能させることができました。注意事項:Python 3.6 + Spark= ML API(MLLIBではないが、同じように動作するはずです)

基本的に、 MSFTのAzureML github で提供されているこの例に従ってください。

警告の言葉:コードはそのまま提供されますが、最後の例のrun()メソッドにエラーがあります:

        #Get each scored result
        preds = [str(x['prediction']) for x in predictions]
        result = ",".join(preds)
        # you can return any data type as long as it is JSON-serializable
        return result.tolist()

する必要があります:

        #Get each scored result
        preds = [str(x['prediction']) for x in predictions]
        #result = ",".join(preds)
        # you can return any data type as long as it is JSON-serializable
        output = dict()
        output['predictions'] = preds
        return json.dumps(output)

また、MLeap評価の回答に完全に同意します。これにより、プロセスの実行速度が速くなりますが、具体的には質問に答えると思います

0
Jeremy Wortz