
本文介绍如何在腾讯云 EMR 科学计算集群中,结合 Ray 与 PyTorch 构建分布式深度学习训练流程,实现 Data+AI 融合应用。
随着深度学习模型规模和数据量的增长,单机训练的计算能力已无法满足需求。当涉及到大规模数据集时,单机训练不仅需要耗费较长时间,还会面临计算资源的限制。
分布式训练可以通过并行处理多个任务,充分利用集群资源,从而缩短训练时间、提高训练效率,并且提升模型的性能。
在 AI 与大数据融合的场景中,数据通常存储在分布式文件系统或对象存储中,使用传统方式进行数据读取和模型训练会面临以下挑战:
弹性 MapReduce ( EMR )是腾讯云提供的基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。
EMR 科学计算集群是在标准 EMR 大数据集群基础上,集成了 Ray 、 Spark 、 PyTorch 、 MLflow 等组件的计算型集群,适用于分布式深度学习训练、数据预处理、模型管理等 Data+AI 融合场景。
EMR 科学计算集群默认预安装了以下组件:
/usr/local/service)集群采用开箱即用的设计,用户创建集群后无需手动安装依赖即可开始开发。
在 EMR 科学计算集群中, Ray 作为分布式计算框架,承担以下职能:
Ray 是一个高性能的通用分布式计算框架,旨在帮助用户高效构建和运行大规模的并行程序。它通过简洁的编程接口,将底层复杂的资源调度与任务分发进行了高度封装,使开发者可以像编写普通 Python 脚本一样构建分布式应用。
Ray 具备以下特性,使其适用于分布式深度学习训练场景:
@ray.remote 装饰器将普通函数转换为远程任务,实现函数级别的并行执行RayDP 是 Ray 与 Spark 结合的集成框架,它允许用户在 Ray 应用中直接使用 Spark 进行分布式数据预处理。
通过 raydp.init_spark() 方法可以启动 Spark 会话,并利用 Spark 的分布式计算能力处理大规模数据集。处理后的数据可以方便地转换为 PyTorch 的 Dataset ,用于后续的模型训练。
PyTorch 是一个开源的深度学习框架,广泛应用于图像识别、自然语言处理等 AI 领域。在分布式训练场景中, PyTorch 可以通过多种方式实现多节点并行训练。
Ray Train 是 Ray 提供的分布式训练组件,为 PyTorch 等主流深度学习框架提供了统一的分布式训练接口。
使用 Ray Train 进行 PyTorch 分布式训练时,只需对单机训练代码进行少量修改:
ray.train.torch.prepare_model() 将模型包装为分布式模型ray.train.torch.prepare_data_loader() 为数据加载器添加分布式采样器TorchTrainer 是 Ray Train 提供的训练器类,用于对训练函数进行调度管理。通过 ScalingConfig 可以配置 Worker 数量、是否使用 GPU 等参数。
示例配置:
num_workers:设置分布式 Worker 的数量,控制并行度use_gpu:设置是否使用 GPU 进行训练在 EMR 科学计算集群中, Ray 、 Spark 和 PyTorch 的协同工作流程如下:
在编写训练脚本时,首先需要通过 ray.init() 连接到 EMR 集群中的 Ray 服务。使用 address="auto" 参数可以自动连接到集群中的 Ray Head 节点。
如果 Ray 连接已存在,代码会先清理并重新初始化连接,确保环境的干净。
通过 RayDP 的 raydp.init_spark() 方法启动 Spark 会话,需要配置以下参数:
app_name: Spark 应用程序名称num_executors:执行节点的数量executor_cores:每个执行节点的 CPU 核数executor_memory:每个执行节点的内存大小这些设置需要根据集群的硬件配置进行调整。
在分布式训练之前,通常需要对原始数据进行预处理。 Spark 提供了丰富的分布式数据处理 API ,可以高效地处理大规模数据集。
常见的数据预处理操作包括:
Spark 处理后的数据存储在 DataFrame 中,需要将其转换为 PyTorch 的 TensorDataset ,才能用于模型训练。
转换过程通常包括以下步骤:
TensorDataset 封装特征和标签数据Ray 通过 @ray.remote 装饰器将训练任务分配到多个 Worker 中,使得每个 Worker 可以处理不同的数据分片,从而加速训练过程。
在分布式训练中,各 Worker 独立训练模型并定期同步参数(通过 PyTorch 的分布式通信机制)。 Ray 的调度器会根据任务需求动态调度资源,将计算任务分配给合适的 Worker 节点。
MLflow 是一个开源的机器学习实验管理平台,可以记录训练过程中的参数、指标和模型文件。
在 EMR 集群中, MLflow 与 Ray 、 PyTorch 可以无缝集成:
在 EMR 科学计算集群中, Ray 支持多种数据读取方式,适应不同的数据存储场景。
Ray 集群的 HDFS 只有客户端,如需 HDFS 服务,需要手动配置连接到其他集群的 HDFS 服务。配置完成后,可以通过 Spark 或 Ray 直接读取 HDFS 上的数据文件。
结合 Ray 和 PyArrow 可以实现对腾讯云对象存储( COS )中文件的读写操作。通过远程 Ray 任务,可以并行写入多个文件到 COS ,并验证其可读取性。
这种方法适用于将中间结果缓存到对象存储,或构建分布式数据处理链路。
Ray 还支持从本地文件系统、 NFS 和网络存储(如 S3 )读取数据。在使用本地读取方式时,需要保证每个节点都存在数据副本。
EMR 科学计算集群提供了 Ray Dashboard ,用于实时监控 Ray 应用的运行状态。
Ray Dashboard 提供一个用于实时展示系统指标、节点级资源监控、作业分析以及任务可视化的界面,帮助用户了解 Ray 应用的运行性能,并识别潜在问题。
Ray Dashboard 主要包括以下视图:
在 EMR 集群服务页单击 Ray 组件的 Web UI 即可进入 Ray Dashboard (需安全组开启 8265 端口)。
EMR + Ray + PyTorch 的融合方案适用于以下场景:
利用 Ray 的分布式计算能力,加速卷积神经网络( CNN )在大规模图像数据集上的训练过程。 Spark 负责图像数据的预处理和增强, Ray 负责分布式训练任务的调度, PyTorch 负责模型的前向和后向计算。
对于文本分类、情感分析等自然语言处理任务,可以使用 Ray 进行分布式词向量训练或语言模型训练,充分利用集群的计算资源缩短训练时间。
推荐系统通常需要处理大规模的用户行为数据。使用 Spark 进行特征工程,使用 Ray 和 PyTorch 训练深度学习推荐模型,可以构建端到端的大规模推荐系统训练流程。
Ray 在强化学习领域有广泛应用,其内置的 RLlib 库支持多种主流强化学习算法。结合 PyTorch 作为神经网络后端,可以在 EMR 集群上进行大规模强化学习训练。
在开始开发之前,需要确认已在腾讯云上创建了一个 EMR Ray 集群。创建集群时可以选择所需的组件版本和硬件配置。
EMR Ray 集群默认预安装了 Python 3.9 、 torch 、 tensorflow 、 scikit-learn 等库,开箱即用。如果需要使用其他库,可以通过 pip install 命令在集群节点上安装。
训练脚本可以通过 Jupyter Lab (集群预装)交互式开发,也可以编写为 Python 脚本后提交到集群运行。在编写脚本时,需要正确初始化 Ray 连接,并合理使用 Ray 的分布式计算 API 。
了解更多产品详情:腾讯云 EMR 产品页
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。