我正在使用python sdk并尝试广播一个spacy模型(~50MB)。作业将在数据流上运行。我是beam的新手,根据我的理解:我们不能在map函数中加载大对象,并且我们不能在提交作业之前加载它们,因为作业大小是有上限的。下面是在worker上“惰性加载”大对象的解决方法。
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
)但是我得到了Workflow failed. Causes: The Dataflow job appears to be stuck because no worker activity has been seen in the last 1h. Please check the worker logs in Stackdriver Logging.,但是根本没有生成堆栈驱动程序日志。我在正确的轨道上吗?
编辑:我正在使用apache-beam 2.23.0
发布于 2020-09-01 16:22:25
问题可能是您的worker没有足够的内存。也许你可以用一个内存更大的worker来解决这个问题。目前,默认工作进程是n1-standard-1,只有3.75 GB内存。
相关的PipelineOption为:
workerMachineType字符串
Dataflow在启动工作VM时使用的计算引擎计算机类型。您可以使用任何可用的计算引擎计算机类型系列以及自定义计算机类型。
有关详细信息,请参阅here。
发布于 2020-09-02 06:04:27
如果您有一个大型的静态模型要加载,您可以尝试使用DoFn并在DoFn.setUp中加载它,而不是将其作为辅助输入传递。
https://stackoverflow.com/questions/63680287
复制相似问题