【问题标题】:Deeplearning4j Sharing Computational Graph between Threads in ScalaDeeplearning4j 在 Scala 中的线程之间共享计算图
【发布时间】:2018-06-29 16:40:47
【问题描述】:

我正在尝试进行图像分类。我正在使用 Scala、Akka 演员系统和 deeplearning4j。问题是我必须始终在相同的位置检测或在图像上裁剪。我正在考虑在每一帧上为图像的每个裁剪创建一个新演员。问题是,据我了解,为每个演员创建实例化一个新模型是不可行的,但是拥有一个模型实例并传递给每个演员也不可行。我应该有一个实例池吗?我有点被这个问题困扰,因为这是我第一次尝试 deeplearning4j。以前,我会使用 python REST api,但我认为这个解决方案应该性能更好。

提前谢谢你。

【问题讨论】:

    标签: java scala akka deeplearning4j


    【解决方案1】:

    在未来,请注意:您可以将并行推理用于开箱即用的多线程服务。 https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/inference/ParallelInferenceExample.java

    上述答案的一个问题是,它没有考虑到模型在进行激活时具有内部状态。 ParallelInference 还允许批处理和顺序推理。 例如,当您使用 gpus 时,这很重要。我们也允许在这里进行多线程推理。

    【讨论】:

      【解决方案2】:
      1. 无需为图像的每个裁剪实例化一个新演员。只需保留一个演员池,要求主节点在他们完成前一张图像后立即给他们更多图像进行分类。我还建议检查与普通并行集合相比,它是否真的为你买了任何东西(比如images.par.map(model.classify) 已经可以完成这项工作;它会自行处理一个线程池)。
      2. 无需为每个参与者实例化一个新模型。分类不会改变模型,因此您可以简单地在所有参与者之间共享相同的模型。对于模型对象的引用,每个参与者需要 8 个字节的开销,因此可以忽略不计。

      【讨论】:

        【解决方案3】:

        也许你可以看看 monix 库,它有异步任务、批处理、容错原语等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-27
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 1970-01-01
          • 1970-01-01
          • 2016-03-01
          • 2023-04-05
          相关资源
          最近更新 更多