如何在Google云平台上最大化Python中令人尴尬的并行任务的吞吐量?

2024-09-28 05:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用apachebeam/googleclouddataflow来加速现有的Python应用程序。当系统在每个矩阵上运行一个聚类算法时,应用程序的瓶颈出现在输入矩阵N(默认为125次,但可能更多)次之后。运行完全独立。我已经捕捉到了下面的管道顶部:

Pipeline

这将处理默认的125个排列。如您所见,只有RunClustering步骤需要相当长的时间(下面没有显示的还有11个步骤,总共需要11秒)。今天早些时候,我只运行了1个置换,而Run Clustering步骤需要3秒(接近上面显示的时间的1/125)。在

我希望RunClustering步骤在3-4秒内完成,不管输入N是什么。我的理解是Dataflow是在Google云平台上加速令人尴尬的并行计算的正确工具,所以我花了几周时间学习它并移植了我的代码。我的理解正确吗?我也尝试过用更多的机器来解决这个问题(而不是自动调整,不管出于什么原因,它只能扩展到2-3台机器*),并指定更强大的机器类型,但这些都没有帮助。在



*这是因为虚拟机启动时间长吗?如果是这样的话,有没有一种方法可以使用快速配置的vm?我的另一个问题是如何缩短管道启动时间;如果用户不能快速返回结果,这会破坏交易,而且总的数据流作业时间为13-14分钟(与管道已经过多的6-7分钟相比)的事实是不可接受的。在


Tags: run算法机器应用程序管道系统时间步骤
1条回答
网友
1楼 · 发布于 2024-09-28 05:43:31

您的管道正在遭受过度的fusion,并且最终几乎所有的工作都在一个工作线程上完成。这也是为什么autoscaling不能扩展到更高的级别:它检测到它无法并行化您的作业代码,所以它宁愿不浪费额外的工人。这也是为什么手动增加工人来解决问题没有帮助。在

一般来说,融合是一个非常重要的优化,但是过度融合也是一个常见的问题,理想情况下,数据流可以自动缓解(比如automatically mitigates imbalanced sharding),但这更难做到,尽管一些想法正在研究中。在

同时,你需要改变你的代码来插入一个“重组”(一个组按键/解组进行-融合永远不会发生在一个组对键的操作中)。请参见Preventing fusion;问题Best way to prevent fusion in Google Dataflow?包含一些示例代码。在

相关问题 更多 >

    热门问题