Python apachebeam广播一个空间模型作为数据流中的侧输入

Python apachebeam广播一个空间模型作为数据流中的侧输入,python,google-cloud-dataflow,apache-beam,spacy,Python,Google Cloud Dataflow,Apache Beam,Spacy,我正在使用PythonSDK,并尝试广播一个spacy模型(~50MB)。作业将在数据流上运行。 我不熟悉beam,基于我的理解:我们不能在map函数中加载大型对象,也不能在提交作业之前加载它们,因为作业大小是有上限的。下面是在workers上“延迟加载”大型对象的解决方法 ner_model = ( pipeline | "ner_model" >> beam.Create([None])

我正在使用PythonSDK,并尝试广播一个spacy模型(~50MB)。作业将在数据流上运行。 我不熟悉beam,基于我的理解:我们不能在map函数中加载大型对象,也不能在提交作业之前加载它们,因为作业大小是有上限的。下面是在workers上“延迟加载”大型对象的解决方法

        ner_model = (
            pipeline
            | "ner_model" >> beam.Create([None])
            | beam.Map(lambda x: spacy.load("en_core_web_md"))
        )

        (
            pipeline
            | bq_input_op
            | beam.Map(use_model_to_extract_person, beam.pvalue.AsSingleton(ner_model))
            | bq_output_op
        )
但是我有
工作流失败。原因:数据流作业似乎被卡住,因为在过去1小时内未看到任何工作人员活动。请在Stackdriver日志中检查工作人员日志。
但是,根本没有生成Stackdriver日志。我走对了吗

编辑:
我正在使用apache beam 2.23.0,问题可能是您的工作人员没有足够的内存。也许你可以用一个内存更大的worker来解决这个问题。目前默认的工作线程是n1-standard-1,只有3.75 GB RAM

相关的
管道选项是:

workerMachineType字符串

数据流启动时使用的计算引擎计算机类型 工人虚拟机。您可以使用任何可用的计算引擎机器 类型族以及自定义机器类型


有关更多信息,请参阅。

如果要加载大型静态模型,可以尝试使用a将其加载到
DoFn.setUp
中,而不是将其作为侧面输入传递。

谢谢。我试过了,但还是不行。另外,我觉得广播40MB的内存不是很贵吗?你测试的是哪种大小?我曾经处理过拼花地板文件,其中每个文件的大小都小于20MB,但无论如何都必须使用16GB的工作文件。除了纯数据之外,python库确实需要很多额外的内存。我尝试了使用16GB内存的n1-standard-4。可能还不够大?可能尝试在本地加载管道,看看需要多少内存。您也可以尝试使用较小的型号,看看这是否是您的问题。很有可能,为了在工人之间转移,它正试图改变这种模式,这种模式可能效率极低。请参阅下面的备选答案。您能告诉我您使用的是哪一版本的Apache Beam吗?python sdk支持吗?是的,Java和python都支持这一点。这听起来像是侧面输入的备选方案。你能告诉我更多关于它们之间区别的资料吗?