Spark MLlib 并行性背后的一般原则
General principles behind Spark MLlib parallelism
我是 Spark(以及集群计算框架)的新手,我想知道用于机器学习 (MLlib) 的并行算法所遵循的一般原则。它们本质上更快是因为 Spark 在多个节点上分发 训练数据 吗?如果是,我想所有节点都共享同一组参数吧?而且他们必须在 常规 的基础上组合(例如:求和)中间计算(例如:梯度),我错了吗?
其次,假设我想用一组模型(例如:10)来拟合我的数据。在这种特定情况下,运行 在 10 台机器上独立运行我的旧机器学习程序而不是编写复杂的代码(至少对我来说是这样!)在 Spark 集群中进行训练不是更简单吗?
推论问题:Spark(或其他集群计算框架)是否仅适用于大数据应用程序,我们无法负担训练多个模型的费用,并且在一台机器上训练时间太长?
- 您更正了一般原则。典型的 MLlib 算法是一个具有局部阶段和数据交换的迭代过程。
MLlib 算法不一定更快。他们试图解决两个问题:
- 磁盘延迟。
- 单机内存限制。
如果您可以在单个节点上处理数据,这可能比使用 ML/MLlib 快几个数量级。
最后一个问题很难回答但是:
训练集成并不复杂:
def train_model(iter):
items = np.array(list(iter))
model = ...
return model
rdd.mapPartitions(train_model)
已经有项目这样做了(https://github.com/databricks/spark-sklearn)
我是 Spark(以及集群计算框架)的新手,我想知道用于机器学习 (MLlib) 的并行算法所遵循的一般原则。它们本质上更快是因为 Spark 在多个节点上分发 训练数据 吗?如果是,我想所有节点都共享同一组参数吧?而且他们必须在 常规 的基础上组合(例如:求和)中间计算(例如:梯度),我错了吗?
其次,假设我想用一组模型(例如:10)来拟合我的数据。在这种特定情况下,运行 在 10 台机器上独立运行我的旧机器学习程序而不是编写复杂的代码(至少对我来说是这样!)在 Spark 集群中进行训练不是更简单吗?
推论问题:Spark(或其他集群计算框架)是否仅适用于大数据应用程序,我们无法负担训练多个模型的费用,并且在一台机器上训练时间太长?
- 您更正了一般原则。典型的 MLlib 算法是一个具有局部阶段和数据交换的迭代过程。
MLlib 算法不一定更快。他们试图解决两个问题:
- 磁盘延迟。
- 单机内存限制。
如果您可以在单个节点上处理数据,这可能比使用 ML/MLlib 快几个数量级。
最后一个问题很难回答但是:
训练集成并不复杂:
def train_model(iter): items = np.array(list(iter)) model = ... return model rdd.mapPartitions(train_model)
已经有项目这样做了(https://github.com/databricks/spark-sklearn)