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

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 2019和并行处理

FME 2019的并行处理现在仅限于定制变压器。这不是什么新功能。总是有可能以这种方式并行处理数据。但是——由于上面提到的原因——这是现在的只有并行处理数据的方法。

让我们看看之前的例子,现在是2019年:

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

2019年的并行处理自定义变压器

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

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

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

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

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

这是为什么呢?

不必要的用户参数

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

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

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

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

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

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

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

常见问题解答

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

总结

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

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

顺便说一句,你可能注意到上面的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处理相当有限。我们设想将其应用于图形密集型流程(如Data Inspector),而不是处理引擎。但目前还没有具体的计划。

  2. virtualcitymatt 说:

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

    • 马克爱尔兰 说:

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

  3. 医生 说:

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

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

给…留一个回复匿名取消回复

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

相关的帖子