就性能而言,并行处理可能是一个大问题。现代计算机有多个核,在这些核上扩展进程可以最大限度地利用可用的计算能力。

FME利用了定义多个过程的参数。加上变压器的并行过程也有一个“输入有序”参数,这是另一个性能增强工具。

除了……我们看到支持案例和测试结果表明我们应该重新设计并行处理设置;所以对于FME 2019,这正是我们所做的!

2019年并行处理发生了怎样的变化

简言之,我们在FME 2019中删除了所有单个变压器的并行处理选项:

注意没有Parallel Processing参数输入命令现在是分组方式).但别担心!并行处理仍然可用。只是现在它只能作为定制变压器的一个选项。

如果你对我不感兴趣为什么我们做了更改,然后跳转到下面的“FME 2019和并行处理”。

但是如果你想知道原因,继续阅读…

并行处理的问题

并行处理很复杂。也许比我们的界面看起来更复杂。用户需要计划要创建多少进程,以及每个进程要处理多少特性。另外,还有一些复杂的问题,比如特性的顺序(在并行处理时可能会改变)。

简而言之,使用FME2018,我们认为用户更有可能减慢他们的工作空间,而不是加快它。有几个原因……

界面设计

在设计术语中,并行处理的复杂性由于其参数的突出而变得更加复杂。我们姗姗来迟地意识到功能应该出现在每个变压器对话框的顶部!这很令人困惑,而且与变压器的核心用途无关。

并行处理参数2018

想象一下,如果你的电视遥控器上最大的按钮是用来微调画面颜色的!这就是为什么要把并行处理转移到不那么明显的地方。复杂性和突出性的混合导致了对并行处理的错误使用。最常见的错误是流程的数量……

多重并行处理

您可能知道,启动和停止FME进程有一定的开销。在将数据从一个进程传递到另一个进程时也会有开销。所以过多的处理会减慢转换速度。理想的场景是拥有更少的过程,处理更多的特性。当有很多小作业时,额外的开销要大于并行处理带来的收益。整体翻译较慢,而不是较快。

以FME2018中的工作区为例:

让我们从打破一个神话开始。您可能会认为,因为所有三个变压器都设置为并行进程数据,所以它们可能同时启动多个进程,使计算机陷入瘫痪。事实并非如此。在所有AreaBuilder进程完成之前,Dissolver不会启动任何进程。所以过程的数量不会失控。

那很好。

然而,这三个变压器按相同属性分组

假设有8个社区。每个变压器将创建8个进程。我们知道工作区不会同时运行24个进程。然而,它总共运行24个进程。但不需要这样做,因为每个转换器的组都是相同的!它可以在8个进程中完成相同的工作。

正如我稍后将演示的,如果作者将其转换为自定义转换器并应用并行处理,那么将会有更少的进程。这是我们改变的另一个原因。新设计鼓励正确的行为,所以作者更有可能做正确的事情,即使他们没有意识到这一点!

非变形金刚

使用自定义转换器进行并行处理的另一个好处是并行化所有变形金刚,不管它们是不是基于群体的。作为一个例子,让我们在前面的例子中放入一个Tester转换器:

在这种布局下,AreaBuilder的8个流程会收敛到Tester的单个流程。然后,他们被分为8个进程的解散。除了停止/启动进程之外,Tester是低效的,因为它是一个单一的进程。

如果这是在自定义转换器中创建的,那么并行处理也适用于Tester,这使得它更高效。

输入有序和并行处理

输入命令参数很有趣,因为它直接与并行处理相关联,在我们的代码中以及由于在参数对话框中相邻:

因为它在同一个参数块中,看起来它必须是相关的。事实上它不是。至少,它们都是性能相关的;但是没有理由必须对数据进行排序才能使用并行处理,或者必须对排序后的数据进行并行处理。

因此,我们将这两个参数解耦,以减少混淆,并防止用户错误地应用它们。特别是,Input Ordered参数还控制什么是在一个组中处理的,所以不要误用它尤其重要。它还被重命名和新的选项名称,以更清楚地说明它的用途:

这就是我们做出这些改变的原因。现在让我们看看在FME 2019中并行处理是什么样子的……

FME与并行处理

FME 2019中的并行处理现在仅限于定制变压器。这不是一种新的能力。以这种方式并行处理数据总是可能的。但是——出于上述原因——这是现在的问题只有并行处理数据的方法。

让我们以前面的例子为例,现在是2019年:

显然,不再有并行处理选项了。因此,我将其转换为一个自定义转换器,并在其参数中设置并行处理:

定制变压器的并行处理

请注意,打开并行处理会自动添加一个group - by发布参数(如果没有用于分割数据的组,则无法进行并行处理)。所以我返回到主画布,打开参数对话框,并将Group By参数设置为NeighborhoodName:

现在,当工作区运行时,每个组都有一个单独的进程。但是,重要的是,每个进程都覆盖了所有三个转换器,因此启动的进程更少。

此外,如果我们添加一个额外的变压器-像这个Tester…

它也是并行运行的,这是一个额外的好处。

当然,您不需要非常细心就能注意到NeighborhoodName在转换器对话框中出现两次:

这是为什么呢?

不必要的用户参数

回想一下,FME自动发布自定义Transformer中使用的所有属性。这使得转换器可以在多个地方使用,在这些地方(在本例中)“NeighborhoodName”可能不可用。因此,FME在创建自定义变压器时自动生成第一个发布参数,在激活并行处理时自动生成第二个发布参数。

我们两者都需要吗?这取决于我在哪里使用NeighborhoodName。我可以从Group-By参数中删除对它的任何引用,因为整个自定义转换器现在是一个大的Group-By。如果我没有在其他地方使用NeighborhoodName,是的,我可以删除第一个发布的参数。我不需要用它。

但是,如果—例如—我在Tester转换器中使用NeighborhoodName,那么我可能希望保留第一个发布的参数。第一个提示我要测试的属性,第二个提示我要分组的属性。

在这里,我将删除使用自定义转换器创建的参数。

因此,首先我在每个单独的变压器中取消设置Group By参数。然后删除用户参数;不是通过删除参数本身,而是通过从输入端口取消选中该属性:

这会隐藏该属性,并且(不再需要该属性)还会自动删除已发布的参数。

如果我确实以这种方式删除属性引用,那么我肯定应该检查自定义转换器,看看是否有任何参数被标记为不完整(变为红色)。这表明我在尚未处理的地方使用了该属性。

常见问题

问)如果我只想对单个变压器应用并行处理,该怎么办?
一)要将并行处理应用于单个转换器,您需要将其封装在自定义转换器中。这有点不方便,但我们认为总体设置更好。
问)如果我想对自定义变压器中的单个变压器应用并行处理,该怎么办?
一)要将并行处理应用于自定义转换器中的单个转换器,您需要将其包装在其自己的自定义转换器中。请记住,您可以将自定义转换器嵌套在另一个自定义转换器中。
问)如果多个变压器需要并行处理,但需要不同的组呢?
一)如果多个转换器需要并行处理,但具有不同的组,则将每个部分包装在单独的自定义转换器中。
问)我发现了一个独立的变压器,并行处理参数仍然在那里。为什么它还在那儿?
一)我们的更新比仅仅从GUI中删除参数要复杂一些,还有一些变压器我们还没有更新。以后的FME版本可能会排除该参数,因此我们仍然建议在所有情况下使用自定义变压器方法。

总结

简言之,这里的重要问题是性能。工作区作者总是希望获得性能优势,而使用并行处理是一种显而易见的方法。不幸的是,这有点太明显了。我们觉得新用户在尝试加快翻译速度时,实际上可能会减慢他们的速度。

这就是为什么我们将并行处理参数移动到一个自然性能更好的地方。

顺便说一句,你可能注意到上面的FME 2019的截图是“黑暗模式”。这只是另一个有用的更新,我们希望你会喜欢这个即将到来的版本。

关于FME 最佳实践 定制变压器 FME桌面 FME传教士 组的 group by 并行处理 表演

马克爱尔兰

Mark,又名iMark,是FME的传道者(est. 2004),对FME培训充满热情。他喜欢以新颖有趣的方式帮助人们理解和使用技术。他的另一个爱好是足球。足球)。他非常喜欢科技和足球,还一起写了一篇关于这两者的文章!谁会想到呢?(答案:iMark)

评论

对“并行处理和FME: 2019年重新设计”的5个回应

  1. 布拉德eckrose 说:

    我认为这个改变肯定会使重构一些复杂的工作空间值得付出努力,并可能将并行处理引入更多的管道。

    另外,是否有关于如何在桌面和服务器体系结构中实现各种并行处理的参考资料?您是否使用本地CPU内核?卸载到GPU?两者都有?还有其他方面吗?

    • 马克爱尔兰 说:

      它是本地CPU核心。每个FME进程将运行在不同的核上,最大进程数与核数、FME许可和并行处理设置(最小、中等、积极、极端)有关。看到文件有关这些数字的更多信息。我向开发人员询问了GPU处理,他们告诉我,GPU处理目前相当有限。我们设想将其应用于图形密集型进程(如数据检查器)而不是处理引擎。但目前还没有具体的计划。

  2. 虚拟人 说:

    Hiya Mark,只是想知道是否有类似于这里的工作区运行器的实现计划:https://blog.亚搏在线safe.com/2018/03/batch-processing-2018-evangelist172/-可以指定每个fme进程的数量或工作空间。
    这个想法是,不是让新的worker进程为每个组启动,同一个fmeworker.exe进程一直运行,只是接收下一组数据。我不确定这会有什么含意,但它会让拥有大量群体不再是问题

    • 马克爱尔兰 说:

      是的!这绝对在我们的清单上。用户不应该真正关心启动了多少进程和特性,只需要关心它以最高效率运行即可。这就是我们的目标。

  3. 医生 说:

    嗨,马克,
    在服务器方面,我们可以期待哪些性能提升?另外,我们在服务器端(和工作空间中)能做些什么来准备和最好地利用并行?我们已经遵循了一个核心/引擎的规则,所以我认为更快的核心和更多的ram会有所帮助,因为每个核心只有一个引擎?对于RAM,每个引擎的最大使用量是多少?

    享受博客更新吧!让他们来了!

回信匿名的取消回复

您的电子邮件地址将不会发布。必填字段已标记

相关的帖子