2017-01-31 13 views
0

クラスタ化された環境でファイルシステム-PipelineModel.save("PATH")にエクスポートされた訓練されたモデルを持っています。アイデアは、Webアプリケーションの背後にあるこの訓練されたモデルを使用して、非クラスタ環境でのリアルタイム予測のために変換メソッド(PipelineModel.transform)を呼び出すことです。PipelineModelはスレッドセーフですか?

モデルは、2つの方法でロードすることができ - PipelineModel.load("PATH")(好ましくは、サーバの起動時に)一度だけのモデルをロードするすべての要求 アプローチ2-ためのモデルをロード

アプローチ1-および全てに対して同じモデルを使用しますリクエスト。

私はより速いのでアプローチ2を好むでしょう。しかし、問題は、変換メソッドのスレッドセーフですか?

答えて

0

ここではスレッドの安全性はどういう意味ですか?その静的メソッドは、新しいパイプラインモデルインスタンスを返す次のメソッドを呼び出します。このメソッドを再度呼び出すと、新しいインスタンスが返されます。

override def load(path: String): PipelineModel = { 
    val (uid: String, stages: Array[PipelineStage]) = SharedReadWrite.load(className, sc, path) 
    val transformers = stages map { 
    case stage: Transformer => stage 
    case other => throw new RuntimeException(s"PipelineModel.read loaded a stage but found it" + 
     s" was not a Transformer. Bad stage ${other.uid} of type ${other.getClass}") 
    } 
    new PipelineModel(uid, transformers) 
} 
+0

私はトランスフォームメソッドのスレッドセーフです。 – Bipp

+0

それはスレッドセーフではありません。しかし、あなたのコードがパイプラインモデルのインスタンスを変更しない場合。私はそれがあなたの変換操作にどのように影響するかは分かりません。あなたは念頭に置いていますか? –

関連する問題