并行处理可以在性能方面是一个大问题。现代计算机有多个核心和这些核心的传播过程充分利用可用的计算能力。

FME通过定义多个过程的参数发挥优势。另外,并行处理还具有“输入有序”参数,这是另一种性能增强工具。

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

平行处理如何在2019年发生变化

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

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

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

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

并行处理问题

并行处理复杂。也许比我们的界面更复杂。用户需要计划创建多少进程以及每个进程处理多少功能。此外,还有并发症等功能(在并行处理时可以改变)。

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

界面设计

在设计术语中,并行处理的复杂性通过其参数的突出来复杂。我们姗姗来迟地意识到功能应该出现在每个变压器对话框的顶部!它令人困惑,它与变压器的核心目的无关。

并行处理参数2018

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

多个并行处理

正如您所知,启动和停止FME流程有一个开销。在将数据传递到另一个过程中也是一个开销。所以过量的过程慢了翻译。理想的方案是有更少的流程,致力于更多功能。当有很多小的工作时,额外的开销大于并行处理的增益。整体翻译速度较慢,而不是更快。

以FME2018中的示例工作区为例:

让我们开始破坏一个神话。您可能会认为,因为所有三个变压器都设置为并行过程数据,它们可能会同时启动多个进程,将计算机带到其膝盖。那不是这种情况。在所有区域Builder进程都完成之前,灾难仪不会启动任何进程。因此,过程的数量不会螺旋地失控。

这很好。

但是,所有三个变压器按相同属性分组

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

正如我稍后演示的那样,如果作者已经进入了自定义变压器并应用了并行处理,则流程较少。所以,这是我们改变的另一个原因。新的设计鼓励正确的行为,因此提交人更有可能会做正确的事情,即使他们不知道它!

非平行变压器

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

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

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

输入有序和并行处理

输入命令参数很有趣,因为它直接与并行处理绑定在一起,无论是在我们的代码中,还是由于在参数对话框中相邻:

因为它在同一块参数中,所以看起来一定是相关的。事实上并非如此。至少,两者都与表现有关;但是,没有理由一定要对数据进行排序才能使用并行处理,或者对排序后的数据必须进行并行处理。

因此,我们解耦了这两个参数以减少混淆,并防止用户以错误应用它们。特别地,输入有序参数也控制什么是在一个群体中处理的,所以不要滥用它是特别重要的。它也被重新命名和新的选项名称,以更清楚地说明它的用途:

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

FME 2019和并行处理

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

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

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

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

请注意,打开并行处理会自动添加一个已发布的参数(如果没有组,则无法进行并行处理以划分数据)。因此,我返回主画布,打开“参数”对话框,并将组按参数设置为邻居名称:

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

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

......它太并行运行,这是一个额外的奖金。

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

这是为什么?

不必要的用户参数

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

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

但是,如果 - 例如 - 我在测试器变压器中使用邻居名称,那么我可能希望保留第一个发布的参数。第一个提示我用于测试属性,第二个提示我为组的属性提示。

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

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

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

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

常见问题解答

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

总结

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

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

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

关于FME 最佳实践 自定义变压器 FME桌面 FME传教士 基于小组 group by 并行处理 性能

马克爱尔兰

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

注释

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

  1. 布拉德·赫克罗斯 说:

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

    另外,是否有任何关于在桌面和服务器架构中如何实现并行处理的参考?您是否使用本地CPU内核?gpu卸载吗?都有?别的吗?

    • 马克爱尔兰 说:

      这是本地CPU核心。每个FME进程将在不同的核心上运行,与核心数量,FME许可证和并行处理设置相关的最大流程数(最小,中等,攻击性,极端)。看的文档查询更多有关这些数字的信息。我问过开发者关于GPU处理的问题,他们告诉我现在GPU处理相当有限。我们设想将其应用于图形密集型流程(如Data Inspector),而不是处理引擎。但目前还没有具体的计划。

  2. virtualcitymatt 说:

    Hiya Mark,只是想知道是否有类似于这里的工作区运行器的实现计划:https://blog.亚搏在线safe.com/2018/03/batch-processing-2018-evangelist172/- 您可以在其中指定每个FME进程的数字或工作空间。
    这一想法是,而不是拥有新的工作者进程的每个组,而是对每个组进行相同的fmeworker.exe进程的运行并刚收到下一组数据。我不确定会有什么样的含义,但它将使得大量的群体少一个问题

    • 马克爱尔兰 说:

      是的!这绝对是我们的名单。用户不应该真正关心有多少进程和功能开始,只是它在最高效的情况下运行。这就是我们的目标。

  3. 医生 说:

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

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

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

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

相关的帖子