我在集群环境中将训练有素的模型导出到文件系统 - PipelineModel.save("PATH")
。想法是在Web应用程序后面使用此训练模型并调用转换方法(PipelineModel.transform
)以在非群集环境中进行实时预测。
模型可以通过两种方式加载 - PipelineModel.load("PATH")
:
方法1-为每个请求加载模型 方法2-仅加载模型一次(最好在服务器启动期间)并对所有请求使用相同的模型。
我更喜欢方法2,因为它更快。但问题是 - 变换方法线程安全吗?
答案 0 :(得分:0)
你在这里通过线程安全意味着什么?它是一个静态方法,它反过来调用以下方法,该方法返回一个新的Pipeline模型实例。重新调用该方法将返回一个新实例。
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)
}