Skip to main content
Version: Next

分布式训练

为什么选择简单的深度学习

对于可能没有深入了解深度学习和分布式系统的用户来说,创建一个与Spark兼容的深度学习系统可能具有挑战性。此外,编写定制的深度学习脚本可能是一项繁琐且耗时的任务。SynapseML旨在通过构建在Horovod Estimator(一个与SparkML兼容的通用分布式深度学习模型)和Pytorch-lightning(流行的PyTorch深度学习框架的轻量级包装器)之上来简化这一过程。

SynapseML的简单深度学习工具包使得在Apache Spark中使用现代深度学习方法变得容易。 通过提供一系列的Estimators,SynapseML使用户能够在spark集群上执行分布式迁移学习,以解决自定义的机器学习任务,而无需深入的领域专业知识。 无论您是数据科学家、数据工程师还是业务分析师,该项目都旨在使现代深度学习方法易于用于新的特定领域问题。

SynapseML的简单深度神经网络

SynapseML 超越了 SparkML 对深度网络的有限支持,并为各种常见场景提供了开箱即用的解决方案:

  • 视觉分类:用户可以将迁移学习应用于图像分类任务,使用预训练模型并对其进行微调以解决自定义分类问题。
  • 文本分类:SynapseML通过提供预构建的模型和工具,简化了实现自然语言处理任务的过程,如情感分析、文本分类和语言建模。
  • 更多即将推出

为什么选择Horovod

Horovod 是由 Uber 开发的分布式深度学习框架,因其能够高效地在多个 GPU 和计算节点上扩展深度学习任务而变得流行。它设计用于与 TensorFlow、Keras、PyTorch 和 Apache MXNet 一起工作。

  • 可扩展性:Horovod 使用高效的通信算法,如环形全归约和分层全归约,这使得它能够在多个 GPU 和节点之间扩展训练过程,而不会显著降低性能。
  • 易于集成:Horovod 可以轻松集成到现有的深度学习代码库中,只需进行最少的更改,使其成为分布式训练的热门选择。
  • 容错性:Horovod 提供了弹性训练等容错功能。它能够动态适应工作节点数量的变化或从故障中恢复。
  • 社区支持:Horovod 拥有一个活跃的社区,并在业界广泛使用,这确保了框架的持续更新和改进。

为什么选择Pytorch Lightning

PyTorch Lightning 是一个轻量级的包装器,围绕流行的 PyTorch 深度学习框架设计,旨在使编写干净、模块化和可扩展的深度学习代码变得更加容易。PyTorch Lightning 有几个优势,使其成为 SynapseML 简单深度学习的绝佳选择:

  • 代码组织:PyTorch Lightning 通过将研究代码与工程代码分离,促进了干净且有组织的代码结构。这一特性使得维护、调试和共享深度学习模型变得更加容易。
  • 灵活性:PyTorch Lightning 保留了 PyTorch 的灵活性和表现力,同时添加了有用的抽象来简化训练循环和其他样板代码。
  • 内置最佳实践:PyTorch Lightning 包含了许多深度学习的最佳实践,如自动优化、梯度裁剪和学习率调度,使用户更容易实现最佳性能。
  • 兼容性:PyTorch Lightning 与多种流行工具和框架兼容,包括 Horovod,这使得用户可以轻松使用分布式训练功能。
  • 快速开发:使用 PyTorch Lightning,用户可以快速尝试不同的模型架构和训练策略,而无需担心底层实现细节。

使用DeepVisionClassifier的示例

DeepVisionClassifier 包含了 torchvision 支持的所有模型。

note

当前版本基于 pytorch_lightning v1.5.0 和 torchvision v0.12.0

通过提供一个包含 'imageCol' 和 'labelCol' 的 spark dataframe,您可以直接使用 DeepVisionClassifier 对其应用 'transform' 函数。

train_df = spark.createDataframe([
("PATH_TO_IMAGE_1.jpg", 1),
("PATH_TO_IMAGE_2.jpg", 2)
], ["image", "label"])

deep_vision_classifier = DeepVisionClassifier(
backbone="resnet50", # Put your backbone here
store=store, # Corresponding store
callbacks=callbacks, # Optional callbacks
num_classes=17,
batch_size=16,
epochs=epochs,
validation=0.1,
)

deep_vision_model = deep_vision_classifier.fit(train_df)

DeepVisionClassifier 在底层使用 Horovod 在 Spark 上进行分布式训练,在此拟合过程后,它返回一个 DeepVisionModel。使用此代码,您可以直接使用该模型进行推理:

pred_df = deep_vision_model.transform(test_df)

示例