最近我正在计划将独立的Python ML代码迁移到Spark上。
然而,我发现其对于一个重要功能的支持在现有文档中比较模糊:缓存中间结果。当管道涉及计算密集型阶段时,这个功能的重要性就体现出来了。
例如,在我的情况下,我使用一个巨大的稀疏矩阵对时间序列数据执行多个移动平均以形成输入特征。矩阵的结构是由一些超参数确定的。这一步骤成为整个管道的瓶颈,因为我必须在运行时构造矩阵。
在参数搜索期间,我通常除了这个“结构参数”之外还有其他参数要考虑。所以如果在“结构参数”不变的情况下可以重用巨大的矩阵,我就可以节省大量时间。出于这个原因,我特意编写了代码来缓存和重用这些中间结果。
所以我的问题是:Spark的ML管道能否自动处理中间缓存?还是我必须手动编写代码来做到这一点?如果是这样,是否有任何最佳实践可以借鉴?
附言:我已经查看了官方文档和一些其他材料,但似乎没有讨论这个主题。
spark.ml
中的ML管道非常方便,具有流畅的API,可以链接算法阶段和超参数网格搜索。然而,我发现其对于一个重要功能的支持在现有文档中比较模糊:缓存中间结果。当管道涉及计算密集型阶段时,这个功能的重要性就体现出来了。
例如,在我的情况下,我使用一个巨大的稀疏矩阵对时间序列数据执行多个移动平均以形成输入特征。矩阵的结构是由一些超参数确定的。这一步骤成为整个管道的瓶颈,因为我必须在运行时构造矩阵。
在参数搜索期间,我通常除了这个“结构参数”之外还有其他参数要考虑。所以如果在“结构参数”不变的情况下可以重用巨大的矩阵,我就可以节省大量时间。出于这个原因,我特意编写了代码来缓存和重用这些中间结果。
所以我的问题是:Spark的ML管道能否自动处理中间缓存?还是我必须手动编写代码来做到这一点?如果是这样,是否有任何最佳实践可以借鉴?
附言:我已经查看了官方文档和一些其他材料,但似乎没有讨论这个主题。