gpt4 book ai didi

machine-learning - Flink 中序列化复杂模型的最佳实践

转载 作者:行者123 更新时间:2023-11-30 08:56:20 24 4
gpt4 key购买 nike

我正在使用 UDF 将一些 ML 模型应用于数据流。由于 Flink 无法自动序列化 Model 类(来自第三方库),因此我使用了两个变量,如下所示:

class MyUDF extends KeyedCoProcessFunction[String, ModelDef, Data, Prediction]
with CheckpointedFunction {

// To hold loaded models
@transient private var models: HashMap[(String, String), Model] = _

// For serialization purposes
@transient private var modelsBytes: MapState[(String, String), Array[Bytes]] = _

...
}

地点:

  • models 保存加载(运行)的模型(从 ModelDef 创建,基本上是一个字符串)
  • modelsBytes 是真实的(键控)状态,它保存相同的模型,但作为字节 block ,以便检查点正常工作。

整体解决方案很简单(只需要在恢复/保存模型时调用 fromBytes/toBytes ),但我不知道这是否是常见的/最佳实践。对于本质上相同的事情有两个变量看起来像是一个怪癖。例如,here您可以找到一个使用 TypeSerializer[Option[Model]] 的示例,它看起来更干净,但实现起来也更复杂。

所以,基本上:

  • 我应该使用 TypeSerializer 方法还是可以使用某种重复的状态来运行/序列化模型?

  • 此外,如果您能给我提供一些有关 Flink 中自定义类型序列化的文档/示例,那就太好了,通常我发现官方文档在这方面有点缺乏。

    <

最佳答案

我可能会使用堆状态后端和自定义TypeSerializer

堆状态后端只会在检查点上序列化数据,否则保持数据原样。因此,在使用该后端而不是管理 map 本身时,几乎没有性能损失。但是,它将消除手动执行序列化和同步的需要。

关于machine-learning - Flink 中序列化复杂模型的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59170116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com